Ich habe einen benutzerdefinierten Beitragstyp erstellt, in dem wir einen Standard-Textbereich / Tinymce finden, der von generiert wurde, wp_editor()
und ich habe ein Problem mit dem Speicherteil.
Wenn ich den Inhalt mit folgendem Code speichere:
update_post_meta( $post_id, $prefix.'content', $_POST['content'] );
Alles funktioniert gut, aber es gibt keine Sicherheit (Desinfektion, Validierung usw.)
Wenn ich den Inhalt mit folgendem Code speichere:
update_post_meta( $post_id, $prefix.'content', sanitize_text_field($_POST['content']) );
Ich löse das Sicherheitsproblem, aber ich verliere den gesamten Stil, die Medien usw. im Inhalt.
Was könnte ein guter Weg sein, um den Inhalt mit dem gesamten angewendeten Stil, den eingelegten Medien, aber einschließlich einer Bereinigung zu speichern?
Ich habe ein bisschen darüber gelesen, wp_kses()
aber ich weiß nicht, wie ich einen guten Filter anwenden kann. (Allgemeine Tags zulassen, welche sollte ich blockieren? Usw.)
wp_kses
Familie verwenden.Antworten:
Kurz gesagt: Es hängt von Ihrem Kontext ab, welche Daten sich in Ihrem Editor befinden.
wp_kses()
ist sehr hilfreich und Sie können Ihr benutzerdefiniertes zulässiges HTML definieren. Alternativ können Sie die Standardfunktionen wiewp_kses_post
oder verwendenwp_kses_data
. Diese Funktionen sind hilfreich, um sicherzustellen, dass vom Benutzer empfangenes HTML nur Elemente auf der weißen Liste enthält. Siehe https://codex.wordpress.org/Data_Validation#HTML.2FXML_FragmentsWordPress definiert viel mehr Funktionen zum Bereinigen der Eingabe, siehe https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data und https://codex.wordpress.org/Data_Validation Diese Seiten sind wirklich hilfreich.
In Ihrem Kontext sollte die
wp_kses_post
Funktion jedoch die richtige Wahl sein.quelle
Versuchen
htmlentities()
konvertiert alle Zeichen mit HTML-Zeichenentitätsäquivalenten in ihre Entsprechungen.sanitize_text_field()
prüft dann auf ungültige UTF-8-Zeichen und entfernt sie. Dies kann nun in der Datenbank gespeichert werden.html_entity_decode()
konvertiert HTML-Entitäten in ihre HTML-Tag-Entsprechungenquelle
Sie könnten so etwas tun:
@fuxia: wie OP schrieb:
"Ich habe ein bisschen über wp_kses () gelesen, aber ich weiß nicht, wie ich einen guten Filter anwenden kann. (Erlaube allgemeine Tags, welche sollte ich blockieren? etc ..)"
wp_kses führt Folgendes aus:
"Diese Funktion stellt sicher, dass nur die zulässigen HTML-Elementnamen, Attributnamen und Attributwerte sowie nur vernünftige HTML-Entitäten in $ string vorkommen. Sie müssen alle Schrägstriche aus den magischen Anführungszeichen von PHP entfernen, bevor Sie diese Funktion aufrufen. ""
https://codex.wordpress.org/Function_Reference/wp_kses
Mein Code wird
wp_kses
mit "Allgemeine Tags zulassen" verwendet. Was sind die häufigsten Tags? Die Liste zum Lesen unter dem angegebenen Link. Es ist eine lange Liste, deshalb habe ich sie hier nicht eingefügt.https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
Ich denke, Textarea selbst sollte in Textarea nicht erlaubt sein.
@bueltge
wp_kses_post macht dasselbe, außer dass das Tag '<textarea>' zugelassen wird, was - glaube ich - nicht sein sollte.
https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/kses.php#L1575
quelle
wp_slash Weitere Informationen.
quelle