v2.5.2
Giriş yap

Php açık kontrolü

Anonim
764 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Arkadaşlar phpde yeniyim açıklarıdır vs çok bilgim yok. Aşağıdaki kodda siteme kötü niyetli kişiler tarafından zarar verilmesine sebeb olacak bir açık gibi bir şey var mıdır? Bilgili arkadaşlar yardımcı olabilir mi?

<?php
$sql = $db->query("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE '%".$word."%' LIMIT 7");

if ($sql->num_rows) {
    echo '<br>';
    echo '<a id="sonuc">Şuan da "'.$word.'" sözcüğüyle ilgili arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->fetch_assoc())
?>
Cevap yaz
Cevaplar (11)
qplot
1447 gün önce

VERİ TABANI BAĞLANTISI


	$DB_HOST = "localhost";
	$DB_NAME = "veritabanı adı";
	$DB_USER = "root";
	$DB_PASS = "şifre";
	
	try{
		$db = new PDO("mysql:host={$DB_HOST};dbname={$DB_NAME}",$DB_USER,$DB_PASS);
		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->query("SET CHARACTER SET utf8mb4");
		$db->exec("SET CHARACTER SET utf8mb4");
        $db->exec("SET NAMES 'utf8mb4'");  
	}
	catch(PDOException $e){
		echo "Bağlantı Hatası: " . $e->getMessage();
	} 
 
date_default_timezone_set('Europe/Istanbul');

 
ini_set("display_errors", 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
set_time_limit(0);  

buda kullanman gereken sorgu

$word=strip_tags($_POST['deger']); // strip_tags ve turvlerını kullanabılrısın html temızleme ıcın

$sql = $db->prepare("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE ? LIMIT 7");
$sql->execute(["%$word%"])


if ($sql->rowCount()) {
    echo '<br>';
    echo '<a id="sonuc">Şuan da "'.strip_tags($word).'" sözcüğüyle ilgili arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->FETCH(PDO::FETCH_ASSOC)){
    
}
}else{

echo "Kayıt yok";

}

qplot
1447 gün önce

bu hataları almanın nedeni sen mysqli motoru kullanıyorsun ama yazılan kodlar pdo motoru ne yapsan duzelmez o hatalar

mysqli değil pdo olarak yaz

madem yenısın dırek pdo ıle yazmayı ogren çok kod yazmadıysan örnek kodları verelim

isimimcokguzel2
1447 gün önce

Önemli değil hocam iyi günler dilerim.

brkbrk
1447 gün önce

Üçüncü hata hariç hepsi düzeldi. Onu da aramaya devam edeceğim, yardımın için teşekkür ederim.

isimimcokguzel2
1447 gün önce

Sorun değil hocam.

İlk hata için

$_GET["word"] içindeki wordü Parametre Aldığınız Değer Yani
deneme.com/deneme?word=deneme olan değerdir.

Eğer Olmaz ise

İkinci Hata İçin

$sql = $db->prepare("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE '% :word %' LIMIT 7");

böyle denermisiniz hocam büyük ihtimal birleşik olduğu için :word% diye saymış olabilir.

Üçüncü hata için

if ($sql->num_rows) {

a çevirirseniz olacaktır diye düşünüyorum.

brkbrk
1447 gün önce

Hocam sabah sabah tekrar rahatsız ediyorum kusura bakmayın ama sizinki gibi yaptım aşağıdaki şekilde ve ekrana çıkan hatalar şunlar ve yine benim bilgimi aşıyor :/

Notice: Undefined index: word in C:xampphtdocsarama.php on line 31

Warning: mysqli_stmt::execute() expects exactly 0 parameters, 1 given in C:xampphtdocsarama.php on line 35

Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::rowCount() in C:xampphtdocsarama.php:37 Stack trace: #0 {main} thrown in C:xampphtdocsarama.php on line 37

<?php
$word = strip_tags(htmlspecialchars(trim($_GET["word"]), ENT_QUOTES));

$sql = $db->prepare("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE '%:word%' LIMIT 7");

$sql->execute([":word" => $word]);

if ($sql->rowCount() > 0) {
    echo '<br>';
    echo '<a id="sonuc">Şuan da "'.$word.'" sözcüğüyle ilgili arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->fetch_assoc())
    ?>
isimimcokguzel2
1447 gün önce

Hocam şöyle de yapabilirsiniz.

$word = strip_tags(htmlspecialchars(trim($_GET["word"]), ENT_QUOTES));
brkbrk
1447 gün önce

Yalnız şöyle ben en yukarıda $word u en yukarıda get methoduyla gelen kelimeye atamıştım burada farklı olunca hata çıkıyor phpde yeniyim o yüzden pek yapamadım :/

isimimcokguzel2
1447 gün önce
<?php
/* 
strip_tags Html etiketlerini texte dönüştürür. Örnek:' Bu Bir Link ' => ' <a href="#">Bu Bir Link</a> '
htmlspecialchars Yazıyı HTML Symbollerine dönüştürür.
trim Sağ ve soldan boşlukları siler.
*/
$word = strip_tags(htmlspecialchars(trim($word), ENT_QUOTES));

/* Böyle kullanmanız daha güvenli olacaktır çünkü db burda derliyor sen orda direkt yazıyı 
koyarsan derlemeden sql injection ile yorum satırı yapıp bilgilerine erişebilirler. */
$sql = $db->prepare("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE '%:word%' LIMIT 7");
$sql->execute([":word" => $word]);

/* Bunun bi özelliği yok sütün sayısı 0 dan büyükse işte :P*/
if ($sql->rowCount() > 0) {
    echo '<br>';
    echo '<a id="sonuc">Şuan da "'.$word.'" sözcüğüyle ilgili arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->fetch_assoc())
?>
brkbrk
1448 gün önce

Bugra Bey attığınız daha mı güvenlidir.?

bugraskl
1448 gün önce
<?php
$word = htmlspecialchars(trim($word)); // Tek kelime ise bunu
$word = htmlspecialchars($word)); // Birden fazla kelime ise bunu kullanabilirsin.
$sql = $db->query("SELECT * FROM sonuclar WHERE baslik or aciklama or etiket LIKE '%".$word."%' LIMIT 7");

if ($sql->num_rows) {
    echo '<br>';
    echo '<a id="sonuc">Şuan da "'.$word.'" sözcüğüyle ilgili arama sonuçlarını görüyorsunuz.</a>';
    while ($row = $sql->fetch_assoc())
?>