Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Sizce bu kodun eksiği var mı ?

Merhaba arkadaşlar php dilinden yararlanarak yaptığım sitelerde kullanıcıdan aldığım verilerin güvenliğini sağlamak için aşağıdaki php fonksiyonunu kullanıyorum, bu zamana kadarda sql injection, xss vb. hiçbir durumla karşılaşmadım, merak ettiğim ise bu kodda bir açık var mı, eksik gördüğünüz yönleri ve tavsiyelerinizi yazarsanız memnun olurum. Kullandığım fonksiyon ve kullanım aşamaları aşağıdaki sıralamada mevcut


fonksiyonu ekteki dosyada görebilirsiniz


//Veri kullanıcıdan alınıyor
$metin=trim($_POST['kutu']);

//veri güvenlikten geçiriliyor

$metin=addslashes(kodadam(htmlspecialchars($metin, ENT_QUOTES)));

mysql_query("insert into tablo (metin) values('$metin')");


//Veri ekrana yazdırılırken

echo stripslashes($veri);

Ekli Dosyalar

+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • 2
    fka adlı üyenin fotoğrafı
    7 yıl önce yazılmış
    70 cevap - 0 soru
    mysql_real_escape_string, connection gerektirdiği için birebir aynı işlevi yapan

    function escape_string($str)
    {
    	return addcslashes(stripslashes(trim($str)), "\x00\x1a\x22\x27\n\r");
    }
    


    fonksiyonunu kullanabilirsin.

    Önemli nokta şu: db'ye asla kullanıcı verisini değiştirerek koyma, escape ederek koymalısın. escape ile replace aynı şeyler değildir. escape ettiğin takdirde veri güvenli olarak geçiş yapar fakat değişmez. Bu fonksiyon veriyi güvenli hale getiriyor, replace etmiyor.

    Database'den aldığın verileri de htmlspecialchars fonksiyonu ile ekrana basarsan xss gibi açıkları kapatırsın.
    • huseyiniskender adlı üyenin fotoğrafı huseyiniskender
      Yazmış olduğunuz tavsiyeleri dikkate alacağım teşekkür ederim.
      7 yıl önce yazılmış

Cevaplar

  • onurdegerli adlı üyenin fotoğrafı
    7 yıl önce yazılmış
    10 cevap - 0 soru
    mysql_real_escape_string() kullanmalısın.
    • huseyiniskender adlı üyenin fotoğrafı huseyiniskender
      Cevap yazdığınız için çok teşekkür ederim, yazmış olduğunuz kodun işlevi tam olarak nedir, eğer tırnak, noktalı virgül vb. karakterleri temizliyorsa bu durum zaten yukarıdaki fonksiyonda halledilmemiş mi, vermiş olduğunuz kodu kullanmazsam ne gibi hatalarla karşılaşabilirim. Sanırım biraz fazla soru sordum kusura bakmayın, ilginiz için yeniden teşekkürler.
      7 yıl önce yazılmış
  • necmettin adlı üyenin fotoğrafı
    7 yıl önce yazılmış
    80 cevap - 0 soru
    1. $gkodt1 ile $dkodt1 aynı?
    2. mysql_real_escape_string(), addslashes, htmlentities gibi fonksiyonlardan yararlanabilirsin.
    3. Alfanümerik olmayan şeyleri kontrol etmeye çalışıyorsan ve bu fonksiyondan dönen veriyi kullanıcı adı ve parola gibi alanlarda kullanacaksan böyle bir kontrol yerine A-Za-z0-9 kontrolleri yapsan daha kolay olur, sen burada ½, #, £, < gibi karakterleri kontrol dışında tutmuşsun.
    4. Kullanıcı adında _ ve - kullanılamasın mı?
    • huseyiniskender adlı üyenin fotoğrafı huseyiniskender
      ilginiz için teşekkür ederim, sanırım eklediğim ascii kodlar sistemde dönüştürülüp öyle ekrana basıldı, fonksiyonun tam halini ekteki txt dosyasından bakarak inceleyebilirsiniz.
      7 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      Amaç kullanıcıdan gelen kullanıcı adı ve parola alanlarını güvenli hale getirmek olmamalı, güvenli hale gelene kadar kullanıcıdan yenisini istemek olmalı. Yani kullanıcı olmadık bir karakter kullandığında onu kabul etmemelisin, "düzgününü gir" demelisin. Senin yazdığın fonksiyonla kullanıcı adında her türlü karakter kullanılabiliyor, oysa orada verdiğin karakterler (- ve _ hariç) kullanılamamalı. Çözüm karakterleri HTML entity karşılıklarıyla değiştirmek değil kullanıcının o karakterleri kullanmasını engellemektir.
      7 yıl önce yazılmış