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.