¿Cómo y cuándo usar filter_xss () y check_plain ()?

11

Hay muchos archivos de plantilla como este views-view-fields--magazine--magazine.tpl.phpen mi sitio web. ¿Cómo y cuándo debo usar filter_xss () y check_plain () para mejorar la seguridad? por ejemplo este es el código:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

¿Cómo puedo aplicar esas funciones en él?

M ama D
fuente
Úselo filter_xss()cuando desee filtrar XSS de contenido potencialmente peligroso (es decir, contenido de un usuario no confiable), y check_plain()cuando desee escapar de caracteres especiales HTML de una cadena
Clive

Respuestas:

13

Primero, lea sobre esto en la API de Drupal:

Por lo tanto, check_plain()codifica caracteres especiales que tienen un significado especial en HTML (como <y &) en entidades de texto sin formato (es decir, &lt;y &amp;respectivamente) que harán que estos se representen literalmente (no interpretados como HTML) cuando esa cadena se muestre como parte de una página con Marcado HTML. La función filter_xss()filtra una cadena HTML para evitar vulnerabilidades de cross-site-scripting (XSS). Hace cuatro cosas:

  • Eliminar personajes y construcciones que pueden engañar a los navegadores
  • Asegurarse de que todas las entidades HTML estén bien formadas
  • Asegurarse de que todas las etiquetas y atributos HTML estén bien formados
  • Asegurarse de que ninguna etiqueta HTML contenga URL con un protocolo no permitido (por ejemplo, javascript :)

Ambas funciones se utilizan para desinfectar los datos de los usuarios para asegurarse de que cualquier inyección del usuario se neutralice antes de que los datos se muestren en su sitio.

Nunca pasas la misma secuencia a través de ambos .

Si lo usa check_plain(), se supone que la cadena pasada a la función se usará como texto sin formato (no HTML). Entonces filter_xss()no es necesario, ya check_plain()que siempre hará que la cadena sea texto plano.

Si lo usa filter_xss(), se supone que la cadena que se pasa a la función es HTML y la check_plain()estropeará.

Cuando miro la plantilla que usa como ejemplo, me parece que los tres campos pasados print()provienen de contenido que ya está desinfectado y no necesita más saneamiento.

Sin embargo, si crea su propio módulo que recopila la entrada del usuario sin pasarlo por un filtro de texto "seguro" como "HTML filtrado" o "Normal", debe utilizar estas funciones para fines de saneamiento.

Radicales libres
fuente
¿Dónde puedo verificar si las entradas provienen de los usuarios? por ejemplo, hay un tipo de contenido y los usuarios anónimos pueden crear ese tipo de nodos.
M ama D
@Drupalist, nunca debe permitir que el usuario anónimo use un formato de texto "inseguro". Vaya a Administración »Configuración» Autoría de contenido »Formatos de texto . Los formatos de texto "seguros" que vienen con Drupal son "HTML filtrado" y "Texto sin formato". Si estos son los únicos formatos permitidos para el usuario anónimo, Drupal realiza las comprobaciones requeridas por usted para cualquier tipo de nodo incorporado y cualquier tipo de nodo que cree con la función de campos principales. Si su caso de uso es diferente de esto, haga una nueva pregunta que explique el caso de uso.
Radical libre
Solo se permite el uso de usuarios anónimosplain text
M ama D
@Drupalist, está bien. No es necesario usar estas funciones para desinfectar texto sin formato.
Radical libre
3
@ARUN, no. La práctica estándar de Drupal es guardar siempre exactamente lo que el usuario escribe en la base de datos y desinfectar el texto antes de renderizar.
Radical libre