Bəzi yerlərdə xüsusilə diqqət etmək vacibdir!
strip_tags() heçdə hər zaman XSS-in qarşısını almır.
Kod:
<?php
// isset() ...
$test = strip_tags((string)$_GET['test']);
print '<input type="text" name="test" value="'.$test.'">';
bu vəziyyətdə strip_tags()-ı bypass etmək 2+2-dir.
Kod:
test.php?test=nese"+onfocus=alert()+autofocus+a
...
Ümumiyyətlə XSS qarşısını almaq üçün strip_tags() funksiyası məsləhətə uyğun deyil. Ən azından çap olunacaq məlumatı təhrif edir.
htmlspecialchars() funskiyasından istifadə daha düzgündür. Lakin burada da bəzi məsələlərdə diqqətli olmaq lazımdır. Default olaraq htmlspecialchars() funksiyası tək dırnaqları encode etmir. Aşağıdakı nümunədə htmlspecialchars funksiyası da kömək etməz:
Kod:
<?php
// isset() ...
$test = htmlspecialchars((string)$_GET['test']);
print "<input type='text' name='test' value='$test'>";
Kod:
test.php?test=nese' onfocus=alert() autofocus a
sorğusu ilə bypass etmək olar..
Fix etmək üçün htmlspecialchars funksiyasında 2-ci parametrdə ENT_QUOTES göndərmək lazımdır!
Kod:
$test = htmlspecialchars((string)$_GET['test'],ENT_QUOTES);
+ gələn məlumatların tiplərinin uyqunluğunu yoxlamaq vacibdir. Əgər rəqəmdirsə is_numeric(), strigdirsə is_string() funksiyaları ilə yoxlamaq olar.