PHP de kod güvenliği için gönderilen ve alınan verileri filtrelerden geçirmemiz gereklidir.Bu filtreler kısaca bunlardır;
is_numeric() : Bu fonksiyon değerin numara olup olmadığını kontrol eder.strip_tags() : Bu fonksiyon html etiketleri temizler.htmlspecialchars() : Bu fonksiyonda html etiketlerini temizler.addslashes() : Bu fonksiyon post veya get ile gönderilen ' tek tırnak veya " çift tırnak karakterlerinin başına / karakteri ekler ve program tarafından string olarak algılanmasını sağlar.mysql_real_escape_string() : Mysql de kullanmak için stringleri uygun biçime dönüştürür.
Bu filtreler sayesinde sql injection ve xss gibi açıklardan korunmuş oluruz, konunun daha ayrıntılı versiyonu içinSQL Injection Nedir ve Nasıl Korunulur? isimli konuya bakabilirsiniz.
SQL Injection web uygulamalarında ki en ciddi açıklardan biridir. Özellikle frameworklerin popülerleşmesi ile eskisine göre bugünlerde biraz daha az görülmektedir ama emin olun hala bir çok sitede var bu açıklar!
Web uygulama geliştiricileri SQL injectionu tam anlamadıklarından bu tarz hatalar yaparlar.
SQL injection veritabanından ve dilden bağımsız olarak her türlü veritabanı ilişkisi bulunan uygulamada bulunabilirler ve bu veritabanı açığı değildir.
SQL Nedir?
SQL (Structed Query Language) veritabanından bilgi çekme, bilgi ekleme, bilgi silme ve bilgi güncelleme işlemlerinin yapılması için kullanılan bir dildir, hemen hemen her uygulamada (web uygulaması, masaüstü uygulamaları) veritabanı desteği vardır.
Örnek olarak ben bu siteye konu eklediğim zaman bu konu veritabanına ekleniyor daha sonra site içerisinde veritabanından gelerek siz ziyaretçiler bu konuları okuyorsunuz, yorum yaptığınızda kaydediliyor ben onayladığımda güncelleme işlemi yapıyor ve yorum yayınlanıyor.
Örnek bir silme komutu: DELETE FROM blog WHERE id=1 blog tablosundaki id değeri 1 olan kaydı silecektir.
Bu konuyu sqlin temel komutlarını ve mantığını anlamış olduğunuzu varsayarak anlatıyorum.
SQL Injection Nedir?
Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQL sorguları oluşturulur. Mesela ?SELECT * FROM blog WHERE id=1? örnek SQL sorgusu basit şekilde veritabanından web sayfasına id değeri 1 olan blog konusunu getirecektir. Bu SQL sorguları oluşturulurken araya karıştırılan herhangi bir meta-karakter SQL Injection? a neden olabilir.
Meta-Karakter
Meta-karakter bir yazılım için özel anlamı olan karakterlerdir. Derleyici ya da yorumlayıcı bu karakteri görünce ondan sonraki karakteri ona göre işler. SQL için en kritik meta karakter (