¿Cómo puedo evitar las comillas dobles en un ataque xss basado en atributos?

3

El código que tengo es:

<input type="text" name="some_name" value="<?php echo CHtml::encode($str); ?>" />

$ str son los datos de entrada. 'CHtml :: encode ()' es la forma de Yii de codificar caracteres especiales en entidades HTML. ¿Se puede pasar por alto?

Sé que se puede romper si no pongo esas comillas dobles alrededor de la entrada. Pero no creo que solo poner comillas dobles alrededor lo haga irrompible.

    
pregunta kumar 16.08.2014 - 06:27
fuente

3 respuestas

4

El método encode() codifica los caracteres, que es el correcto Entonces, si se inserta un carácter " dentro de $str para intentar romper el contexto del atributo HTML, esto se convertiría a &quot; o &#34; , que es la representación HTML.

Por lo tanto, no es posible inyectar secuencias de comandos aquí, suponiendo que encode no tenga fallas que permitan que esto suceda.

    
respondido por el SilverlightFox 17.08.2014 - 21:35
fuente
3

Dentro del valor del atributo (doble comilla ) estado solo la comilla doble literal " carácter (U + 0022) permite una salida adecuada de ese estado. Esto también está respaldado por los resultados de fuzzing de los caracteres sintácticamente equivalen a comillas dobles en los atributos HTML .

Entonces, si tu técnica de mitigación elimina cualquiera de esos caracteres literales, estás a salvo de cualquier XSS que intente escapar del valor del atributo citado.

Sin embargo, tenga en cuenta que algunos valores de atributo se interpretan de una manera especial, como los atributos de evento on… , los atributos de estilo o los atributos URI que comienzan con javascript: . Por lo tanto, prevenir XSS no es solo una cuestión de sintaxis sino también de semántica.

    
respondido por el Gumbo 17.10.2014 - 13:36
fuente
-1

Si el sitio web no realiza escapes, validación ni sustituciones de caracteres, el ataque trivial de XSS es simplemente:

"/ > < script > alert ('pawned') < / script >

Es por eso que cada sitio web debe estar escapando, validando y sustituyendo o eliminando caracteres peligrosos.

    
respondido por el Jeff-Inventor ChromeOS 16.08.2014 - 07:16
fuente

Lea otras preguntas en las etiquetas