Vállalatunkban Speciális egyéni mezőket használunk, és néha rövid kódot kell használnunk az egyéni mezőkben. A php kódban ezután a do_shortcode
függvények ezekhez a mezőkhöz. Nincs ok arra, hogy ne használjuk a legtöbb mezőnél, mivel lehet, hogy később rövidítéseket szeretnénk hozzáadni egy mezőhöz.
Mi ” újra használjuk a PHP CodeSniffer programot a WordPress Coding Standards szabályával. Amikor echo do_shortcode
-t használunk, a menekülési figyelmeztetés eltűnik. Tehát biztonságos-e a do_shortcode
használata, vagy pl. wp_kses_post
emellett?
Van erre legjobb gyakorlat?
Köszönöm a tanácsokat
Hozzászólások
- a do_shortcode nem a menekülésre szolgál.
- Hm rendben van, de miért nem mutat akkor semmilyen figyelmeztetést a kódrabló?
- Talán nem mutasson egy figyelmeztetést, mert a rövid kód-megjelenítési funkciónak felelősnek kell lennie a kimenetének megtisztításáért. De bármilyen karakterlánc átadható a függvénynek, és ha nem tartalmaz regisztrált rövid kódokat, akkor i ' m egészen biztos vagyok benne, hogy a karakterláncot egyáltalán nem módosítják. Ez határozottan nem általános higiénés módszer. A kódszippantó csak annyit képes megtenni. Itt olvashatja el az adatok megfelelő fertőtlenítését. Sok funkció van, az általam sokat használt esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…
Válasz
A WordPress kódolási szabványok szippantásai do_shortcode()
-et “automatikusan elkerülő funkcióként” kezelik. Úgy tűnik, hogy ezt 2015-ben a következő GitHub-kérdések tárgyalták:
https://github.com/WordPress/WordPress-Coding-Standards/issues/167 https://github.com/WordPress/WordPress-Coding-Standards/issues/428
A listához adva a következő magyarázat volt:
Ezt megbeszéltem VIP támogatással (# 44195). David, miután megbeszélést folytatott egy másik csapattaggal, azt mondta, hogy ez felesleges, mivel mi a menekülést végezzük ott, ahol a HTML kiadódik (a rövid kód kódjában).
De nem biztos, hogy egyetértek az érveléssel. Ha így használta:
<?php echo do_shortcode( "[liveperson]" ); ?>
Ahol a rövid kód kemény kódolású, van értelme, mert csak a rövid kód kimenetéről szabad elmenni, amelyet meg kell kerülni a rövid kód visszahívásával.
Azonban az Ön helyzetében a do_shortcode()
lehetővé teszi a rövidített kódok végrehajtását a felhasználó által megadott szövegben, egy egyéni mezőből. Ezt a szöveget nem el kell hagyni, de do_shortcode()
nem végez tényleges menekülést.
Tehát az ilyen mezők kezelésének biztonságos módja az lenne, ha a szöveget wp_kses()
vagy wp_kses_post()
, a tiltott címkék eltávolításához, majd majd tegye át do_shortcode()
, hogy a rövid kódok ex anélkül, hogy újból megúszta volna.
$text = get_field( "field_name" ); echo do_shortcode( wp_kses_post( $text ) );
Nem fog különbséget tenni abban, hogy a kódszippantó mit jelent / nem jelent, de legalább a felhasználó megadta a szöveget fertőtlenített.
Az egyik korlátozás az, hogy nem fog működni, ha a esc_html()
-t használja, mert ez megzavarja a rövid kód attribútumokat. Ez a fertőtlenítés azt sem fogja megakadályozni, hogy a felhasználók olyan kiegyensúlyozatlan címkéket írjanak be, amelyek befolyásolhatják az elrendezést, ami egy dolog, amiből a normál módon elkerülhető. A probléma megoldásához hozzáadhat force_balance_tags()
:
$text = get_field( "field_name" ); echo do_shortcode( force_balance_tags( wp_kses_post( $text ) ) );