2010-02-21 4 views
5

Hinweis: Ich kümmere mich um SQL-Injection und output Ausgabe anderswo - diese Frage betrifft nur Eingabe-Filterung, danke.Benutzereingabefilter - muss ich HTML filtern?

Ich bin gerade dabei, meine Benutzereingabefilterfunktionen zu refaktorieren. Vor dem Passieren der GET/POST-Parameter auf einen typspezifischen Filter mit filter_var() ich folgendes:

Jetzt die Frage: macht es immer noch Sinn, den Parameter an einen Filter wie htmLawed oder HTML Purifier zu übergeben, oder kann ich den Eingang als sicher betrachten? Es scheint mir, dass diese beiden sich hauptsächlich auf die Granularität der erlaubten HTML-Elemente und -Attribute (die ich nicht interessiert, da ich alles entferne) unterscheiden, aber htmLawed-Dokumente haben einen Abschnitt über 'dangerous characters', der darauf hindeutet, dass es einen Grund gibt um es zu benutzen. In diesem Fall, was wäre eine vernünftige Konfiguration dafür?

+0

Ein gefährliches Zeichen könnten UTF-8-Steuerzeichen sein. – Jacco

+0

Irgendwelche Vorschläge, wie man sie loswerden kann? – djn

+1

Ich verstehe nicht wirklich, dass es bei SQL Injection nur darum geht, unangenehme Benutzereingaben in einer SQL-Abfrage zu verhindern. In der Tat sind die meisten Sicherheitslücken auf den unangenehmen INPUT zurückzuführen, nicht auf die Ausgabe. Diese Schwachstellen werden als "Taint and Sink" bezeichnet. – rook

Antwort

2

Es gibt viele verschiedene Ansätze, um XSS, die sicher sind. Der einzige Grund zu wissen, ob Ihr Ansatz Wasser hält, ist die Ausbeutung zu testen. Ich empfehle die Verwendung eines Free XSS vulnerability Scanner * oder der Open Source wapiti.

Um ehrlich zu sein, werde ich nie strip_tags() benutzen, weil Sie nicht immer HTML-Tags benötigen, um JavaScript auszuführen! Ich mag htmlspecialchars($var,ENT_QUOTES);.

Zum Beispiel diese anfällig für XSS ist:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

Sie nicht brauchen <> Javascript in diesem Fall ausgeführt werden, da Sie Onmouseover verwenden können, ist hier ein Beispiel Angriff:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

Die ENT_QUOTES kümmert sich um die Anführungszeichen, die diese XSS-Schwachstelle patchen.

* Ich bin mit dieser Website/Service angegliedert.

+0

Sehr guter Punkt! Vielen Dank! Ich fand eine Liste von Ereignissen bei http: // php.net/manual/de/function.strip-tags.php # 82180 und übergab das Array an eine str_ireplace() - das sollte sich darum kümmern. – djn

+1

Bitte beachten Sie die Richtlinien für [promotion] (http://stackoverflow.com/faq#promotion). –

0

ich denke, was Sie tun, ist sicher, zumindest aus meiner Sicht kein HTML-Code sollte durch den Filter erhalten

+0

-1 Ja, aber Javascript kann es trotzdem durch diese Filter machen. – rook

Verwandte Themen