¿Se considera peligroso el código HTML de JavaScript en la salida?

0

He leído hace un tiempo que htmlEncoding en javascript es un no-go. Pero ese es el caso cuando primero codifica los datos y luego los guarda en db (por ejemplo). En este caso, solo confía en javascript para hacer la codificación y veo por qué esto es peligroso.

Pero al guardar las entradas del usuario en la base de datos tal como está y hacer htmlEncode en la salida, ¿tiene sentido que solo htmlEncode esté en el servidor y considere javascript htmlEncoding?

    
pregunta Ciocoiu Alin 03.06.2017 - 21:29
fuente

2 respuestas

2

A veces tiene sentido codificar HTML en Javascript, y no es necesariamente peligroso.

Por ejemplo, si tiene una API que devuelve JSON, está bien si la API devuelve cadenas en bruto. Solo cuando coloca estas cadenas en la página con Javascript, debe codificarlas en HTML.

Dado que este es un comportamiento del lado del cliente, un atacante puede omitir esto y eliminar la codificación. Sin embargo, esto solo le permite atacar a su propio navegador. XSS suele ser peligroso si un script se puede ejecutar en el navegador de otra persona .

    
respondido por el Sjoerd 04.06.2017 - 15:40
fuente
0

Es una práctica bien establecida para:

  1. Filtre las entradas antes de usar / almacenar, no "guardar las entradas del usuario tal como están".
  2. Codifique la salida antes de mostrarla, ya sea que la tome de su propia base de datos o de la entrada del usuario.

La codificación que elija dependerá del contexto en el que coloque la salida. Para un contexto HTML simple, htmlEncode es correcto.

A veces te encuentras con un caso de uso en el que también codificas la entrada antes de guardarla (editores de comentarios como el que estoy usando aquí ahora). Si está haciendo la codificación correctamente, no debería importar qué idioma use (JS o de otra manera).

Por supuesto, JavaScript se usa tanto en el lado del servidor como en el lado del servidor. Si confía en solo en el lado del cliente para realizar su trabajo relacionado con #appsec (codificación en este caso), eso podría ser riesgoso, no porque sea JS, sino porque es del lado del cliente.

    
respondido por el Sas3 04.06.2017 - 05:36
fuente

Lea otras preguntas en las etiquetas