Der Martin: Cross Site Scripting abwehren

Beitrag lesen

Hi,

Da Cross Site Scripting immer über das Einfügen von Programmier-Code funktioniert, und dieser, weil der Code ja in einem Formular einer HTML-Seite eingegeben wird, zum Erkennen vom entsprechenden Parsern immer mit den Zeichen "<" und ">" daher kommt, müsste es doch für den FormularMailer-"Normalfall", also Anfrage bezüglich Artikel oder Kritik oder Meinung äußern, vollkommen ausreichen, wenn ich einfach das Größerals- und das Kleinerals-Zeichen aus dem Text entferne und z.B. dem Nutzer einen Hinweis ausgeben, dass solche Zeichen nicht erlaubt sind.

nein, du brauchst diese Zeichen nicht zu entfernen, sondern nur korrekt zu maskieren, wenn du sie in einen Kontext bringst, in dem sie eine Sonderbedeutung haben. Bringst du einen Text in HTML-Kontext, solltest du bei der Ausgabe (und erst dann!) die Zeichen '<', '>' durch &lt; und &gt; ersetzen.

Wenn ich per JavaScript garantieren kann, ...

Kannst du nicht. Dein PHP-Script kann auch aufgerufen werden, ohne dass irgendein JS vorher für Ordnung sorgt - sogar ganz ohne Formular, oder mit einem ganz anderen Formular als deinem eigenen.

dass die $_POST Variable sozusagen sauber ist, muss (oder sollte) ich dann in PHP bei weiterer Verarbeitung der Daten und Ausgabe in HTML trotzdem noch zur Sicherheit htmlentities() verwenden?

Nein. Du solltest die Daten bei der Verarbeitung in PHP zunächst unverändert übernehmen, so wie sie im Request übergeben wurden. Erst bei der Übertragung z.B. in eine DB oder zurück in HTML solltest du sie in geeigneter Weise aufbereiten. Aber bitte nicht htmlentities(), denn htmlspecialchars() genügt völlig und verunstaltet keine Zeichen, ohne dass es nötig wäre.

So long,
 Martin

--
Wenn die Amerikaner eines Tages von jeder Tierart ein Pärchen nach Cape Canaveral treiben ...
ja, DANN sollte man endlich misstrauisch werden.