为什么浏览器使用内容执行<script>

一段while(1);以来,一些Web服务器预先安装了JSON响应while(1); ,例如while(1);['id',123]

这是为了防止JSON劫持:

这是为了确保一些其他网站不能做恶作剧来试图窃取你的数据。 例如,通过替换数组构造函数,然后通过标记包含这个JSON URL,恶意的第三方网站可以从JSON响应中窃取数据。 放一会儿(1); 在开始时,脚本会挂起。 @bdonlan,https://stackoverflow.com/a/871508/1647737

但是,将JSON内容“误用”为<script>源是唯一可能的,因为webbrowsers(例如Firefox)执行内容类型为application/json脚本:

<!-- Content-type: application/json; charset=ISO-8859-1 -->
<script src="http://code.jsontest.com/?mine=1"></script>

浏览器往往非常宽容的content-type 。 JavaScript第一次出现时,没有标准化的content-type

这样做的结果是许多旧的Web服务器发送JavaScript与各种内容类型和浏览器几乎接受任何东西。 如果一个浏览器请求JavaScript,它假定它得到JavaScript并执行它。

(甚至可以将JavaScript隐藏在GIF并让它执行。一旦参考:http://iamajin.blogspot.com/2014/11/when-gifs-serve-javascript.html)

由于网络基础设施的头号规则是“不要破坏网络”,所以没有人愿意改变脚本的安全模型,因此必须实施其他解决方法。

换句话说 - 有人将JSONP定期提供为JSONP,如果浏览器拒绝执行它,世界将会看到浏览器被破坏 - 而不是Web服务器。

(感谢Quentin提供参考链接并为我建立时间表。)

链接地址: http://www.djcxy.com/p/1315.html

上一篇: Why do browsers execute <script> with content

下一篇: Add unparsable cruft to ASP.NET MVC JsonResult