Şub 13th, 2009
yazar Zihni.
Kullanıcının betiklerimize html kodu enjekte etmesiyle ortaya çıkar.
Girdi filtrelenmeden çıktı olarak sunuluyorsa bu saldıya uğranabilir.
Aşağıdaki gibi bir formumuz olsun:
1
2
3
4
| <form id="form1" action="" method="post">
<textarea name="mesaj"></textarea>
<input type="submit" value="gönder" />
</form> |
Formdaki mesaj alanına aşağıdaki javascript kodunun enjekte edildiğini varsayalım.
1
2
3
| <?php
<script type="text/javascript">window.location = 'http://www.zihni.net' </script>
?> |
Girdiyi filtrelemeden, aşağıdaki şekilde ekrana yazdırırsak, sayfaya giren her kullanıcıyı istediğimiz siteye yönlendiririz.
1
2
3
| <?php
echo $_POST['mesaj'];
?> |
Yukardaki kodun zararlı etkilerinden korunmak için girdiyi htmlentities() işleviyle filtrelememiz gerekir.
1
2
3
| <?php
echo htmlentities($_POST['mesaj']);
?> |
Şub 1st, 2009
yazar Zihni.
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>