Vi bruker avanserte tilpassede felt i vårt firma, og noen ganger trenger vi å bruke kortkode i våre tilpassede felt. I php-koden bruker vi deretter do_shortcode
funksjoner for disse feltene. Det er ingen grunn til ikke å bruke den for de fleste felt, da det kan være at vi vil legge til kortkoder i et felt senere.
Vi » bruker også PHP CodeSniffer med WordPress Coding Standards regel. Hver gang vi bruker echo do_shortcode
, er den rømmende advarselen borte. Så er det trygt å bare bruke do_shortcode
eller trenger vi å bruke f.eks. wp_kses_post
i tillegg?
Er det noen god praksis for det?
Takk for noen råd
Kommentarer
- do_shortcode er ikke for å rømme.
- Hm ok, men hvorfor viser ikke codesniffer noen advarsel?
- Kanskje det ikke Vis en advarsel fordi gjengivelsesfunksjonen for kortkoden skal være ansvarlig for å desinfisere utdataene. Men hvilken som helst streng kan sendes til funksjonen, og hvis den ikke inneholder registrerte kortkoder, er jeg ' ganske sikker på at strengen ikke vil bli endret i det hele tatt. Det er definitivt ikke en generell sanitetsmetode. Kodesnifferen kan bare gjøre så mye. Les her om hvordan du kan desinfisere data riktig. Det er mange funksjoner, de jeg bruker mye er esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…
Svar
WordPress Coding Standards sniffs behandler do_shortcode()
som en «autoskapet funksjon». Dette ser ut til å ha blitt diskutert i 2015 i disse GitHub-utgavene:
https://github.com/WordPress/WordPress-Coding-Standards/issues/167 https://github.com/WordPress/WordPress-Coding-Standards/issues/428
Forklaringen som ble brukt da den ble lagt til listen var:
Jeg diskuterte dette med VIP-støtte (# 44195). David, etter å ha snakket med et annet teammedlem, sa at det er unødvendig, ettersom vi gjør det å flykte der HTML-en sendes ut (i kortkodens kode).
Men jeg er ikke sikker på at jeg er enig i resonnementet. Hvis du brukte det slik:
<?php echo do_shortcode( "[liveperson]" ); ?>
Hvor kortkoden er hardkodet, det er fornuftig, fordi det eneste å unnslippe er utdata fra kortkoden, som skal unnslippes ved tilbakeringing av kortkode.
I din situasjon bruker du imidlertid do_shortcode()
for å tillate kjøring av kortkoder i brukertilført tekst, fra et tilpasset felt. Den teksten trenger må unngås, men do_shortcode()
rømmer ikke.
Så den trygge måten å håndtere felt som dette ville være å sette teksten gjennom wp_kses()
eller wp_kses_post()
, for å fjerne tagger som ikke er tillatt, og deretter legg den gjennom do_shortcode()
slik at kortkodene kan være ex ecuted uten å bli rømt igjen.
$text = get_field( "field_name" ); echo do_shortcode( wp_kses_post( $text ) );
Det vil ikke gjøre noen forskjell i hva kodesnifferen rapporterer / ikke rapporterer, men i det minste leverte brukeren tekst er desinfisert.
En begrensning er at den ikke fungerer hvis du bruker esc_html()
, fordi det vil forstyrre kortkodeattributtene. Denne sanitiseringen forhindrer ikke at brukere legger inn ubalanserte koder som kan påvirke oppsettet. Det er en ting som unnslippe normalt hjelper til. For å løse problemet kan du legge til force_balance_tags()
:
$text = get_field( "field_name" ); echo do_shortcode( force_balance_tags( wp_kses_post( $text ) ) );