Da się całkowicie zabezpieczyć przed atakami XSS oraz SQL injection, filtrująć każdą zmienną GET i POST.
Przykładowo:
<?php
foreach ($_GET as $value) {
if ((eregi(\"<[^>]*script*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*object*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*iframe*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*applet*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*meta*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*style*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*form*\"?[^>]*>\", $value)) || (eregi(\"([^>]*\"?[^)]*)\", $value)) || (eregi(\"\"\", $value)) || (eregi(\"'\", $value)) || (eregi(\"<[^>]*\", $value)) || (eregi(\"[^>]>\", $value)) || (eregi(\"*\", $value)) || (eregi(\"[]]\", $value)) || (eregi(\"select\", $value)) || (eregi(\"0x73656c656374\", $value)) || (eregi(\";\", $value)) || (eregi(\"--\", $value)) || (eregi(\"@\", $value)) || (eregi(\"/\", $value)) || (eregi(\"%\", $value)) )
{
..
}
}
foreach ($_POST as $value) {
if ((eregi(\"<[^>]*script*\"?[^>]*>\", $value)) || (eregi(\"<[^>]*style*\"?[^>]*>\", $value))) {
..
}
}
?>
.
Jednak owo filtrowanie można ominąć w bardzo prosty sposób.
Podająć wartość $_GET jako: %3Cscript%3Ealert%28document.cookie%29%3B%3C%2Fscript%3E (XSS).
Jednak można jeszcze kilkoma technikami ominąć filtrowanie, stosująć kodowanie.
Problem: Jak się zabezpieczyć do granic możliwości przechodząć przez wszystkie zmienne $_GET i $_POST ?