mysql'inize sızdıklarının tespitini nasıl yaptınız? brute force ile şifrenizi de ele geçirmiş olabilir. eğer ki direkt olarak mysql'inize erişimleri olduğundan eminseniz 3 seçenek var:

1) sunucu sağlayıcısı taraflı güvenlik açığı
2) script'iniz işini bilmeyen insanlar tarafından yapıldığı için temizlenmeden işlenen sql sorguları neticesinde sql injection açığı
3) web server panelinize brute force uygulanmış olması.

ancak asıl ana sebebin tespitinin yapılması pahalı bir işlemdir ve tam bir test yaptırana kadar yazılımcı sunucuya, sunucu yazılımcıya atacak topu.

sql injection hakkında da çok yanlış-eksik bilgi veren kişiler olmuş.

SQL injection kısaca bir sql payload'ındaki client side tarafına bağlı değişkenine yine client side üzerinden bu payload'ın yapısını bozacak kod girilmesidir.

Saldırılara açık bir sql sorgusu:
$id = $_POST["id"]
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE id = $id";
$result = $conn->query($sql);
örnekte client side'dan gelen ve id ismine sahip bu POST değeri sorgu içerisinde direkt olarak çalıştırılıyor. Bu sorgu $id değişkenine ', " gibi bir ifade girilerek kolayca manipüle edilebilir durumda.

Saldırılara kapalı bir SQL sorgusu örneği:


$id = intval($_POST["id"])
if($id !== 0 && is_numeric($_POST["id"]) === true){
$stmt = $conn->prepare("INSERT INTO MyGuests (id) VALUES (?)");
$stmt->bind_param($id);
$stmt->execute();
}
ID'nin bir sayısal değer olduğu beklendiğinden intval() komutu ile değişken olası bir SQL injection kod yapısına karşı temizlenirken, is_numeric() ile de gelen değerin sadece sayılardan oluştuğu kontrolü yapılıyor. Ardından sorgu prepare ile tekrar olası bir sql injection saldırısına karşı temizleniyor. (intval() SQL injection'a karşı tam koruma sağlar. Ancak bu çözüm sadece sayısal değerlerde ve eğer id'inin 0 girilmesi veritabanı mimarisinde bir problem arzetmeyecekse kullanılır. Değerin sayısal olmadığı yerlerde koruma prepare ile sağlanır.)


Ancak sql injection açığı çokça rastladığımız bir durum. Oysa SQL injection'dan korunmak oldukça basit ve kesin.