Tengo un cuadro de texto de publicación personalizado que quiero usar wp_kses
antes de actualizar mi meta de publicación.
Estaba buscando ejemplos de $allowed
configuraciones comunes , pero solo he visto este ejemplo:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
¿Qué es un wp_kses
$allowed
entorno típico ? ¿Puede alguien dar un ejemplo de lo que normalmente filtran?
Respuestas:
No estaría de acuerdo con la solución publicada por @JaredCobb,
wp_kses()
es mucho más flexible que el método que presentó. Puede eliminar los atributos no deseados de las etiquetas sin destruir las etiquetas mismas. Por ejemplo, si el usuario ingresa<strong class='foo'>
,wp_kses()
regresaría<strong>
si no permitiera la clase, mientrasstrip_tags()
que la eliminaría por<strong>
completo.@redconservatory: los atributos que querrás usar son los siguientes:
Esto permitirá negrita y cursiva sin atributos, así como etiquetas de anclaje con
href
atributos ... y nada más. Utiliza el principio de la lista blanca, que @jaredcobb señaló correctamente es la mejor manera de ir aquí.fuente
wp_kses
permite más control que las opciones nativas de PHP. Creo que dije eso. También usé la palabra "atributos". Estaba diciendo que depende de su caso de uso. Alguien que intente proteger sus datos de todas las etiquetas estaría mejor usando strip_tags en mi humilde opinión, pero es más de mi preferencia que cualquier otra cosa. Salud.Comenzaría con la misma
$allowedtags
matriz que WordPress usa para sus comentarios. Puede encontrar su matriz en el[wordpress directory]/wp-includes/kses.php
archivo. Estos me parecen valores predeterminados razonables y un buen punto de partida. Aquí está su matriz ...Yo NO utilizar PHP
strip_tags
como un reemplazo parawp_kses
.¡Nunca debe usar strip_tags para filtrar el contenido de un usuario desconocido!
He creado un video rápido que explica por qué WordPress 'wp_kses () es mejor que PHP's strip_tags () por seguridad .
fuente
Solo lo he usado
wp_kses
cuando específicamente he necesitado permitir / filtrar atributos de etiquetas HTML (por ejemplo, quiero que se les permita tener una<image>
etiqueta, con unsrc=""
atributo pero no quiero que puedan perohref=""
ostyle=""
o cualquier otra cosa en la etiqueta de la imagen. En ese caso,wp_kses
es útil porque (como puede ver en el ejemplo que creó) puede filtrar muy específicamente. Raramente lo he usadowp_kses
porque solo encuentro un par de PHP nativos Las funciones (a continuación) hacen el truco y son más fáciles de entender cuando miro el código varios meses después.Si desea eliminar completamente las etiquetas HTML (excepto quizás permitir algunas), entonces siempre las uso
strip_tags
. Puede pasar una cadena de etiquetas permitidas (como<p> <br> <strong>
) o cualquier otra etiqueta inofensiva que desee. Esto permite al usuario tener cierto control sobre el formateo, si eso es aplicable para su caso de uso. Me gustastrip_tags
porque se necesita un enfoque de lista blanca para desinfectar sus datos. (Lo que significa que todo se elimina, excepto lo que explícitamente incluye en la lista blanca).Si su objetivo es permitirles poner cualquier HTML en el contenido, pero solo desea mostrar su texto tal como lo ingresaron (como ejemplos de código), use
htmlspecialchars
. Esto convertirá los caracteres HTML en sus equivalentes codificados para que pueda enviarlos a la página de forma segura.Es posible que encuentre un código
str_replace
que "busca" etiquetas malas como o lo que sea. Realmente no recomiendo ese enfoque porque toma un enfoque de lista negra para desinfectar los datos y debe asegurarse constantemente de que su lista negra esté actualizada.Para resumir, depende de para qué se usen tus metaboxes. Si está protegiendo contra la entrada de usuarios (que podrían ser maliciosos), recomendaría
strip_tags
y permitiría algunas de las etiquetas inofensivas. Si usted tiene un caso muy buen negocio para microgestión las etiquetas y los atributos específicos de contenido del usuario,use wp_kses
.fuente
wp_kses()
hace todo lo questrip_tags()
hace y más? Estoy a favor de mantener las cosas simples, pero también creo que hay un argumento para no "sorprender" a nadie.wp_kses()
es "la forma de Wordpress", y dado que estamos escribiendo código de Wordpress, existe el argumento de que probablemente sea la mejor opción. Además, si en algún momento en el futuro, queremos incluir en la lista blanca ciertas combinaciones de etiquetas / atributos, el usowp_kses()
desde el principio no requiere un refactorizador.Ahí tienes. Esto funciona tanto en WordPress como fuera de WordPress.
fuente
También puede usar la función wp_kses_post que se usa en el contenido de la publicación y requiere solo datos como parámetro.
Más información aquí: http://codex.wordpress.org/Function_Reference/wp_kses_post
fuente
@Svetoslav Marinov
He agregado este código justo después de $ buffer = trim ($ buffer);
para tratar de limpiar html y evitar que los caracteres ocultos pegados rompan el código, pero no funciona, limpia el html, pero los caracteres ocultos aún permanecen.
fuente