2012-03-24 12 views
4

Ich möchte einen HTML-Editor auf meiner Website bereitstellen, möchte mich aber nicht für XSS- oder andere Angriffe öffnen, bei denen benutzergeneriertes HTML zulässig ist.Wie kann ich Dangerous HTML wie SO herausfiltern?

Dies ist ziemlich ähnlich wie bei Stack Overflow. Wie wird der HTML-Code hier überprüft/bereinigt, so dass die Styling-Informationen noch erhalten bleiben, während andere, gefährlichere Dinge (wie Javascript, Iframes usw.) weggelassen werden?

Gibt es Bibliotheken (vorzugsweise in PHP), die das schon tun?

+0

Stellen Sie diesem über auf Meta. – j08691

+0

Wahrscheinlich besser gefragt bei meta.stackoverflow.com –

+0

Der einfachste Weg ist, eine Liste der bekannten sicheren und zulässigen HTML-Tags zu verwenden, anstatt zu versuchen, die schlechten Dinge herauszufiltern. –

Antwort

3

PHP hat eine Funktion strip_tags, die HTML- und PHP-Tags aus einer Zeichenfolge entfernt und Ihnen erlaubt, bestimmte zulässige Tags anzugeben. Aber wie @webarto besagt, gibt es libraries, die das besser machen.

Von der PHP Manual.

+4

Das ist nicht die Lösung ... http://htmlpurifier.org/ –

+0

@webarto wie man zum Beispiel '>' und '<' schreibt, aber sie im Ergebnis sichtbar machen? –

+0

@ RokoC.Buljan 'htmlspecialchars' oder' htmlentities' ... –

-1

In Ergänzung zu Whymarrh's Beitrag, schlägt vor, die Code-Arbeit in einem Unterordner Ihrer Site stattfinden zu lassen, und automatisch jeden Code mit "..", oder "http: //" oder irgendwelche mysql-Befehle ändern .

+0

Dies sollte als Kommentar gepostet werden, keine separate Antwort. – brbcoding

0

Sie können

strip_tags($yourData,"<a><p><div><i>") // more tags you want to keep; 

Wenn Ihr mit SQL zu

mysql_real_escape_string($data); 

Das ist alles, was Sie wirklich brauchen, nicht gespritzt verwenden verwenden lassen. Beachten Sie, dass Sie bei der Verwendung von mySQL real escape strip slashes verwenden müssen, um sie zu entfernen, wenn Sie sie zurückgeben.

Hier finden Sie die Dokumentation für strip tags und die Dokumentation für mysql escape.