Güvenli PHP Uygulamaları – Kullanıcı Girdilerinin Filtrelenmesi

Kullanıcı girdilerine güvenilmemeli, betiklerimizin güvenliği için
tüm girdiler filtrelenmelidir.

Örneğin kullanıcıdan yaş bilgisini isteyelim:

Kullanıcıdan beklenen girdi, sayı türünde bir değerdir.
Aşağıdaki kod bu doğrulamayı yapar.

$sonuc = preg_match("/[0-9]{1,3}/",$_POST['yas']);
if($sonuc === true)
echo "Girdi doğrulandı";
else
echo "Girdi sayı değil";

Kullanıcının hayat hikayesini istediğimizi varsayalım, yukardaki gibi bir basit bir doğrulama yapamayız, bunun yerine php nin bize sunduğu temel filtreleme işlevlerinden yararlanabiliriz.
Html tagları sorunlara yol açabilir.
stript_tags() işlevi html etiketlerini yok eder.

$girdi = "<h1>büyük bi başlık</h1><span>span etiketi</span>";
echo strip_tags($girdi);

Yukardaki örneğin çıktısı:

büyük bi başlık span etiketi

Bazı etiketlere izin vermek istiyorsak:

$girdi = "<h1>büyük bi başlık</h1><span>span etiketi</span>";
echo strip_tags($girdi,"<span>");</span>

Yukardaki örneğin çıktısı:

büyük bi başlık <span>span etiketi</span>

htmlentities() işlevi tüm html karakterlerini html entitilerine çevirir.

$girdi = "<h1>büyük bi başlık</h1>";
echo htmlentities($girdi, ENT_QUOTES,'UTF-8');

yukarıdaki örneğin çıktısı:

&lt;h1&gt;büyük bi başlık&lt;h1&gt;

3 Yorum

  1. Duygu AĞIRAL diyor ki:

    Bilgiler için çok teşekkürler, bunlara bir iki şey daha eklemek isterim, hepimize faydalı olur sanıyorum.

    Aynı şekilde ” htmlspecialchars($girdi) ” de yine özel karakterleri &sdsd şekline getirir. Sayfalarımızda javascript kodu varsa tırnakları da kapatmak gerekir, bunun için de str_replace ile tırnakları silebilir ya da değiştirebiliriz ;)

  2. Zihni diyor ki:

    Haklısın, benim de bildiğim kadarıyla, htmlspecialchars işlevi, html’deki ön tanımlı karakterlerden bazılarını(‘,”,&,< ,>), htmlentities ise tüm html karakterlerini escape işlemi alıyor.

  3. ismail diyor ki:

    teşekkurler güzel acıklayıcı olmus

Yorum Yaz