我目前正在构建浏览器帮助程序对象。
BHO必须做的一件事是制作绕过跨域政策的跨网站请求。
为此,我公开了一种在内部使用__MyBHONameSpace.Request
的{{1}}方法。
然而,我发现任何正在使用我的BHO的人现在都有一个CSRF漏洞,因为智能攻击者现在可以从我客户的计算机发出任意请求。
有没有聪明的方法来缓解这种情况?
答案 0 :(得分:7)
完全防范此类攻击的唯一方法是将页面JavaScript的执行上下文与扩展程序的JavaScript代码分开。
当我研究这个问题时,我发现Internet Explorer确实提供了一种方法来实现这种上下文的创建,即通过IActiveScript。我没有实现这个解决方案,原因如下:
IActiveScript
)是否无障碍且面向未来(见2),我决定放弃这个想法。我所做的是:
localStorage
,并使用postMessage API通过<iframe>
与此域通信。这种方法适用于所有浏览器,而不仅仅是安装了我的BHO的IE,所以当有一种方法已经适用于所有现代浏览器时,任何攻击者都不太可能花时间对我的BHO进行逆向工程以使用API(IE8 + )。https://trusted.example.com
上运行代码并欺骗用户访问https://trusted.example.com
。“在本机代码中强制执行”并不意味着“本机代码中的硬编码”。您仍然可以提供包含元数据和JavaScript代码的更新。 MSVC ++(2010)支持ECMAScript样式的正则表达式<regex>
,这使得实现基于正则表达式的白名单非常容易。
如果您想继续使用IActiveScript
,可以在源代码ceee,Gears(已停止使用)或任何其他尝试增强的项目中找到示例代码IE的脚本环境。