保护浏览器帮助程序对象

2024-05-06

我目前正在构建浏览器帮助程序对象。

其中一件事是BHO要做的就是发出绕过跨域策略的跨站请求。

  • 为此,我公开一个__MyBHONameSpace.Request使用的方法WebClient内部。

  • 然而,我发现任何使用我的 BHO 的人现在到处都有 CSRF 漏洞,因为聪明的攻击者现在可以从我客户的计算机发出任意请求。

有什么聪明的方法可以缓解这种情况吗?


完全防范此类攻击的唯一方法是将页面 JavaScript 的执行上下文与扩展程序的 JavaScript 代码分开。

当我研究这个问题时,我发现Internet Explorer确实提供了一种方法来实现创建这样的上下文,即通过活动脚本 http://msdn.microsoft.com/en-us/library/ky29ffxd%28v=vs.94%29.aspx。但我还没有实施这个解决方案,原因如下:

  1. 缺乏将 IActiveScript 与 BHO 相结合的文档/示例。
  2. 对未来缺乏确定性(例如https://stackoverflow.com/a/17581825 https://stackoverflow.com/a/17581825).
  3. 可能的性能影响(IE 并不以其卓越的性能而闻名,每个页面的两个 JavaScript 引擎实例将如何影响浏览速度?)。
  4. 维护成本:我已经有了一个运行良好的现有解决方案,基于非常合理的假设。因为我不确定替代方法是否(使用IActiveScript)将是无错误且面向未来的(参见 2),我决定放弃这个想法。

我所做的是:

  1. 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 )。
  2. Restrict the functionality of the extension:
    1. 该扩展程序只能在需要激活的页面上激活。这大大减少了攻击面,因为攻击者更难在其上运行代码https://trusted.example.com并诱骗用户访问https://trusted.example.com.
    2. 创建并执行白名单用于扩展级别跨域访问的 URL(在 BHO 内的本机代码(例如 C++)中)。
    3. 对于敏感 API,限制其暴露于极少数受信任的 URL(同样,不是在 JavaScript 中,而是在本机代码中)。
    4. 处理跨域功能的扩展部分不与 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(使用前将#替换为@)

保护浏览器帮助程序对象 的相关文章

  • 如何使用 XMLHttpRequest 在后台下载 HTML 页面并从中提取文本元素?

    我想制作一个 Greasemonkey 脚本 当您在 URL 1 中时 该脚本会在后台解析 URL 2 的整个 HTML 网页 以便从中提取文本元素 具体来说 我想下载整个页面的 HTML 代码 a烂番茄page 在后台并将其存储在变量中
  • Angular Js 路由 Google Chrome 问题

    使用下面提到的 Code1 在 Angular Js 中进行基本路由并获得 XMLHttpRequest 无法加载跨源请求仅支持以下协议方案 http data chrome extension https chrome extension
  • 配置Google App Engine应用程序以进行跨域

    您能否建议我们如何配置托管在 Google App Engine 上的 Python 应用程序以接受从浏览器完成的 AJAX 选项 GET POST PUT 和 DELETE 此类调用的具体细节是 XmlHTTPRequest 首先向服务器
  • 如何监听子窗口关闭?

    我正在以这种方式打开 Facebook 共享的子窗口 window open sharingUrl toolbar 0 status 0 width 626 height 436 当用户单击共享或关闭时 窗口会自动关闭 有没有办法为这些事件
  • 发送 XML 字符串作为响应

    我正在从第三方应用程序 不同域 向我的 ASP 应用程序获取请求 我正在处理请求并在我的应用程序中执行业务部分 作为确认 我需要将 XML 字符串作为响应发送到将请求发布到我的应用程序的同一页面 我使用以下代码成功检索了 Request 中
  • 缺少“访问控制允许来源”。我的下一步应该是什么?

    我想从这里提取收益率曲线数据 下面的 get 请求返回 200 正常 状态代码 但也显示一条控制台注释 指出跨域请求被阻止 因为缺少 CORS 标头 Access Control Allow Origin get http www trea
  • 第三方脚本可以设置第一方 cookie 吗?

    我在网上阅读了很多有关 cookie 的内容 但没有解决这个问题 假设我在 a com 上有一台服务器 而 b com 提供的网页在我的服务器上的该网页中嵌入了一个脚本 该脚本在设置 cookie 方面可以做什么 它可以设置一个cookie
  • ajax 问题 - firebug 中的 200 OK 但没有响应正文的红色消息

    据我所知 我有与跨域相关的 ajax 小问题 在本地机器上我用一些ajax创建了html示例 在注册文本字段中 用户输入 用户名 每次击键时 ajax 都会将其发送到 本地 Tomcat servlet 检查该用户名是否已被使用 并发回 已
  • 跨子域 iframe 和 JavaScript

    我正在开发一个 CMS 网站 其域名是 http www acmssite com 他们有一个存储表单系统的子域 http www forms acmssite com 我在第一个上有一个 iframe 它查看后者中的表单 我需要运行脚本来
  • CORS withCredentials XHR 预检未在 Firefox 中发布 Cookie

    我正在尝试使用凭据发布 CORS XHR 帖子 它在 Chrome 中运行良好 但在 Firefox 中则不然 cookie 不存在于预检请求标头中 因此我看到了 302 这在 Chrome 中完美运行 因为 cookie 位于预检请求标头
  • php中如何检测ajax跨域请求

    对于普通的ajax请求我使用 strtolower SERVER HTTP X REQUESTED WITH xmlhttprequest 但这不适用于跨域请求 我能怎么做 Edit2 如果您以这种方式使用 jQuery ajax 函数 v
  • SECURITY_ERR:DOM 异常 18 仅在 Safari 中

    我有两台服务器 prod example com 和 img example com 所以在 prod 上 我使用画布处理 img 中的图像 在 FF 和 Chrome 中一切正常 但在 Safari 中我得到了这个SECURITY ERR
  • WSO2 API Manager 的跨域问题

    我们为客户开发了一些API 并通过API Manager发布了它们 我们为客户提供了一些运行良好的 PHP 代码示例 唯一的问题是他们通过 AJAX 在与 AM 相关的域不同的域中使用这些 API 这是跨域问题吗 我尝试使用以下标头在 AP
  • 使用PHP和Javascript通过CORS实现站点之间的跨域通信

    经过几天的网络浏览并尝试了所有可能的方法后 我开始意识到我的主机服务器存在问题 它被我的主机服务器禁用 所以 我想把我的代码发布到 Stackoverflow 上 这样 SO 上的其他人就不会像我一样浪费时间了 该代码片段在 IE Safa
  • 跨域属性的目的...?

    在图像和脚本标签中 我的理解是您可以访问其他域上的脚本和图像 那么什么时候使用这个属性呢 这是当您想要限制其他人访问您的脚本和图像的能力时吗 Images https developer mozilla org en US docs Web
  • Camel JAX-RS 和跨域请求

    我希望能够在我的本地 Camel 实例上执行 HTTP 请求 仅出于开发目的 我知道这是不好的做法 现在 我坚持 Origin http localhost 8000 is not allowed by Access Control All
  • 在 SharePoint Intranet 上处理跨域的最佳方法,无需服务器端、silverlight、DBC 等

    我正在开发 Microsoft 内部 SharePoint 网站 并且需要从跨域 SharePoint 网站提取列表数据 由于各种原因 我不想使用 Silverlight 并且目前无法实现业务数据连接 有没有一种简单的方法可以使用 Java
  • 保护浏览器帮助程序对象

    我目前正在构建浏览器帮助程序对象 其中一件事是BHO要做的就是发出绕过跨域策略的跨站请求 为此 我公开一个 MyBHONameSpace Request使用的方法WebClient内部 然而 我发现任何使用我的 BHO 的人现在到处都有 C
  • JQuery - $.ajax() - 使用 JSONP 跨源 - 仅在 IE 8 中获取“parsererror”(在 IE 7 中工作)

    我有以下代码来执行跨域请求并获取 JSONP 数据 通过回调方法包装的 JSON 我已经验证我使用包装 JSON 数据的回调方法正确获得了响应 它在 IE7 中工作得很好 回调 cb 被调用 但在 IE8 中则不然 document rea
  • 为什么这个跨域ajax调用实际上有效?

    我无意中写了一个跨域AJAX调用NextBus http www nextbus com xmlFeedDocs NextBusXMLFeed pdf 使用 jQuery ajax url http webservices nextbus

随机推荐