We gebruiken geavanceerde aangepaste velden in ons bedrijf en soms moeten we shortcode gebruiken in onze aangepaste velden. In de php-code gebruiken we dan de do_shortcode functies voor deze velden. Er is geen reden om het niet voor de meeste velden te gebruiken, aangezien het kan zijn dat we later shortcodes aan een veld willen toevoegen.

Wij ” gebruiken ook PHP CodeSniffer met de regel WordPress Coding Standards. Elke keer dat we echo do_shortcode gebruiken, is de ontsnappende waarschuwing verdwenen. Dus is het veilig om do_shortcode te gebruiken of moeten we b.v. wp_kses_post bovendien?

Bestaat daar een best practice voor?

Bedankt voor elk advies

Opmerkingen

  • do_shortcode is niet om te ontsnappen.
  • Hm oké, maar waarom toont codesniffer dan geen enkele waarschuwing?
  • Misschien niet een waarschuwing weergeven omdat de functie voor het renderen van de shortcode verantwoordelijk zou moeten zijn voor het opschonen van de uitvoer. Maar elke string kan aan de functie worden doorgegeven en als deze geen geregistreerde shortcodes bevat, ben ik ' vrij zeker dat de string helemaal niet zal worden gewijzigd. Het is beslist geen generieke saneringsmethode. De code sniffer kan maar zo veel. Lees hier hoe u gegevens correct kunt opschonen. Er zijn veel functies, degene die ik veel gebruik zijn esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

Antwoord

De WordPress Coding Standards sniffs behandelen do_shortcode() als een “autoescaped-functie”. Dit lijkt te zijn besproken in 2015 in deze GitHub-problemen:

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

De verklaring die werd gebruikt toen het aan de lijst werd toegevoegd, was:

Ik heb dit besproken met VIP-ondersteuning (# 44195). David zei, na overleg met een ander teamlid, dat het niet nodig is, aangezien we ontsnappen waar de HTML wordt uitgezonden (in de shortcode-code).

Maar ik weet niet zeker of ik het eens ben met de redenering. Als je het op deze manier hebt gebruikt:

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

Waar de shortcode hard gecodeerd is, het is logisch, want het enige dat ontsnapt is, is de uitvoer van de shortcode, die moet worden ontsnapt door de shortcode-callback.

In jouw situatie gebruik je echter do_shortcode() om uitvoering van shortcodes binnen door de gebruiker aangeleverde tekst uit een aangepast veld toe te staan. Die tekst moet worden geëscaped, maar do_shortcode() voert geen daadwerkelijke ontsnapping uit.

Dus de veilige manier om velden zoals deze te behandelen, is door de tekst door wp_kses() of wp_kses_post(), om niet-toegestane tags te verwijderen, en vervolgens deze door do_shortcode() te halen zodat de shortcodes ex kunnen zijn geëcuteerd zonder opnieuw te worden ontsnapt.

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

Het maakt geen enkel verschil uit wat de code sniffer wel / niet rapporteert, maar in ieder geval de door de gebruiker aangeleverde tekst wordt opgeschoond.

Een beperking is dat het “niet werkt als u esc_html() gebruikt, omdat dat de shortcode-attributen zal verstoren. Deze opschoning “zal ook niet voorkomen dat gebruikers ongebalanceerde tags invoeren die de lay-out zouden kunnen beïnvloeden, en dat is iets waar ontsnappen normaal gesproken bij helpt. Om dat probleem op te lossen, zou je force_balance_tags() kunnen toevoegen:

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *