¿Es suficiente check_plain ()?

Respuestas:

26

Me imagino que la pregunta es sobre el uso check_plain(filter_xss($string)), o filter_xss(check_plain($string)).

check_plain()y filter_xss()tienen dos propósitos diferentes, y en contraste:

  • check_plain() codifica caracteres especiales en una cadena de texto sin formato que luego se muestra como HTML.
  • filter_xss()filtra una cadena HTML para evitar vulnerabilidades de cross-site-scripting (XSS). En particular su propósito es:

    • 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 :)

Si lo usa check_plain(), se supone que la cadena pasada a la función se usará como texto sin formato; en tal caso, filter_xss()no es necesario. Si usa filter_xss(), entonces la cadena pasada a la función se supone que es HTML, y check_plain()no es necesaria.

Si la pregunta es sobre el uso check_plain()y filter_xss()en diferentes partes de la misma cadena, entonces, como señaló greggles en su comentario, puede usar (por ejemplo) check_plain()en el contenido de los atributos de la etiqueta y filter_xss()en toda la etiqueta HTML.

kiamlaluno
fuente
55
filter_xss está destinado a usarse en piezas completas de html. Si usa filter_xss en un atributo html, no lo filtrará correctamente. check_plain se puede usar para filtrar con seguridad los atributos html. Consulte también drupalscout.com/knowledge-base/… y drupalscout.com/knowledge-base/… para obtener más información sobre el uso de estas funciones.
greggles