Vi använder avancerade anpassade fält i vårt företag och ibland behöver vi använda kortkod i våra anpassade fält. I php-koden använder vi sedan do_shortcode funktioner för dessa fält. Det finns ingen anledning att inte använda det för de flesta fält, eftersom det kan vara så vill vi lägga till kortkoder i ett fält senare.

Vi ” använder också PHP CodeSniffer med WordPress Coding Standards regel. Varje gång vi använder echo do_shortcode är varningen för flykt borta. Så är det säkert att bara använda do_shortcode eller behöver vi använda t.ex. wp_kses_post dessutom?

Finns det några bästa metoder för det?

Tack för alla råd

Kommentarer

  • do_shortcode är inte för att fly.
  • Hm okej, men varför visar codesniffer då ingen varning?
  • Kanske gör det inte visa en varning eftersom kortkodsgivningsfunktionen ska vara ansvarig för att desinficera dess utdata. Men vilken sträng som helst kan skickas till funktionen och om den inte innehåller registrerade kortkoder är jag ' ganska säker på att strängen inte kommer att ändras alls. Det är definitivt inte en allmän sanitetsmetod. Kodsniffaren kan bara göra så mycket. Läs här om hur man sanerar data ordentligt. Det finns många funktioner, de jag använder mycket är esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

Svar

WordPress kodningsstandarder sniffar behandlar do_shortcode() som en ”autosnittad funktion”. Detta verkar ha diskuterats 2015 i dessa GitHub-nummer:

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

Förklaringen som användes när den lades till i listan var:

Jag diskuterade detta med VIP-stöd (# 44195). David, efter att ha konfererat med en annan teammedlem, sa att det är onödigt, eftersom vi gör det där vi slipper HTML där (i kortkodens kod).

Men jag är inte säker på att jag håller med om resonemanget. Om du använde det så här:

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

Där kortkoden är hårdkodad, det är vettigt, eftersom det enda som ska undkommas är utdata från kortkoden, som ska undvikas genom kortuppringning.

I din situation använder du dock do_shortcode() för att möjliggöra exekvering av kortkoder i användarlevererad text från ett anpassat fält. Den texten behöver måste undvikas, men do_shortcode() gör inte någon egentlig flykt.

Så det säkra sättet att hantera fält som detta skulle vara att sätta texten genom wp_kses() eller wp_kses_post(), för att ta bort taggar som inte är tillåtna och sedan sätta det genom do_shortcode() så att kortkoderna kan ex ecuted utan att fly undan igen.

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

Det kommer inte att göra någon skillnad i vad kodsniffer gör / inte rapporterar, men åtminstone levererade användaren text saneras.

En begränsning är att den inte fungerar om du använder esc_html(), eftersom det kommer att störa kortkodsattribut. Denna sanering kommer inte heller att förhindra att användare matar in obalanserade taggar som kan påverka layouten, vilket är en sak som slipper normalt hjälper till. För att åtgärda problemet kan du lägga till force_balance_tags():

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *