htmlspecialchars_decode htmlentities ejemplo php xss

ejemplo - php htmlentities



htmlspecialchars vs htmlentities cuando se trata de XSS (3)

No estoy seguro de haber encontrado la respuesta que buscaba, pero también estoy buscando un limpiador de HTML. Tengo una aplicación que estoy creando y quiero poder tomar código HTML, posiblemente incluso Javascript, u ​​otros idiomas y colocarlos en una base de datos MySQL sin causar problemas ni permitir problemas de XSS. He encontrado HTML Purifier y parece ser la herramienta más desarrollada y mantenida para limpiar la información enviada por el usuario en un sistema PHP. La página enlazada es su página de comparación, que puede generar un razonamiento de por qué su herramienta u otra herramienta podría ser útil. ¡Espero que esto ayude!

He visto muchas respuestas conflictivas sobre esto. A muchas personas les encanta citar que las funciones de PHP por sí solas no lo protegerán de xss.

¿Qué puede hacer exactamente XSS a través de htmlspecialchars y qué puede hacerlo a través de htmlentities?

Entiendo la diferencia entre las funciones, pero no los diferentes niveles de protección xss que le quedan. ¿Alguien podría explicar?


Si el comando de header de PHP se usa para establecer el conjunto de caracteres

header(''Content-Type: text/html; charset=utf-8'');

entonces htmlspecialchars y htmlentities deberían ser seguros para la salida de HTML porque XSS no puede lograrse mediante el uso de codificaciones UTF-7.

Tenga en cuenta que estas funciones no deben utilizarse para la salida de valores en JavaScript o CSS, ya que sería posible ingresar caracteres que permitan el escape de JavaScript o CSS y pongan en riesgo su sitio. Consulte la hoja de trucos de prevención de XSS para saber cómo manejar estas situaciones de manera adecuada.


htmlspecialchars () NO lo protegerá contra las vulnerabilidades de UTF-7 XSS, que aún afectan a Internet Explorer, incluso en IE 9: http://securethoughts.com/2009/05/exploiting-ie8-utf-7-xss-vulnerability-using-local-redirection/

Por ejemplo:

<?php $_GET[''password''] = ''asdf&ddddd"fancy˝quotes˝''; echo htmlspecialchars($_GET[''password''], ENT_COMPAT | ENT_HTML401, ''UTF-8'') . "/n"; // Output: asdf&amp;ddddd&quot;fancyË echo htmlentities($_GET[''password''], ENT_COMPAT | ENT_HTML401, ''UTF-8'') . "/n"; // Output: asdf&amp;ddddd&quot;fancy&Euml;quotes

Siempre debe usar htmlentities y, muy rara vez, utilizar htmlspecialchars al sanear la entrada del usuario. También, siempre debes quitar las etiquetas antes. Y para los sitios realmente importantes y seguros, NUNCA debe confiar en strip_tags (). Utilice HTMLPurifier para PHP .