¿Es strip_tags () horriblemente inseguro?

12

Siempre uso strip_tags para prevenir ataques XSS, pero hoy vi un mensaje que decía que es terriblemente inseguro. Como dice el manual, ¡no comprueba si el HTML está mal formado!

¿Es cierto?

¿Qué puedo hacer para prevenir XSS?

    
pregunta ALH 23.12.2011 - 16:03
fuente

2 respuestas

17

Para evitar XSS, debes:

  1. Validar todas las entradas de usuario que procesará (por ejemplo, si el parámetro id GET debería ser un número, asegúrese de que sea con la función is_number() de PHP o usando Filter extension). Esto no solo debe incluir parámetros GET / POST, sino también nombres de cookies, valores de cookies, encabezados HTTP, nombres de archivos cargados, etc. Los atacantes pueden manipular las solicitudes de muchas maneras. Si necesita aceptar & muestra el contenido HTML del usuario (por ejemplo, en la aplicación CMS) usa la biblioteca HTMLPurifier bien probada para filtrar Javascript & otros XSS cargan y dejan solo HTML limpio y desinfectado.

  2. Cuando se muestra el valor, utilice codificación de salida contextual (a veces llamado 'escape'). Existen diferentes reglas sobre cómo codificar el valor proporcionado por el usuario si ocurre en:

    • contexto HTML, por ejemplo %código%
    • contexto de atributo HTML, por ejemplo, %código%
    • contexto de Javascript, p. %código%
    • contexto CSS, por ejemplo %código%

Es mejor referirse a las reglas recomendadas que se describen en OWASP XSS Prevention Cheat Sheet . Léalo detenidamente y respételo. XSS es # 2 risk para las aplicaciones web de hoy en día, por lo que realmente necesita proteger de ella Vea también video tutorial de OWASP en XSS .

    
respondido por el Krzysztof Kotowicz 23.12.2011 - 17:22
fuente
4

Deberías usar codificación contextual. Consulte la hoja de trucos de prevención owasp xss . Tienes que codificar de manera diferente dependiendo de dónde esté la salida. Como ejemplo, la siguiente entrada se perderá con strip_tags, pero causa xss si la salida está en el atributo de valor de una entrada de texto html:  "autofocus onfocus=" alert (1)     

respondido por el Erlend 23.12.2011 - 17:06
fuente

Lea otras preguntas en las etiquetas