为什么浏览器使用内容执行<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