Konu yazılım güvenliği ve veri güvenliği olduğunda en önemli başlıklardan birisi elbette Sql Injection’dır. Tanımını yapmak gerekirse; sql komutları arasına zararlı eklemeler, düzenlemeler yaparak veritabanına erişmek diyebiliriz. Bu erişim izinli olmayan verilere ulaşmak olabilir. Verileri silmek olabilir. Hatta fantastik boyutlarda sunucuya root erişimi bile olabilir. Bu nedenle sql injection’a karşı önlem almak önemlidir.
Nasıl Yapılıyor?
Php ve Mysql kullandığım için örneklerim onlar üzerinde olacak. Yazılım katmanında, veritabanına sorgu gönderirken aslında bir text oluşturuyoruz. Yani aslında Sql sorgusu oluşturuyoruz. Bu sorgunun içerisine eklediğimiz değişkenlerle de dinamik hale getiriyoruz. Örneğin bir kullanıcının verilerini almak ya da kullanıcının verilerini güncellemek gibi. Sorgu içerisinde kullanılan değişkenler kötü niyetli kişiler tarafından manipüle edilmeye çalışılıyor. Çok Basit bir sorgu ile göstereyim. Senaryomuzda login esnasında yaptığımız sorguyu baz alalım ve kullanıcıdan gelen veriler üzerinde her hangi bir kontrol yapmayalım.
Nasıl Önlem Alınabilir?
Öncelikle kullanıcı tarafından gelen verileri filtreden geçirmek önemli. Sadece sql injection için değil XSS için de filtreleme yapmak önemli. Bunun için htmlspecialchars fonksiyonu kullanılabilir. Ancak veritabanı güvenliği için kullanılacak fonksiyonlar yeterli değil. Geçmişte kullanılan fonksiyonlarda vardı. Ancak bunların güvensiz oldukları ortaya çıktı. O nedenle veritabanı sorgularını yaparken Php Pdo ya da Orm kullanmak çok önemli. Bunları kullanırken de doğasına uygun kullanmak önemli. Pdo kullanırken değişkenleri sorgunun içerisine doğrudan yazmak risk oluşturacaktır.
Alınabilecek yazılım önlemleri dışında kullanılan versiyonları güncel tutmak da çok önemli. Php, Mysql, Postgresql, Apache, Nginx vb bir çok yazılımdan kaynaklanan güvenlik sorunları olabilir. Kullanılan yazılımların son sürümlerini takip etmek ve güncel kalmak da önlem alma noktasında çok önemlidir.
Toparlarsak
Çok önemli olan sql injection ve veritabanı güvenliği hakkında kısaca bilgi vermek istedim. Eksik olduğunu düşündüğünüz ya da ekleme yapmak istediğiniz konular olursa yorum yapmaktan geri durmayın. Okuduğunuz ve paylaştığınız için teşekkürler 🙂