PHP_SELF
PHP-Entwickler nutzen aus Bequemlichkeit oft die Variable $_SERVER['PHP_SELF'] um in Formularen die aktuelle Adresse in das Form-Tag schreiben zu lassen. In nahezu jeder dynamischen Webseite werden Formulare verwendet, beispielsweise in einem Gästebuch, Board, Shopsystem oder auch nur in einem Kontaktformular. Die Verwendung von $_SERVER['PHP_SELF'] birgt jedoch eine Gefahr von XSS in sich.
Der folgende Code stellt ein typisches Beispiel dar.
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
Nehmen wir an hierbei handelt es sich um ein Kontaktformular welches per http://host/contact.php zu erreichen ist. PHP würde nun automatisch "contact.php" in das Form-Tag schreiben. Was aber passiert, wenn man die URL manipuliert?
In diesem Beispiel wird ein simples Javascript, welches eine Alert Box aufruft, in die Seite eingeschleust. Dazu genügt es den Code an das Ende der URL zu hängen. Würde diese Seite nun über einen Link per folgender URL aufgerufen werden: http://host/contact.php/"><script>alert('XSS')</script><form="
erzeugt PHP folgende Ausgabe:
<form action="contact.php/"><script>alert('XSS')</script><form="" method="post">
Somit würde der Scriptcode zur Ausführung kommen. Möglich wird dies, da die aktuelle Adresse des Scripts ungefiltert ausgegeben wird. Es findet nirgendwo eine Überprüfung der Validität der übergebenen Adresse statt. Durch dass neu entstandene zweite Form-Tag werden zusätzlich Code-Teile, die nun nicht mehr richtig Dargestellt werden würden, ausgeblendet. Der ahnungslose Besucher bekommt von all dem nichts mit.
Doch hier verbirgt sich noch eine weitere Gefahr. Das Umleiten eines Logins. Dadurch das hier direkt das Form Tag verändert wird, ist es sehr einfach möglich sich ein eigenes Form Tag zu erstellen. Dieses würde nach dem originalen angezeigt werden, mit der Folge, dass das originale durch den Browser ignoriert wird. Damit kann ein Angreifer, durch einen User angegebene Login-Daten, zu sich weiterleiten. Dies könnte z.B. bei Onlinebanking fatale Folgen haben.