如何在JavaScript中访问通过<script type ="text/plain"src = ...>检索的纯文本内容?

Juk*_*ela 18 javascript xss text

使用时<script type="text/plain" src="http://..."></script>,URL指的是纯文本文件,有没有办法在JavaScript中访问文件的内容?该文件将传输到浏览器,但元素的innerHTML属性值script不会更改(它仍为空字符串).检查DOM中的元素节点似乎没有显示可以通过其找到所接收内容的任何属性.

我知道可以使用XMLHTTPRequest,但我对浏览器以我描述的方式获取数据但似乎没有提供任何访问权限的问题感兴趣.

Zet*_*eta 10

首先,the的text属性HTMLScriptElement是访问内联<script>元素文本的首选方法.DOM-Level-2HTML5:4.11.1都表明脚本应该具有text包含脚本内部文本的属性:

IDL属性text必须script以树的顺序返回作为元素子元素的所有Text节点(忽略任何其他节点,如注释或元素)的内容的串联.在设置时,它必须以与textContentIDL属性相同的方式运行.

由于<script>元素为空(您指定了外部源)text,textContent因此innerHTML为空.这是因为该text属性仅在内联脚本中设置:

如果脚本是内联的,并且脚本块的类型是基于文本的语言:

text上次设置元素"已启动"标志时的IDL属性值是脚本源.

因此,text/plain使用此方法不可能包含外部.

也可以看看:


Tom*_*omW 6

请注意,如果支持它,它将提供一个巨大的安全漏洞和一种绕过保护json和其他数据的跨站点脚本保护的方法.从本质上讲,我讨厌的网页(比如nasty.com)可以通过使用脚本标记加载来访问受cookie保护的私人数据.例如

<script type="text/plain" 
       src="https://supersecure.com/youraccount/privatedocs/list"/>
Run Code Online (Sandbox Code Playgroud)

由于supersecure.com的cookie将自动与请求一起发送(如同请求任何资源时一样),安全站点只返回数据(例如私人文档列表),因为它无法轻易地将请求分开来自其合法网页的ajax请求中的一个.这个漏洞与ajax不存在,因为浏览器只会阻止nasty.com的页面向supersecure.com发出ajax请求,这要归功于相同的原始策略.

显然,内联数据没有安全问题.