Hi!
Beim Aufruf der Seite können nämlich Parameter (?foo=bar) angehängt werden, die in $_SERVER['PHP_SELF'] landen. Wenn man da geschickt Werte einfügt, kann man das action-Attribut mit einem " beenden und dann beliebigen HTML-Code (inklusive Javascript) einschleusen. Ein htmlspecialchars() um $_SERVER['PHP_SELF'] und Betreff und Text ist eine Pflichtveranstaltung.
Ok, ich versteh kaum ein Wort davon, aber in dem von Dir vermeintlich guten FAQ (http://www.php-faq.de/q-stil-normalform.html) macht das ja auch ohne irgend eine Form der Bearbeitung von $_SERVER['PHP_SELF']?!
Schade, ein paar Fehler sind wohl auch dort zu finden. Ich muss mich auch etwas korrigieren, denn PHP_SELF enthält nicht den Querystring. Das macht aber nichts, denn es lässt sich trotzdem missbrauchen. Es gibt ein Feature namens PathInfo. Man ruft eine URL auf /bla/foo.php/bar/qux und wenn foo.php bereits ein Script ist, ruft der Webserver dieses auf. Der Rest ist dann die PathInfo. Die kann man im Script abfragen und gewinnbringend nutzen. PHP_SELF enthält ebenfalls diesen PathInfo-Teil, so dass bei einer URL wie foo.php/">...
[code lang=php]<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
... am Ende <form action="foo.php/">..."> entsteht. Du siehst, dass das "> das action-Attribut und das form-Tag beendet und das ... außerhalb steht. Und nun kann beliebiges HTML, das anstelle des ... steht, vom Browser als solches interpretiert werden. Das darf aber nicht. Ein htmlspecialchars($_SERVER['PHP_SELF']) würde das "> zu "> konvertieren und das action-Attribut bleibt unbeendet.
Also was denn nun? Ist auch diese Seite Schrott?!
Hmm, ich hatte sie eigentlich in keiner schlechten Erinnerung, aber Fehler werden sich wohl nie gänzlich vermeiden lassen.
Ich hab so das Gefühl es gibt kein gescheites Tutorial bei dem man sauberes und sicheres PHP lernen kann. *grummel
Doch, es gibt Seiten, die darauf eingehen. Aber oftmals werden die Anfängertutorials von Nichtmehr-Anfängern geschrieben in der besten Absicht, ihr eben gelerntes Wissen weiterzugeben. Und das ist dann oft noch lückenhaft. Mir ist leider kein Tutorial bekannt, dass fehlerfrei ist und guten Stil lehrt. (Ich suche aber auch nicht aktiv danach.) Die PHP-FAQ ist jedoch noch ein einigermaßen kompetentes.
Lo!