tutorial test site sheet reflected prevent online cross cheat ataque javascript text xss

test - xss javascript tutorial



¿Cómo acceder al contenido de texto sin formato recuperado a través de<script type=“text/plain” src=…> en JavaScript? (4)

Cuando se utiliza <script type="text/plain" src="http://..."></script> , donde la URL se refiere a un archivo de texto sin formato, ¿hay alguna manera de acceder al contenido del archivo en JavaScript? El archivo se transfiere al navegador, pero el valor de la propiedad innerHTML del elemento de script no se modifica (permanece en la cadena vacía). La inspección del nodo del elemento en el DOM no parece revelar ninguna propiedad a través de la cual se pueda encontrar el contenido recibido.

Sé que se puede usar XMLHTTPRequest en su lugar, pero estoy interesado en el problema por el cual los navegadores obtienen los datos de la manera que describí, pero parece que no ofrecen ningún acceso a ellos.


Después de varios días de investigar la misma pregunta, encontré varias referencias al siguiente código:

<html> <head> <script type="text/javascript"> function init() { var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data; extText = extText.replace(/[/r/n]/g, " "); document.forms[0].nMessage.value = extText; } window.onload = init; </script> </head> <body> <iframe name="messageTxt" src="txtData.txt" style="display:none"></iframe> <form> <textarea name="nMessage"></textarea> <input type="button" value="click" onClick="init()"> </form> </body> </html>

El código anterior realmente accede al archivo txtData.txt (siempre que exista) y lo descarga en un <textarea> como texto predeterminado. Por alguna razón, ninguna de las respuestas anteriores menciona que esto funciona, asumo porque la pregunta parece implicar específicamente la etiqueta <src> (para una técnica similar puede no estar disponible; no la he comprobado); sin embargo, sigo pensando que vale la pena mencionar que su consulta se refiere a la cuestión más general de obtener un archivo .txt externo (o si alguien más que se encuentre en esta página está buscando la respuesta de dicha pregunta), principalmente porque me llevó horas investigarlo. , así que creo que es plausible que la respuesta fuera simplemente difícil de producir.


En primer lugar, el atributo de text de HTMLScriptElement es el método preferido para acceder al texto de un elemento <script> línea. DOM-Level-2 y HTML5: 4.11.1 indican que un script debe tener un text atributo que contenga el texto interior de los scripts:

El text atributo IDL debe devolver una concatenación del contenido de todos los nodos de texto que son hijos del elemento de script (ignorando cualquier otro nodo, como comentarios o elementos), en orden de árbol. En la configuración, debe actuar de la misma manera que el textContent IDL textContent .

Como el elemento <script> está vacío (especificaste una fuente externa), text , textContent y innerHTML están vacíos. Esto se debe a que el atributo de text solo se establece en los scripts en línea:

Si el script está en línea y el tipo de bloque de script es un lenguaje basado en texto:

El valor del atributo IDL de text en el momento en que se estableció por última vez la marca "ya iniciada" del elemento es la fuente del script.

Por lo tanto, no es posible incluir un text/plain externo usando este método.

Ver también:

  • W3C: HTML5: 4.11.1 El elemento script: atributo de texto y el ejemplo para el mapa del juego:

    <script src="game-engine.js"></script> <!-- game engine isn''t inline --> <script type="text/x-game-map"> <!-- but data needs to be inline --> ........U.........e o............A....e .....A.....AAA....e .A..AAA...AAAAA...e </script>


Sí, no, no creo que puedas obtener el contenido del texto de esa manera. Esto se debe principalmente a que va a utilizar elementos de acceso a dom para obtener un texto que nunca se inyectó realmente en el dom mismo.

Probé algunas opciones y no funcionaron. No tengo una razón sólida por la que no pueda encontrarla, pero la razón por la que me rindo / pienso así es porque incluso el inspector de WebKit que estoy usando no tiene una descripción triangular junto a una etiqueta script-src. Lo que hace es que convierte el src en un enlace en el que puede hacer clic y luego utiliza Ajax o lo que sea para leer ese texto del servidor.


Tenga en cuenta que si esto fuera compatible, proporcionaría un enorme agujero de seguridad y un medio para sortear las protecciones de scripts entre sitios que protegen a json y otros datos. Esencialmente, mi desagradable página web (nasty.com, por ejemplo) podría acceder a su información privada que está protegida por cookies al cargarla con una etiqueta de script. p.ej

<script type="text/plain" src="https://supersecure.com/youraccount/privatedocs/list"/>

Dado que las cookies para supersecure.com se enviarán automáticamente con la solicitud (como es el caso cuando se solicita cualquier recurso), el sitio seguro simplemente devuelve los datos (por ejemplo, la lista de documentos privados) ya que no podría diferenciar fácilmente la solicitud. de una de una solicitud de ajax desde su página web legítima. Este agujero no existe con ajax, ya que el navegador simplemente evitará que una página de nasty.com realice una solicitud de ajax a supersecure.com, gracias a la misma política de origen.

Obviamente, no hay ningún problema de seguridad con los datos en línea.