Php'de aşağıdaki gibi bir kod yazdığımda, kullanıcı verisini doğrudan Sql sorgusunun içine yerleştirdiğimde, Sql Injection'a maruz kalacağım.
$guvensiz_veri = $_POST['kullanici_verisi];
mysql_soru("INSERT INTO tablo (kolon) VALUES ('" . $guvensiz_veri . "')");kullanıcıdan veri aldığım yere kullanıcı aşağıdaki gibi bir kod yazarsa
değer'); DROP TABLE tablo;--,
Sql sorgusu şu şekilde değişecek
INSERT INTO tablo (kolon) VALUES('değer'); DROP TABLE tablo;--')Bu gibi bir durumda Php'de sql Injection'dan korunmak için ne yapmalıyım?
Toplam 2 cevap
Php'de Sql Injection dan korunmak için
Hazırlanmış ifadeler ve parametreli sorgular kullanın.
Temel olarak iki seçeneğiniz var
$stmt = $pdo->prepare('SELECT * FROM Kisiler WHERE Ad = :ad');
$stmt->execute(array(':ad' => $ad));
foreach ($stmt as $row) {
// $row ile bir şeyler yap.
}$stmt = $dbConnection->prepare('SELECT * FROM Kisiler WHERE Ad = ?');
$stmt->bind_param('s', $ad);
$stmt->execute();
$sonuc = $stmt->get_result();
while ($row = $sonuc->fetch_assoc()) {
// $row ile bir şeyler yap.
}$guvensiz_veri = addslashes($_POST['kullanici_verisi]);
mysql_ söz dizimlerini kullanarak yazıyorsan direk addslashes fonksiyonunuda kullanabilirsin.
'" gibi özel karakterlerin başına / koyar mysql kayıt ederkende eklediği / ları siler temiz bir kayıt olur.