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 ) ) ); 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük