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ı:
<h1>büyük bi başlık<h1>
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
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.
teşekkurler güzel acıklayıcı olmus