socket online nodejs example ejemplo javascript json parsing websocket xss

javascript - online - websocket nodejs



JSON.parse escapando para anti-XSS y cualquier inserciĆ³n de caracteres en html, atributos y valores de WebSockets (1)

He leído la página de trucos , pero todavía no estoy seguro de cómo se deben escapar mis datos para proteger contra XSS y permitir que cualquier carácter válido se inserte en HTML, atributos y valores variables. Los valores de las variables potenciales son regexados antes de ser puestos en cualquier función como parseInt . Los datos solo se reciben a través de una conexión WebSocket.

¿JSON.parse es seguro para llamar a cualquier cadena? De lo contrario, ¿cómo deben protegerse los datos mediante javascript o, al menos, probarse para ver si no son conformes?

¿Cuándo debería hacerse el HTML y el atributo de escape en relación con JSON.parse?


Necesita alimentar los datos de vald json en las funciones de análisis JSON. Normalmente, lo que crea la cadena json necesita crear un json válido y, por lo tanto, eso es lo que necesita para escapar de los caracteres html (y otros).

Y si buscas en Google, "cómo escapar de json", obtendrás muchos sitios que muestran cómo hacerlo a mitad de camino.

La mayoría señalará un pequeño grupo de caracteres y dirá:

/b Backspace (ascii code 08) /f Form feed (ascii code 0C) /n New line /r Carriage return /t Tab /v Vertical tab /' Apostrophe or single quote /" Double quote // Backslash caracter

Esto es parcialmente correcto. Necesitas escapar:

Estos caracteres se escapan usando / u + hexadecimal, es decir. "/ u002F"

Aquí está la especificación: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

Personalmente, solo uso la notación / u-hex para todas las secuencias de escape y nunca me preocupo si el json se puede usar dentro del contexto de JavaScript.

Json y Javascript son geniales porque puedes escaparte de cada char como / u + hex si quieres, lo que hace que XXS sea casi imposible (especialmente cuando estás dentro de comillas dobles).

Actualizar:

Tenga en cuenta que escapar de json es solo 1 parte de un sitio seguro completo de XSS. Todavía debe preocuparse por cómo se podría usar la cadena json, ya que podría pasarse a una función como argumento o puede crear una matriz con los datos o puede colocar la cadena dentro de un document.getElementById(''xyz'').innerHTML(json.data)

Entonces, si los datos de json permanecen en el contexto de javascript, puede usar el escape / u + hex.

Cuando la cadena se mueve al contexto html, debe tratarlo como html:

document.getElementById(''xyz'').innerHTML(json.data) //oh-no: now it will in html context

Entonces necesita convertir los datos JSON con una función como esta:

var __entityMap = { "&": "&amp;", "<": "&lt;", ">": "&gt;", ''"'': ''&quot;'', "''": ''&#39;'', "/": ''&#x2F;'' }; String.prototype.toHtml = function() { return String(this).replace(/[&<>"''//]/g, function (s) { return __entityMap[s]; }); }

Entonces ahora puedes hacer esto:

document.getElementById(''xyz'').innerHTML(json.data.toHtml() ) //ok -- now safe for html