2016-12-11 8 views
0

Bitte beachten Sie diese PHP-Seite mit dem Namen xss1.php. Du kannst es auf jeden LAMP-Server oder deine VM hochladen, um mein Rätsel zu verstehen.XSS in Textfeldern - PHP-Beispiel

Ich war unter dem Eindruck, Daten in Textfeldern werden angezeigt, wie es ist, und benötigen minimale oder keine XSS-Prüfung. In diesem Textfeld, wenn ich in <Skript> Alarm (1) steckte; </script > und das Formular wird veröffentlicht, der Wert wird wieder im Textfeld angezeigt, ohne XSS-Ausführung oder Injektion. Ich benutze Firefox 50.0.2. auf meinem Mac OS X.

Nun, wenn ich in " > <Skript> alert (1) halten; </script >, gibt es XSS und ich sehe eine Javascript-Warnung Pop-Out mit 1 darin. Die Zeichen "/> kommen nach dem Textfeld, das als Text auf der Seite dargestellt wird, nicht innerhalb des Textfelds. Was hat sich hier geändert? Ich bin ein wenig verwirrt und vielleicht die nächste Stunde damit verbringen, die Antwort auf XSS-Filter Evasion Spickzettel zu finden, bei https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

In Safari aber ich habe nicht die Javascript alert Pop-out, aber "/> wird außerhalb des Textfelds geschrieben, direkt danach auf der Seite.

Es ist 02.01 Uhr PT und ich bin Schlaflos in Seattle :)

+0

Dank @Keatinge, ich war unter dem Eindruck, htmlspecialchars Arbeit, wenn Sie den Text auf der Seite, nicht für Textfelder, wo eine Zeichenfolge angezeigt werden soll, wie sie ist, nicht von der Skript-Engine verarbeitet werden. Das ist der Grund wurde zuvor nicht ausgeführt. Ich habe es jetzt mit htmlspecialchars im Textfeld versucht und es nicht zur Ausführung gebracht. –

Antwort

0

Ich hatte den Eindruck, die Daten in Text-Felder angezeigt werden, wie sie ist, und müssen eine minimale oder keine XSS-Überprüfung

Ihr Eindruck war falsch. Jede Benutzereingabe in ein HTML-Dokument muss für XSS berücksichtigt werden. Es muss entweder:

  • Entkommen
  • durch einen wirklich guten Filter Whitelisting Bestanden
  • aus einer vertrauenswürdigen Quelle (und das bedeutet, vertraut nicht bösartig zu sein, und den Code zu schreiben, ohne versehentlich etwas Gefährliches zu schreiben, und Code nicht kopieren/einfügen, den sie nicht verstehen).

Die Zeichen "/> nach dem Text-Feld kam, als Text auf der Seite dargestellt, nicht in dem Textfeld. Was hat sich hier geändert?

Sie haben ein " Zeichen hinzugefügt. Ein " beendet einen Attributwert.

Dann haben Sie eine > hinzugefügt. Innerhalb eines Tags, aber außerhalb eines Attributwerts, beendet eine > das Tag.

Die "/>, die (diejenigen also, die nicht Teil des Benutzer eingegeben werden) in dem Originaldokument nicht mehr ein Attribut und Tag schließen müssen (weil die "> von der Benutzereingabe tat), um Text wiedergegeben werden .

+0

Vielen Dank, Quentin! Ich kann jetzt schlafen :) –