Sollte die HTML-Ausgabe über esc_html () UND wp_kses () übergeben werden?

11

Ich bin verwirrt über die verschiedenen Verwendungen von esc_html()und wp_kses(). Ich verstehe, dass esc_html()Sonderzeichen in ihre HTML-Entität konvertiert werden und wp_kses()unerwünschte Tags (z. B. <script>) entfernt werden, bin mir jedoch nicht sicher, in welchen Kontexten sie zusammen oder getrennt verwendet werden sollen.

Wenn ich nicht vertrauenswürdiges HTML durchführe esc_html(), wird JavaScript im Klartext angezeigt und nicht vom Browser gerendert. An diesem Punkt ist es also sicher, richtig? Der einzige Grund, es auch durchzulaufen, wp_kses()wäre zu vermeiden, dass das Rohskript angezeigt wird?

Grundsätzlich esc_html()macht es sicher und wp_kses()macht es hübsch. Ist das korrekt?

Ian Dunn
quelle

Antworten:

16

Die allgemeine Regel, zumindest wie von Mark Jaquith vertreten , lautet: Desinfizieren bei Eingabe, Flucht bei Ausgabe (die Folge dieser Regel ist frühes Desinfizieren , spätes Entkommen ).

Verwenden Sie also kses()beim Speichern nicht vertrauenswürdiger Daten in der Datenbank Bereinigungsfilter (z. B. die Familie) und esc_*()beim Ausgeben nicht vertrauenswürdiger Daten in der Vorlage Escape-Filter (z. B. die Familie) .

Chip Bennett
quelle
14

Die kses-Funktionen sollten verwendet werden, wenn Sie möchten, dass eine Teilmenge von HTML im Ergebnis enthalten ist. In Kommentaren ist beispielsweise HTML-Code für Fettdruck, Kursivschrift, Links usw. zulässig.

Die Funktion esc_html sollte verwendet werden, um HTML vollständig zu maskieren. Kein HTML wird durchlaufen, ohne in etwas konvertiert zu werden, das von einem Browser als Nicht-HTML interpretiert wird.

Otto
quelle