我目前正在构建浏览器帮助程序对象。
其中一件事是BHO要做的就是发出绕过跨域策略的跨站请求。
有什么聪明的方法可以缓解这种情况吗?
完全防范此类攻击的唯一方法是将页面 JavaScript 的执行上下文与扩展程序的 JavaScript 代码分开。
当我研究这个问题时,我发现Internet Explorer确实提供了一种方法来实现创建这样的上下文,即通过活动脚本 http://msdn.microsoft.com/en-us/library/ky29ffxd%28v=vs.94%29.aspx。但我还没有实施这个解决方案,原因如下:
- 缺乏将 IActiveScript 与 BHO 相结合的文档/示例。
- 对未来缺乏确定性(例如https://stackoverflow.com/a/17581825 https://stackoverflow.com/a/17581825).
- 可能的性能影响(IE 并不以其卓越的性能而闻名,每个页面的两个 JavaScript 引擎实例将如何影响浏览速度?)。
- 维护成本:我已经有了一个运行良好的现有解决方案,基于非常合理的假设。因为我不确定替代方法是否(使用
IActiveScript
)将是无错误且面向未来的(参见 2),我决定放弃这个想法。
我所做的是:
- Accept that very determined attackers will be able to access (part of) my extension's functionality.
-
@本杰明 https://stackoverflow.com/users/1348195/benjamin-gruenbaum询问访问持久存储API是否会对用户的隐私构成威胁。我认为这种风险是可以接受的,因为强制执行存储配额,并且所有存储的数据在使用之前都会经过验证,并且不会为攻击者提供更多工具来攻击用户。如果攻击者想通过持久存储来跟踪用户,他们可以使用
localStorage
在某个域上,并通过<iframe>
使用发布消息 https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessageAPI。此方法适用于所有浏览器,而不仅仅是安装了我的 BHO 的 IE,因此当有一种方法已经适用于所有现代浏览器(IE8+)时,任何攻击者都不太可能花时间对我的 BHO 进行逆向工程以使用 API )。
- Restrict the functionality of the extension:
- 该扩展程序只能在需要激活的页面上激活。这大大减少了攻击面,因为攻击者更难在其上运行代码
https://trusted.example.com
并诱骗用户访问https://trusted.example.com
.
- 创建并执行白名单用于扩展级别跨域访问的 URL(在 BHO 内的本机代码(例如 C++)中)。
- 对于敏感 API,限制其暴露于极少数受信任的 URL(同样,不是在 JavaScript 中,而是在本机代码中)。
- 处理跨域功能的扩展部分不与 Internet Explorer 共享任何状态。 Cookie 和授权标头从请求和响应中删除。因此,即使攻击者设法访问我的 API,他们也无法冒充其他网站的用户,因为缺少会话信息。
这不能防止使用请求者的 IP 进行身份验证的站点(例如 Intranet 站点或路由器),但正确的白名单实施已涵盖此攻击媒介(请参阅步骤 2)。
“在本机代码中强制执行”并不意味着“在本机代码中进行硬编码”。您仍然可以提供包含元数据和 JavaScript 代码的更新。 MSVC++ (2010) 支持 ECMAScript 风格的正则表达式<regex> http://www.cplusplus.com/reference/regex/,这使得实现基于正则表达式的白名单变得非常容易。
如果您想继续使用IActiveScript
,您可以在源代码中找到示例代码ceee https://code.google.com/p/ceee/, Gears https://code.google.com/p/gears/(均已停止)或任何其他尝试增强 IE 脚本环境的项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)