Stiamo utilizzando campi personalizzati avanzati nella nostra azienda e a volte abbiamo bisogno di utilizzare lo shortcode nei nostri campi personalizzati. Nel codice php utilizziamo quindi il do_shortcode funzioni per questi campi. Non cè motivo di non utilizzarlo per la maggior parte dei campi, poiché potrebbe essere necessario aggiungere shortcode a un campo in un secondo momento.

Noi ” stai anche usando PHP CodeSniffer con la regola degli standard di codifica di WordPress. Ogni volta che usiamo echo do_shortcode lavviso di escape scompare. Quindi è sicuro utilizzare solo do_shortcode o è necessario utilizzare ad es. wp_kses_post inoltre?

Esistono best practice in merito?

Grazie per eventuali consigli

Commenti

  • do_shortcode non è per lescape.
  • Hm okay, ma perché codesniffer non mostra alcun avviso?
  • Forse non lo fa mostra un avviso perché la funzione di rendering dello shortcode dovrebbe essere responsabile della disinfezione del suo output. Ma qualsiasi stringa può essere passata alla funzione e se non contiene shortcode registrati, allora sono abbastanza sicuro che la stringa non verrà modificata. '. Non è sicuramente un metodo igienico-sanitario generico. Lo sniffer di codice può fare solo così tanto. Leggi qui su come disinfettare i dati correttamente. Ci sono molte funzioni, quelle che uso spesso sono esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

Risposta

Gli standard di codifica di WordPress trattano do_shortcode() come una “funzione autoescaped”. Questo sembra essere stato discusso nel 2015 in questi numeri di GitHub:

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

La spiegazione utilizzata quando è stato aggiunto allelenco era:

Ne ho discusso con lassistenza VIP (# 44195). David, dopo aver parlato con un altro membro del team, ha detto che non è necessario, poiché eseguiamo lescape nel punto in cui viene emesso lHTML (nel codice dello shortcode).

Ma non sono sicuro di essere daccordo con il ragionamento. Se lhai usato in questo modo:

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

Dove lo shortcode è hard-coded, ha senso, perché lunica cosa da sfuggire è loutput dello shortcode, che dovrebbe essere sottoposto a escape dalla callback dello shortcode.

Tuttavia, nella tua situazione, stai usando do_shortcode() per consentire lesecuzione di codici brevi nel testo fornito dallutente, da un campo personalizzato. Il testo non deve essere sottoposto a escape, ma do_shortcode() non esegue alcun effettivo escape.

Quindi il modo sicuro per gestire campi come questo sarebbe inserire il testo attraverso wp_kses() o wp_kses_post(), per rimuovere i tag non consentiti e quindi inseriscilo in do_shortcode() in modo che gli shortcode possano essere ex eseguito senza che venga nuovamente eseguito lescape.

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

Non farà alcuna differenza su ciò che lo sniffer di codice segnala / non segnala, ma almeno il testo fornito dallutente è disinfettato.

Una limitazione è che non funzionerà se si utilizza esc_html(), perché ciò interferirà con gli attributi dello shortcode. Questa sanificazione non impedisce inoltre agli utenti di inserire tag sbilanciati che potrebbero influire sul layout, che è una cosa che normalmente aiuta. Per risolvere il problema, aggiungere force_balance_tags():

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *