Käytämme edistyneitä mukautettuja kenttiä yrityksessämme, ja joskus meidän on käytettävä lyhytkoodia mukautetuissa kentissä. PHP-koodissa käytämme sitten do_shortcode -toiminnot näille kentille. Ei ole mitään syytä olla käyttämättä sitä useimmissa kentissä, koska voimme halutessasi lisätä pikakoodeja kenttään myöhemmin.

Me ” myös PHP CodeSniffer -ohjelmaa käytetään WordPress-koodausstandardien säännön kanssa. Aina kun käytämme echo do_shortcode, pakeneva varoitus on kadonnut. Onko siis turvallista käyttää vain do_shortcode vai onko meidän käytettävä esim. wp_kses_post lisäksi?

Onko sinulla parhaita käytäntöjä?

Kiitos neuvoista

Kommentit

  • do_shortcode ei ole tarkoitettu pakenemiseen.
  • Hm ok, mutta miksi koodinpuristaja ei sitten näytä mitään varoituksia?
  • Ehkä se ei näytä varoitus, koska lyhytkoodin renderointitoiminnon tulisi olla vastuussa sen tuotoksen puhdistamisesta. Mutta mikä tahansa merkkijono voidaan siirtää funktiolle, ja jos se ei sisällä rekisteröityjä pikakoodeja, niin olen ' m melko varma, että merkkijonoa ei muuteta ollenkaan. Se ei todellakaan ole yleinen sanitaatiomenetelmä. Koodinippuri voi tehdä vain niin paljon. Lue täältä, miten tiedot puhdistetaan oikein. Toimintoja on monia, joita käytän paljon ovat esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

vastaus

WordPress-koodausstandardit haistavat do_shortcode(): tä ”automaattisesti paketoituna funktiona”. Näyttää siltä, että siitä on keskusteltu vuonna 2015 näissä GitHub-aiheissa:

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

Selitys, jota lisättiin luetteloon, oli seuraava:

Keskustelin tästä VIP-tuella (# 44195). Keskustellessaan toisen tiimin jäsenen kanssa David sanoi, että se ei ole tarpeetonta, koska teemme pakenemisen sinne, missä HTML-koodi lähetetään (lyhytkoodin koodissa).

Mutta en ole varma, että olen samaa mieltä perusteluista. Jos käytit sitä näin:

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

Jos lyhytkoodi on kovakoodattu, se on järkevää, koska ainoa paeta on lyhytkoodin lähtö, josta lyhytkoodin takaisinsoiton tulisi välttyä.

Kuitenkin sinun tilanteessasi käytät do_shortcode() sallia pikakoodien suorittaminen käyttäjän toimittamassa tekstissä mukautetusta kentästä. Tämä teksti ei tarvitse välttyä, mutta do_shortcode() ei tee mitään todellista pakenemista.

Joten turvallinen tapa käsitellä tällaisia kenttiä on laittaa teksti wp_kses() tai wp_kses_post() poistaaksesi kielletyt tunnisteet ja sitten laita se läpi do_shortcode(), jotta pikakoodit voivat olla ex ecuted ilman, että pakenee uudestaan.

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

Sillä ei ole merkitystä siinä, mitä koodinpelaaja tekee / ei ilmoita, mutta ainakin käyttäjän toimittama teksti on puhdistettu.

Yksi rajoitus on, että se ei toimi, jos käytät esc_html(), koska se häiritsee lyhytkoodimääritteitä. Tämä puhdistus ei myöskään estä käyttäjiä syöttämästä epätasapainoisia tunnisteita, jotka voivat vaikuttaa asetteluun, mikä on yksi asia, josta pääseminen yleensä auttaa. Voit korjata ongelman lisäämällä force_balance_tags():

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *