Pregunta:
¿Es check_plain () suficiente para volver a mostrar el texto ingresado por los usuarios en el navegador, o aún debería filtrar con filter_xss () ?
Respuesta:
Me imagino que la pregunta es sobre el uso de 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 secuencias de comandos entre sitios (XSS). En particular, su finalidad es:- Eliminando 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 usa check_plain()
, se supone que la cadena pasada a la función debe usarse como texto sin formato; en tal caso, filter_xss()
no es necesario. Si usa filter_xss()
, entonces se supone que la cadena pasada a la función es HTML, y check_plain()
no es necesario.
Si la pregunta es sobre el uso de 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.