A veces, el lado del servidor generará cadenas para incrustar en el código JavaScript en línea. Por ejemplo, si ASP.NET debe generar "Nombre de usuario". Entonces parece.¿Es necesario "escapar" el carácter "<" and ">" para la cadena de javascript?
<script>
var username = "<%UserName%>";
</script>
esto no es seguro, ya que un usuario puede tener su/su nombre para ser
</script><script>alert('bug')</script></script>
Es vulnerabilidad XSS.
Así que, básicamente, el código debe ser:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
Lo que hace JavascriptEncode es añadir charater "\" antes de "/" y """ y """ Por lo tanto, la salida HTML. es como var nombre de usuario = "</script> alerta (\ 'bug \') </script> </script>";.
navegador no interpretar "</script> "como fin del bloque de scripts. Entonces, XSS en evitado.
Sin embargo, todavía hay "<" y ">" allí. Se sugiere escapar de estos dos personajes también. Antes que nada, no creo que sea una buena idea cambiar "<" a "& lt;" y ">" a "& gt;" aquí. Y no estoy seguro de cambiar "<" a "\ <" y ">" a "\>" es reconocible para todos los navegadores. Parece que no es necesario realizar más codificaciones para "<" y ">".
¿Hay alguna sugerencia al respecto?
Gracias.
Pero aún el '>' en ']]>' dentro del bloque CDATA debe ser repaldado por '>'. Entonces 'foo [bar [0]]> 1234' debe ser reemplazado por' foo [bar [0]] < 1234' o 'foo [bar [0]]> 1234'. De lo contrario, el bloque CDATA se cerraría prematuramente. – Gumbo
Dado que CDATA representa y los caracteres significan "&" y no "Comienzo de la entidad" - eso no funcionaría. Si necesita representar la cadena "]]>" dentro de CDATA, entonces estoy bastante seguro de que está chiflado y debería estar usando entidades para empezar (fuera de un bloque CDATA) – Quentin
O simplemente agregue un espacio: 'foo [bar [0 ]]> 1234' - o si es parte de una cadena: ''foo [bar [0]]' + '> 1234'' - o simplemente contiene todos tus scripts en archivos .js externos. – gnarf