【问题标题】:JSONP , Portholes, and other CrossDomain strategiesJSONP、Portholes 和其他跨域策略
【发布时间】:2013-02-23 10:45:37
【问题描述】:

我目前正在开发一个将使用至少两个域的 SaaS 平台:

并且可能会使用其他自定义域...

我正在尝试设计一种策略,以在使用所有域时启用相当多的安全性,同时将所有远程调用和“小部件”交互整合到 Domain(b) [https://example.com].

(快速说明 - 我使用“小部件”作为一般术语。这些位于源 HTML 页面上,而不是 iframe 插件或 javascript 文档写入。)

在阅读了关于 Portholes、JSONP、跨域脚本、浏览器安全模型等的大量文档之后……我想出了这个总体思路。我希望得到一些反馈...

  1. 登录到“网络”会为 Domain(b) 创建一个辅助 cookie -- WidgetSession
  2. 访问所有域 fetch Domain(b)/javascript/utils.js
  3. 对 Domain(b) 以外的域的访问获取 Domain(b)/api/widget-session.js ,它具有将活动 WidgetSession 注册到 utils.js javascript 包中的回调。
  4. 所有 API 交互都通过 WidgetSession cookie 进行,该 cookie 仅对一定数量的活动有效。

通过这种策略,我似乎能够绕过所有浏览器安全锁定,所涉及的工作量并不多,而且对消费者的风险/风险最小化。

谁能指出任何陷阱或提供更好的建议?

我尝试采用 iframe 方法(使用 porthole.js 库),这种方法可以跨域工作,但在涉及协议时,我一直在浏览器中被阻止。这听起来更简单、更安全,尽管它不会从缓存中受益。

【问题讨论】:

    标签: javascript cross-domain


    【解决方案1】:

    据我了解,来自 3rd 方域的 cookie 已经被 safari 拒绝,并且将来也会被 Firefox 拒绝。

    此外,将 JSONP 与 cookie 结合使用(总是?)容易受到 CSRF 攻击。

    Edit 在 stackoverflow 上的评论对我来说是坏的,所以在这里回复。 Firefox/Safari 问题只是猜测,所以我不能 100% 确定。实际上,我认为最好的方法是 iframe 方法。我猜“舷窗”就是这样做的。如果您在跨越 http / https 时遇到问题,请确保您同时支持这两者。如果“客户端”在 https url 上运行,您的 iframe 也应该从 https 提供。

    【讨论】:

    • 经过大量阅读并在 Safari 和 Firefox 上进行测试后,我得出了上述想法。
    • 这似乎提供的解决方法是 cookie 仅用于脚本标签嵌入。 (在 domainC 上,我们链接到嵌入在 domainB 上的 jsonp)。这实际上只是回显了 jsonp 中 domainB 的数据的 cookie 值,因此 domainC 可以访问它们。此解决方法的其余部分都不需要 cookie 交互。这目前在 safari 和 Firefox 中有效——您是否理解计划的弃用将涵盖这一点?我应该看看我的前 Mozilla 朋友那里是否还有联系方式。
    • 谢谢。浏览您以前的活动,我将采纳您的建议/偏好。 Porthole 是一个轻量级的 iframe 工具 (github.com/ternarylabs/porthole)。经过大量调查后,我认为我正在处理的安全锁定似乎不存在。我有一些测试代码正在检查 window.location 与 window.parent.location ,这是抛出错误。
    猜你喜欢
    • 2011-02-20
    • 2010-09-09
    • 2014-02-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2014-05-18
    • 2011-11-26
    相关资源
    最近更新 更多