Wir verwenden in unserem Unternehmen erweiterte benutzerdefinierte Felder, und manchmal müssen wir in unseren benutzerdefinierten Feldern einen Shortcode verwenden. Im PHP-Code verwenden wir dann do_shortcode Funktionen für diese Felder. Es gibt keinen Grund, sie für die meisten Felder nicht zu verwenden, da wir möglicherweise später Shortcodes zu einem Feld hinzufügen möchten.

We “ Verwenden Sie auch PHP CodeSniffer mit der WordPress Coding Standards-Regel. Immer wenn wir echo do_shortcode verwenden, ist die Escape-Warnung weg. Ist es also sicher, nur do_shortcode zu verwenden, oder müssen wir z. wp_kses_post zusätzlich?

Gibt es hierzu bewährte Methoden?

Vielen Dank für Ratschläge

Kommentare

  • do_shortcode ist nicht zum Entkommen gedacht.
  • Hm okay, aber warum zeigt Codesniffer dann keine Warnung an?
  • Vielleicht nicht Zeigen Sie eine Warnung an, da die Shortcode-Rendering-Funktion für die Bereinigung der Ausgabe verantwortlich sein sollte. Aber jede Zeichenfolge kann an die Funktion übergeben werden. Wenn sie keine registrierten Shortcodes enthält, bin ich mir ziemlich sicher, dass die Zeichenfolge überhaupt nicht geändert wird. ' Es ist definitiv keine generische Hygienemethode. Der Code-Sniffer kann nur so viel. Lesen Sie hier, wie Sie Daten ordnungsgemäß bereinigen. Es gibt viele Funktionen, die ich häufig benutze, sind esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

Antwort

Die Sniffs von WordPress Coding Standards behandeln do_shortcode() als „autoescaped function“. Dies scheint 2015 in diesen GitHub-Ausgaben diskutiert worden zu sein:

https://github.com/WordPress/WordPress-Coding-Standards/issues/167 https://github.com/WordPress/WordPress-Coding-Standards/issues/428

Die Erklärung, die beim Hinzufügen zur Liste verwendet wurde, lautete:

Ich habe dies mit dem VIP-Support besprochen (# 44195). David sagte nach einer Besprechung mit einem anderen Teammitglied, dass dies nicht erforderlich sei, da wir das Escape-Verfahren ausführen, bei dem der HTML-Code ausgegeben wird (im Code des Shortcodes).

Aber ich bin nicht sicher, ob ich der Argumentation zustimme. Wenn Sie sie so verwendet haben:

<?php echo do_shortcode( "[liveperson]" ); ?> 

Wenn der Shortcode fest codiert ist, Dies ist sinnvoll, da nur die Ausgabe des Shortcodes entzogen werden muss, die durch den Shortcode-Rückruf maskiert werden soll.

In Ihrer Situation verwenden Sie jedoch do_shortcode(), um die Ausführung von Shortcodes in vom Benutzer bereitgestelltem Text aus einem benutzerdefinierten Feld zu ermöglichen. Dieser Text muss maskiert werden, aber do_shortcode() führt kein tatsächliches Escapezeichen aus.

Der sichere Weg, mit solchen Feldern umzugehen, besteht darin, den Text durch wp_kses() oder wp_kses_post(), um nicht zugelassene Tags zu entfernen, und dann durch do_shortcode(), damit die Shortcodes ex sein können ecuted, ohne erneut maskiert zu werden.

$text = get_field( "field_name" ); echo do_shortcode( wp_kses_post( $text ) ); 

Es macht keinen Unterschied, was der Code-Sniffer meldet / nicht meldet, aber zumindest der vom Benutzer bereitgestellte Text ist bereinigt.

Eine Einschränkung besteht darin, dass es nicht funktioniert, wenn Sie esc_html() verwenden, da dies die Shortcode-Attribute beeinträchtigt. Diese Bereinigung verhindert auch nicht, dass Benutzer unausgeglichene Tags eingeben, die sich auf das Layout auswirken können. Dies ist eine Sache, die normalerweise nicht funktioniert. Um dieses Problem zu beheben, können Sie force_balance_tags():

hinzufügen

$text = get_field( "field_name" ); echo do_shortcode( force_balance_tags( wp_kses_post( $text ) ) ); 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.