Reinigen eines HTML-String ein paar Tags und Attribute Speichern
-
30-09-2019 - |
Frage
Nachdem ich meine sanitize Funktionen implementiert (nach Wunsch-Spezifika), mein Chef beschlossen, die akzeptierte Eingabe zu ändern. Jetzt will er einigen spezifischen Tag und seine Attribute halten. Ich schlug vor, eine BBCode-ähnliche Sprache zu implementieren, die sicherer imho ist, aber er will nicht, weil es zu viel Arbeit sein würde.
Dieses Mal Ich mag wäre es einfach zu halten, so werde ich ihn das nächste Mal nicht töten fragt er mich wieder diese Sache zu ändern. Und ich weiß, er wird.
Ist es genug, den ersten Einsatz der strip_tags
mit die Tag-Parameter zu erhalten und dann htmlentities
?
Lösung
strip_tags
nicht unbedingt in sicherem Inhalt führen. strip_tags
von htmlentities
gefolgt wäre sicher, dass alles, was HTML-kodierte sicher ist, aber es macht keinen Sinn machen.
Entweder der Benutzer die Eingabe Klartext, in welchem ??Fall es Ausgabe mit htmlspecialchars
(bevorzugt gegen htmlentities
) sein sollte, oder sie Eingabe HTML-Markup, in diesem Fall müssen Sie es richtig analysieren, gebrochen Markup Fixieren und Entfernen Elemente / Attribute, die nicht in einer sicheren weißen Liste sind.
Wenn das, was Sie wollen, verwenden Sie eine vorhandene Bibliothek, es zu tun (z. B. HTMLPurifier ). Weil es keine triviale Aufgabe, und wenn Sie es falsch haben Sie sich XSS Sicherheitslücken gegeben.
Andere Tipps
Sie können die spezifischen Tags halten strip_tags
mit dieser Syntax: strip_tags($text, '<p><a>');
Das Snippet würde alle Tags außer p
und a
abzustreifen. Attribute werden gehalten Tags, die Sie erlaubt haben (p
und a
in dem obigen Beispiel).
Allerdings bedeutet dies nicht, dass die Attribute sicher sind. Hat er bestimmte Attribute wollen oder tut er alle von ihnen erlaubten Tags zu behalten? Für den ersten Fall müßten Sie jeden Tag analysieren und entfernen die, die gewünscht wird, um die Werte Desinfizieren. Um alle Attribute auf den erlaubten Tags zu halten, müssen Sie immer noch, sie sanieren. Ich würde empfehlen, htmlentities
auf die Attributwerte laufen sie zu sanieren (für die Anzeige, würde ich annehmen).