2011-10-10 24 views
5

¿Es 100% seguro de hacer lo siguiente ?:¿Es 100% seguro hacer lo siguiente?

var untrusted_input_from_3rd_party = '<script>alert("xss")<\/script>'; 
document.getElementsByTagName('body')[0].appendChild(document.createTextNode(untrusted_input_from_3rd_party)); 

Teniendo en cuenta que el tercero se ingresa nada (HTML, CSS, etc.), puedo estar seguro de que no va a hacer ningún daño si pásalo por createTextNode y luego agrégalo al dom?

+1

es * cualquier cosa * alguna vez "100% seguro"? – Spudley

+0

¿Quizás 99.9% entonces? :) – Polar

+0

Posible engaño: http://stackoverflow.com/questions/476821/is-a-dom-text-node-guaranteed-to-not-be-interpreted-as-html –

Respuesta

5

Esta es una buena forma de evitar XSS. La manipulación DOM a través de createTextNode es ampliamente utilizada para incrustar de forma segura texto de terceros.

Dicho esto, hay problemas además de XSS. No hace nada para detener los intentos de ingeniería social si la entrada no es de confianza es algo así como:

ALERTA: Hemos detectado malware en el equipo. Copie y pegue http://evil.org/ en la barra de la URL de su navegador para solucionar el problema.

La mejor manera de evitar la ingeniería social (además de no incluir contenido de terceros) es dejar en claro que el contenido proviene de un tercero.

1

Lo probó ahora. Parece ser correcto Si algo sale mal, debería ser un error del navegador, no el tuyo.
Como es habitual, el servidor debe hacer una vista html correcta de todas las entradas del usuario y luego devolverla al usuario.

Pero para reducir la carga del servidor (y si es aceptable) puede usar esto con seguridad.

Cuestiones relacionadas