PDO'da PHP'de Sorgu Sorunları
Bildiğiniz gibi, SQL sorguları SQL enjeksiyonlarına açıktır. PDO eklentisi enjeksiyonlarla mücadele etmek için tasarlanmıştır, ancak varsayılan olarak, bunu otomatik olarak yapmaz.
Soruna bir örnekle bakalım. Diyelim ki içine bir değişkenin eklendiği aşağıdaki sorgumuz var:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Diyelim ki değişkenimiz dışarıdan geliyor, örneğin, bir GET parametresinden. Ancak basitlik için, değerini manuel olarak belirleyelim. Belli bir sayısal değer bekliyoruz, örneğin şu şekilde:
<?php
$id = 1;
?>
Ancak kötü niyetli bir hacker
aşağıdaki değeri iletebilir
(bir role alanımız olduğunu varsayalım):
<?php
$id = '-1 OR role="admin"';
?>
Yani, biz şu sorguyu bekliyorduk:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Ama site yöneticisini çeken aşağıdaki sorguyu elde ettik:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Böyle bir durumdan kaçınmak için, PDO'da hazırlanmış sorgular adı verilen özel bir mekanizma sağlanmıştır. Bunları bir sonraki derste inceleyeceğiz.
Veritabanınıza kasıtlı olarak bir SQL enjeksiyonu gerçekleştirin.