Javascript JSONP、端口和其他跨域策略

Javascript JSONP、端口和其他跨域策略,javascript,cross-domain,Javascript,Cross Domain,我目前正在一个SaaS平台上工作,该平台将至少使用两个域: (a) (b) 并且可能会使用其他自定义域 (c) (d) (e) (f) 我正试图设计一种策略,在使用所有域时实现相当数量的安全性,同时将所有远程调用和“小部件”交互整合到域(b)[] (快速说明-我使用“widget”作为一个通用术语。它们位于源HTML页面上,而不是iframe插件或javascript文档写入。) 在阅读了大量关于端口、JSONP、跨域脚本、浏览器安全模型等的文档之后。。。我想出了这个大概的想法。我希望得

我目前正在一个SaaS平台上工作,该平台将至少使用两个域:

  • (a)
  • (b)
并且可能会使用其他自定义域

  • (c)
  • (d)
  • (e)
  • (f)
我正试图设计一种策略,在使用所有域时实现相当数量的安全性,同时将所有远程调用和“小部件”交互整合到域(b)[]

(快速说明-我使用“widget”作为一个通用术语。它们位于源HTML页面上,而不是iframe插件或javascript文档写入。)

在阅读了大量关于端口、JSONP、跨域脚本、浏览器安全模型等的文档之后。。。我想出了这个大概的想法。我希望得到一些反馈

  • 登录到“网络”会为域(b)——WidgetSession创建一个辅助cookie
  • 访问所有域获取域(b)/javascript/utils.js
  • 访问域(b)以外的域获取域(b)/api/widget-session.js,该域具有回调以将活动WidgetSession注册到utils.js javascript包中
  • 所有API交互都通过WidgetSession cookie进行,该cookie仅对一组活动有效
  • 通过这种策略,我似乎能够绕过所有浏览器安全锁定,所涉及的工作不多,而且对消费者的风险/暴露最小

    有人能指出任何陷阱或提供更好的建议吗


    我尝试采用iframe方法(使用porthole.js库),这种方法可以跨域工作,但当涉及到协议时,我一直在浏览器中受阻。这听起来更简单、更安全,但缓存不会带来太多好处。

    据我所知,来自第三方域的cookie已经被safari拒绝,将来也会被firefox拒绝

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


    编辑我在stackoverflow上的评论被打断,所以在这里回应。Firefox/Safari的问题只是一个猜测,所以我不是100%肯定。实际上,我认为最好的方法是iframe方法。。我猜“舷窗”就是这样。如果您在跨http/https时遇到问题,请确保您同时支持这两种方式。。如果“客户端”在https url上运行,您的iframe也应该通过https提供。

    据我所知,来自第三方域的cookie已经被safari拒绝,并且将来也会被firefox拒绝

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


    编辑我在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朋友是否还在那里有联系。谢谢。回顾你之前的活动,我将采纳你的建议/偏好<代码>舷窗是一种轻量级iframe工具()。在做了大量调查之后,我认为我正在处理的安全封锁似乎不存在。我有一些测试代码在检查window.location与window.parent.location时出错。经过大量阅读,然后在Safari和Firefox上进行测试,我得出了上述想法。这似乎提供了一种解决方法,即cookie仅用于脚本标记嵌入。(在domainC上,我们链接到嵌入在domainB上的jsonp)。这实际上只是回显jsonp中domainB数据的cookie值,以便domainC可以访问它们。此解决方案的其余部分都不需要cookie交互。这目前在safari和Firefox中都适用——您是否理解预定的弃用将涵盖这一点?我应该看看我以前的Mozilla朋友是否还在那里有联系。谢谢。回顾你之前的活动,我将采纳你的建议/偏好<代码>舷窗是一种轻量级iframe工具()。在做了大量调查之后,我认为我正在处理的安全封锁似乎不存在。我有一些测试代码检查window.location与window.parent.location,这会抛出错误。