Php Sql Injection Engelleme Kesin Çözüm

Php Sql injection engelleme için kesin bir çözüm var. htmlspecialchars, stripslashes, mysql_escape_string, strip_tags sizi her zaman doğru biçimde korumaz. Yaratıcı injection girişimlerine karşı özelleştirilebilir ve aynı zamanda genel-geçer bir güvenlik kalkanı oluşturmalıyız.

Mysql injection ile uğraşmış herkes, bu işlemin temelde get veya post yöntemiyle yapıldığını bilir. Site üzerinde gerçekleştirilecek bu veri giriş çıkışı, adres satırı işlemleriyle tablo yapısı hakkında bilgiye ulaşıldıktan sonra, tabloya ilgili SQL komutları gönderilir. Bunu engellemenin, sitenizi hackerlardan uzak tutmanın (site bazında) tarafımca denenmiş ve başarılı bir yöntemi var. Bu çözümü WordPress dahil tüm Php tabanlı yazılımlarınızda kullanmanızı tavsiye ederim. Böylece Sql saldırılarından kurtulabileceksiniz.

Atmamız gereken ilk adım “guvenlik.php” adlı bir Php dosyası oluşturarak bu dosyayı tüm PHP dosyalarınızın en üst kısmına include etmek.

Bu include içeren kod satırının Php dosyalarınızın en üstünde olması elzemdir. Eğer bu satırdan önce  Mysql bağlantısı gibi bir kod satırı kullanmışsanız güvenlik kodlamamızın yararsız olabileceğini unutmayın. Ayrıca Mysql içeren (bağlantı/sorgu vb.) her Php dosyası için bu satırın en tepede olması gerekiyor. Şimdi guvenlik.php dosyanızı açıp aşağıdaki adımlara geçebilirsiniz.

GET SQL Injection Saldırıları İçin Güvenlik Sağlayalım

Adres satırından yapılan saldırılar en bilindik ve yaygın olanları. Adres satırından hiçbir veri okutmuyorum diye avunmanız doğru değil. Ortalama bir hacker Mysql işlemlerini adres satırından kolayca yapabilir. Üstelik ?id=12, ?ara=beybut şeklinde okutmalar kullanıyorsanız kesinlikle risk altındasınız. Bu hacking girişimlerini engellemek için Get yöntemine özel bir çözüm üretelim.

Burada $yasaklar karşısında, ¿¿ ile ayırarak belirttiğimiz girdilerden biri adres satırında mevcutsa kişiyi bir resme yönlendirdik. $yasaklar bölümünü tablo, kolon adlarınızı da yazarak güçlendirebilirsiniz. Bu yöntemle ?ref türü, adres satırıyla ilişkili tüm saldırılardan kurtulabilirsiniz. Eğer ayracı (¿¿) beğenmediyseniz bunu değiştirmeniz mümkün.

Hacker, sql injection denediğinde karşısına aşağıdaki resim gelecek.

Hacker Bey
Hacker Bey

Aynı yöntemi POST için de uygulayalım.

POST ile SQL Injection Saldırıları İçin Güvenlik Sağlayalım

Post güvenliği için en elzem konu bütün tablolarınızı aşağıdaki biçimde belirtmenizdir. Çünkü post verilerinde <, >, ‘ gibi karakterler sıkça kullanılır. Bunları engellemek doğru bir yöntem değildir. Bunun yerine hackerın ihtiyacı olan veya tahmin edeceği tüm tablo adlarımızı kontrole ekleyeceğiz. Tablo adı girilmemiş bir SQL sorgusunun çalışmayacağını söylemeliyim. Aşağıdaki örnekteki tablo adlarını Mysql yapınıza göre değiştirmelisiniz.

Her şey tamamsa artık GET veya POST Sql injection yöntemiyle hacklenemeyecek, verilerinizin değiştirilemeyeceği, silinemeyeceği bir web sitesine sahip oldunuz demektir.

Önemli noktalar:

  1. guvenlik.php her PHP dosyanızda (Sql içeren), en tepede include edilmeli.
  2. Tablo adlarınız mutlaka ilgili satırlarda bulunmalı.

 

admin hakkında 986 makale
Beybut.com yöneticisi ve yazarı. 17 Ocak 1980'de doğdu. Uluslar arası ilişkiler ve siyaset bilimi, Türkçe öğretmenliği eğitim aldı. 1995 yılından beri, özellikle yazılım konusunda profesyonel çalışmalarda bulundu. Pascal, Delphi, Php, sunucu güvenliği ve optimizasyonu, Seo alanlarında çalışmalar yürüttü. Yerel gazetelerde köşe yazarlığı yaptı. Yazın yaşamına dair yarışmalarda birçok ödül kazandı. Şiir, tarih, psikoloji, felsefe ve siyaset bilimi özel ilgi alanları.

1 yorum

  1. ޞuanda kullanılan pdo class’da zaten sql injection çok zor.Belki blind sql injection bazen mümkün halde olabılır..Eskıden mysql fonksiyonları ile işlem yaparken intval() fonksiyonu kullanırdım bu şekilde gelen verilerin integer e çevrilmesini sağlardım..Sef linkte bazen sorun çıkartabiliyordu bu fonksiyon..

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*