javascript obtener ¿Se garantiza que un nodo de texto DOM no se interpretará como HTML?




obtener contenido de un div javascript (2)

Sí, esto está confirmado, en la medida en que para el navegador que no fue, ese navegador tendría un defecto grave . Un nodo de texto que representa cualquier cosa menos texto sería una contradicción. Mediante el uso de document.createTextNode ("some string"); y al agregar ese nodo, se garantiza que la cadena se representará como texto.

¿Alguien sabe si un Node DOM de tipo Text está garantizado no debe ser interpretado como HTML por el navegador?

Más detalles a continuación.

Fondo

Estoy construyendo un sistema simple de comentarios web para un amigo, y he estado pensando en los ataques XSS. No creo que filtrar o escapar de las etiquetas HTML sea una solución muy elegante; es muy fácil crear una convolución que se salga del filtro. La cuestión fundamental es que quiero garantizar que, para ciertos fragmentos de contenido (es decir, el contenido que los usuarios web no autenticados POST), el navegador nunca intente interpretar o ejecutar el contenido.

Un comienzo simple (de texto)

El primer pensamiento que me vino a la mente es usar Content-Type: text/plain , pero esto tiene que aplicarse a toda una página. Puedes poner un texto plano IFRAME en el medio de una página, pero es feo y crea problemas de foco si el usuario hace clic en el marco.

innerText / textContent / JQuery

Resulta que hay algunos innerText específicos del navegador ( innerText en IE, textContent en FF, Safari, etc.) que, cuando se configuran, son necesarios para crear un solo nodo de Text .

JQuery intenta evitar la diferencia en los atributos específicos del navegador, implementando un text(val) función único text(val) que omite los atributos específicos del navegador y va directamente a document.createTextNode(text) , que, como puede adivinar, crea un nodo Text .

Node Text DOM W3 m

Así que creo que esto está cerca de lo que quiero, se ve bien: los nodos de Text no pueden tener hijos, y parece que no se pueden interpretar como HTML. Pero no estoy 100% seguro de los documentos oficiales.

La parte de textContent es particularmente alentadora, porque dice "en la configuración, no se realiza ningún análisis sintáctico, la cadena de entrada se toma como contenido de texto puro". Pero, ¿esto es fundamental para todos los nodos de Text o solo para los nodos en los que configuras textContent ? Esto probablemente parezca una objeción tonta, pero podría ser importante porque IE no es compatible con textContent (ver arriba).

De vuelta a la pregunta inicial

¿Alguien puede confirmar / rechazar que esto funcionará? Es decir, que un navegador compatible con w3 DOM nunca interpretará un nodo de Text como HTML, sin importar el contenido. Estaría muy agradecido de tener esta atormentada y pequeña incertidumbre resuelta.

¡Gracias por tu tiempo!


No creo que filtrar o escapar de las etiquetas HTML sea una solución muy elegante; es muy fácil crear una convolución que se deslice más allá del filtro

Eso es absolutamente falso, filtrando> a & gt; y <a & lt; detendrá por completo cualquier inyección HTML.





xss