SQL Enjeksiyonu
SQL enjeksiyonu, kötü niyetli kullanıcıların bir web uygulamasına girilen verileri manipüle ederek, veritabanı sisteminde istenmeyen işlemler yapmalarına neden olan bir web güvenlik açığıdır. Bu tür bir saldırı ile birlikte, kullanıcılar bir web uygulaması formuna kötü amaçlı kodlar ekleyebilirler. Bu kodlar daha sonra sunucuda çalıştırılan SQL sorgularını manipüle ederek, veritabanında istenmeyen işlemler gerçekleştirebilirler. Bu işlemler arasında veri çalma, veri silme, veri değiştirme veya hatta tüm veritabanı sistemini devre dışı bırakma gibi işlemler yer alabilir.
Örnek olarak, bir kullanıcının adı ve şifresi alınan bir giriş formuna aşağıdaki gibi kötü niyetli bir kod eklenmiş olabilir:
Bu kodun çalışması durumunda, sunucu tarafında yürütülen SQL sorgusu aşağıdaki gibi olacaktır:
Gördüğünüz gibi, kullanıcı adı giriş kutusuna eklenen kötü niyetli kod, SQL sorgusunu sonlandırıp, veritabanındaki "uyeler" tablosunu silmeye çalışır. "--" işareti, sonraki tüm karakterleri yorumlayarak, orada yazılan kodun çalışmasını engeller.
Bu tür bir saldırıyı önlemek için, formdan alınan verilerin doğru bir şekilde filtrelenmesi ve hazırlanması gerekmektedir. Bunun için, PHP'nin sağladığı hazır filtreleme fonksiyonları kullanılabilir. Bunların yanı sıra, PDO (PHP Data Object) gibi veritabanı kütüphaneleri, hazırlanan sorguları veritabanına göndermeden önce parametrelerin doğru bir şekilde filtrelenmesini sağlayarak, SQL enjeksiyonu saldırılarından koruma sağlar.
Örneğin, yukarıdaki form örneğinde, kullanıcı adı ve şifre verilerinin alınması ve PDO kullanılarak güvenli bir şekilde sorgulanması aşağıdaki gibi olabilir:
Yukarıdaki kod örneğinde, öncelikle PDO bağlantısı oluşturulur. Daha sonra, form verileri $_POST
dizisinden alınır ve PDO kullanarak veritabanı sorgusu yapılır. Sorgu, önceden hazırlanmış ifadelerle yapılır, böylece kullanıcı tarafından girilen veriler güvenli bir şekilde sorgulanır. Son olarak, sorgudan dönen sonuçlar kullanarak kullanıcı doğrulanır ve uygun mesajlar ekrana yazdırılır.
Last updated
Was this helpful?