Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  -Kullanıcı Girişlerine Güvenmeyin ve Herzaman Kontrol ettirin
-Stored Procedure kullanın
-Veritabanına mutlaka Yetki vererek bağlanın.(sa kullanmayın)
-Mümkünse bir şifreleme algoritması kullanın ve hayati önem taşıyan bilgileri şifreleyerek saklayın.
(.net te System.Security.Cryptography sınıfı mutlaka inceleyin)
-Bir hata oluştuğunda fazla ayrıntılı bilgi mesajı vermeyin.
-.net te debug modunuda mutlaka release yapın,yada web.config ten debug=false yapabilirsiniz
-.net te web.config içinde customErrors anahtarını remoteonly yada on olarak ayarlayın.
M.Koçer
26 Mayıs 2005 09:35
2.  bkz: SQL injection
fizikci
31 Mayıs 2005 19:15
3.  SQL injection'a meydan veren unsurlardan biri de sayısal verilerin tam kontrol edilmemesidir.
Örneğin;

$number = addslashes($_GET["number"]);
//veya $number = mysql_real_escape_string($_GET["number"]); //fonksiyon ismini tam hatırlamıyorum

$query = 'SELECT * FROM tbl_table WHERE number=' . $number . ' LIMIT 1';


Yukarıdaki örnekte kullanıcı girişini kontrol ettiniz sanıyorsunuz ama $number değişkeninin tırnak içermeden yapabileceklerini göz ardı etmiş oluyorsunuz.

$_GET["number"] = "1; DROP DATABASE db_forum -- ";
$number = addslashes($_GET["number"]);
//veya $number = mysql_real_escape_string($_GET["number"]); //fonksiyon ismini tam hatırlamıyorum

$query = 'SELECT * FROM tbl_table WHERE number=' . $number . ' LIMIT 1';

Yukarıda kullanıcının "number" alanına başka bir şeyler girdiğini görüyoruz. Bu değerin hiçbir karakteri "addslashes" fonksiyonunda elenmeyecektir. Bu yüzden sorguya doğrudan katılacaktır. Ve sonuçta sorgu cümlemiz:
SELECT * FROM tbl_table WHERE number=1; DROP DATABASE db_forum -- LIMIT 1

Bu sorgudaki "--", yorum işareti olduğu için MySQL burdan gerisine bakmayacaktır ve bu sorgunun çalışmasıyla siz de tüm veritabanını kaybetmiş olursunuz.

Bu olayı çözmenin bir yolu $number değişkenini sorgu içine tırnak içinde vermek olacaktır ki yanılmıyorsam MySQL için sayıların tırnak içinde olması sorun olmuyor; böylece injection yapılamaz. İkinci yolu ise aldığınız değeri tırnak içinde vermeyecekseniz onun sayı olduğundan emin olun.

if( ctype_digit( $number ) ){
    ....
}
else{
    echo "Sadece rakam giriniz!";
}

erdemkose
11 Eylül 2005 16:56
4.  MySQL ve SQL Server sayıların da tek tırnak içinde belirtilmesine izin veriyor. Hatta çoğu alan tırnak içinde belirtilebiliyor.

Yani;
update kisi set dogum_yili='1980'
gibi. Burada dogum_yili alanı int tipinde olmasına rağmen tırnak içinde kullandık.

Böyle olunca PHP'de addslashes() fonksiyonuyla birlikte alanları da tırnak içinde belirtirseniz biraz daha iyi güvenlik sağlamış oluyorsunuz.

Yani;
$query = "update kisi set dogum_yili='".addslashes($dogum_yili)."'";
gibi.

Bir değişkenin içinde sayı olmasını garanti etmek için ctype_digit() fonksiyonunu kullanabileceğiniz gibi değişkene 0 ekleyerek de bunu sağlayabilirsiniz.

Yani;
$dogum_yili = "1980; drop database forum;--";
$dogum_yili += 0;
// artık dogum_yili=1980 oldu..
gibi.

Aslında SQL injectiona en kesin çözüm parameterized query kullanmaktır. Bu tür queryler performans açısından da çok iyidir. Ayrıntılı bilgi için bkz: bind

Ne var ki PHP 4.0 ve öncesi versiyonlarda bu özellik desteklenmiyor.
Her girişi sürekli kontrol etmek de zahmetli bir iş olduğundan web uygulamalarında güvenlik doğal olarak zayıflıyor.

PHP buna çözüm olması için magic_quotes özelliğini default açık bırakıyordu. Böylece addslashes fonksiyonunu kullanmasanız da sistem bu işi kendisi yapıyordu. Ama bu durum yazdığınız kodun güvenliğinin php.ini'ye bağımlı olması sonucunu doğuruyor.
fizikci
11 Eylül 2005 17:52 ~ 05 Aralık 2005 15:24
5.  "SQL injectionlardan kurtuldum, artık siteme kimse birşey yapamaz" demeyin, yoksa yanılırsınız. Daha sırada HTML injection var.
erdemkose
12 Eylül 2005 22:44
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1093 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen