Ich habe ein benutzerdefiniertes Post-Textfeld, mit dem ich bereinigen möchte, wp_kses
bevor ich mein Post-Meta aktualisiere.
Ich habe nach Beispielen für allgemeine $allowed
Einstellungen gesucht , aber ich habe nur dieses Beispiel gesehen:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
Was ist eine typische wp_kses
$allowed
Einstellung? Kann jemand ein Beispiel dafür geben, wonach er normalerweise filtert?
Antworten:
Ich würde der von @JaredCobb veröffentlichten Lösung nicht zustimmen, sie
wp_kses()
ist viel flexibler als die von ihm vorgestellte Methode. Es kann unerwünschte Attribute aus Tags entfernen, ohne die Tags selbst zu zerstören. Wenn der Benutzer beispielsweise eingibt<strong class='foo'>
, wird erwp_kses()
zurückgegeben,<strong>
wenn Sie die Klasse nicht zugelassen haben, währendstrip_tags()
die<strong>
vollständig entfernt wird.@redconservatory: Folgende Attribute möchten Sie verwenden:
Dies ermöglicht Fett- und Kursivschrift ohne Attribute sowie Ankertags mit
href
Attributen ... und sonst nichts. Es verwendet das Whitelisting-Prinzip, das @jaredcobb zu Recht als den besseren Weg hierher bezeichnet.quelle
wp_kses
erlaubt mehr Kontrolle als die nativen PHP-Optionen. Ich glaube, das habe ich gesagt. Ich habe auch das Wort "Attribute" verwendet. Ich sagte, es hängt von Ihrem Anwendungsfall ab. Jemand, der versucht, seine Daten vor allen Tags zu schützen, ist meiner Meinung nach besser dran, wenn Sie strip_tags verwenden, aber es ist mehr meine Präferenz als alles andere. Prost.Ich würde mit dem gleichen
$allowedtags
Array beginnen, das WordPress für ihre Kommentare verwendet. Sie finden ihr Array in der[wordpress directory]/wp-includes/kses.php
Datei. Diese scheinen mir vernünftige Standardeinstellungen zu sein und ein guter Ausgangspunkt. Hier ist ihre Anordnung ...Ich würde nicht von PHP verwenden ,
strip_tags
um als Ersatzwp_kses
.Sie sollten niemals strip_tags verwenden, um den Inhalt eines unbekannten Benutzers zu filtern!
Ich habe ein kurzes Video erstellt, in dem erklärt wird, warum wp_kses () von WordPress aus Sicherheitsgründen besser ist als strip_tags () von PHP .
quelle
Ich habe es nur verwendet,
wp_kses
wenn ich speziell Attribute von HTML-Tags zulassen / filtern musste (zum Beispiel möchte ich, dass sie ein<image>
Tag mit einemsrc=""
Attribut haben dürfen, aber ich möchte nicht, dass sie es können, aberhref=""
oderstyle=""
oder irgendetwas anderes auf dem Bild-Tag. In diesem Fall ist eswp_kses
praktisch, weil Sie (wie Sie in dem von Ihnen erstellten Beispiel sehen können) sehr spezifisch filtern können. Ich habe es jedoch selten verwendet,wp_kses
weil ich nur ein paar native PHPs finde Funktionen (unten) machen den Trick und sind leichter zu verstehen, wenn ich mir den Code einige Monate später ansehe.Wenn Sie HTML-Tags vollständig entfernen möchten (außer vielleicht ein paar zulassen), verwende ich immer
strip_tags
. Sie können eine Reihe zulässiger Tags (wie<p> <br> <strong>
) oder andere harmlose Tags, die Sie mögen, übergeben. Dadurch kann der Benutzer in der Lage sein zu haben einige Kontrolle über die Formatierung, wenn das für Ihren Anwendungsfall anwendbar ist. Ich mag es,strip_tags
weil es einen Whitelist- Ansatz zur Bereinigung Ihrer Daten erfordert. (Dies bedeutet, dass alles entfernt wird, außer was Sie explizit auf die Whitelist setzen).Wenn Ihr Ziel darin besteht, ihnen das Einfügen von HTML in den Inhalt zu ermöglichen, Sie jedoch nur ihren Text bei der Eingabe anzeigen möchten (wie Codebeispiele), verwenden Sie
htmlspecialchars
. Dadurch werden HTML-Zeichen in ihre codierten Gegenstücke konvertiert, sodass Sie sie sicher auf der Seite ausgeben können.Möglicherweise stoßen Sie auf Code,
str_replace
der nach schlechten Tags wie oder oder was auch immer "sucht". Ich empfehle diesen Ansatz wirklich nicht, da für die Bereinigung von Daten ein Blacklist- Ansatz erforderlich ist und Sie ständig sicherstellen müssen, dass Ihre Blacklist auf dem neuesten Stand ist.Zusammenfassend lässt sich sagen, dass es davon abhängt, wofür Ihre Metaboxen verwendet werden. Wenn Sie sich vor Eingaben von Benutzern schützen (die möglicherweise böswillig sind), würde ich
strip_tags
einige der harmlosen Tags empfehlen und nur zulassen. Wenn Sie ein gutes Geschäftsmodell haben, um die Tags und spezifischen Attribute des Benutzerinhalts wirklich mikromanagen zu können ,use wp_kses
.quelle
wp_kses()
allesstrip_tags()
und noch mehr? Ich bin alles dafür, die Dinge einfach zu halten, aber ich denke auch, dass es ein Argument dafür gibt, niemanden "zu überraschen".wp_kses()
ist "der Wordpress-Weg", und da wir Wordpress-Code schreiben, gibt es ein Argument, dass es wahrscheinlich die bessere Wahl ist. Wenn wir zu einem späteren Zeitpunkt bestimmte Tag / Attribut-Kombinationen auf die Whitelist setzen möchten, ist für die Verwendungwp_kses()
von Anfang an kein Refactor erforderlich.Los geht's. Dies funktioniert sowohl in WordPress als auch außerhalb von WordPress.
quelle
Sie können auch die Funktion wp_kses_post verwenden, die für Post-Inhalte verwendet wird und nur Daten als Parameter benötigt.
Weitere Informationen hier: http://codex.wordpress.org/Function_Reference/wp_kses_post
quelle
@ Swetoslav Marinov
Ich habe diesen Code direkt nach $ buffer = trim ($ buffer) hinzugefügt.
Um zu versuchen, HTML zu bereinigen und zu vermeiden, dass eingefügte versteckte Zeichen den Code beschädigen, funktioniert dies nicht. Es bereinigt das HTML, aber versteckte Zeichen bleiben weiterhin erhalten.
quelle