首页 文章

最佳长期选择:JSONP与EasyXDM

提问于
浏览
32

JSONPEasyXDM之间的最佳 long term 选项允许http上的域与https(跨协议)上的同一域通信?

例如,我希望http://mywebsite.comhttps://mywebsite.com进行对话,因为会话cookie仅通过https . 我想在http网站上显示用户名,而不是通过http传输数据 .

EasyXDM让我感到害怕security release并且JSONP对安全预防措施不是很清楚 .

1 回答

  • 74

    免责声明:我是easyXDM的主要作者 .


    实际上直接回答这个问题并不容易,因为有很多事情需要考虑 .

    首先,让我们比较问题范围之外的easyXDM和JSONP .

    JSONP允许 client side program (使用BOM / DOM的Javascript)与 server side program (.net,php等使用数据库,会话存储等)进行交互,并且只有客户端可以发起消息传递(请求/响应,轮询或推送) ,虽然对于推送,您可以轻松设置IMG.src,执行XHR或FORM帖子,因为您不需要响应) .
    客户端可以发送到服务器的数据量有限,并且还必须将此数据格式化为适合作为查询字符串参数,并且必须设置服务器以响应所述数据 . 对于每条消息,运行网络旅行时产生的成本 .

    easyXDM使用基于字符串的传输堆栈促进任何两个 client side programs 之间的消息传递 . 不需要涉及任何服务器端程序,也没有网络流量 . 双方都是平等的,并且都可以发起消息传递,并且可以在客户端上保持状态(因此术语程序而不是普通的Javascript) . 消息的大小不受限制,只要数据可以序列化为字符串,传输就可以处理它(easyXDM允许您设置自定义序列化程序,或使用JSON) .

    这两者之间的主要区别在于客户端和服务器之间只有客户端可以发起消息传递,而另一个是在两个相同的客户端程序之间,其中任何一个可以使用XHR和其他方式进行通信,或者中继数据到服务器 .

    关于安全; JSONP要求客户端完全信任服务器,毕竟它允许它在程序中运行任意代码 . 除此之外,几乎没有问题,但这是一个严重的问题 .
    使用easyXDM信息(字符串)并且不传输代码,接收者可以检查信息并对其进行操作 . 所以有 absolutely no risk of execution of arbitrary code . 虽然上述情况属实,但easyXDM依赖于 Build 通道的一些组件易受XSS攻击(一个特制的URL会导致客户端执行任意代码),但这些组件已被关闭 . 目前还没有这样的漏洞,所有新的代码都经过彻底的审查 .

    我自己将easyXDM用于一些要求苛刻的项目,像 LinkedIn, Twitter and Disqus 这样的网站以及诺基亚和其他公司运行的应用程序已经在easyXDM提供的消息传递框架之上构建了应用程序,所以有很多人已经检查了代码并检查了它,以及通过使用它来保证其安全性 .

    最后,它实际上是关于用例 . 例如,JSONP不能用于跨域调整窗口大小,因为它需要客户端/客户端通信 . 但是,easyXDM可以通过让一方使用XHR来用于客户端/客户端和客户端/服务器 .

    在您的情况下,如果您只需要在不安全的域上提供一小段信息,那么这些都不是真正需要的 .

    • 浏览安全域,在不安全域上设置cookie

    • 浏览安全域,将其重定向到其请求中的不安全传递信息

    • 浏览安全域,让它在重定向到不安全域之前将数据存储在window.name中 .

    如果信息不能被欺骗是至关重要的,那么您所有这些都需要签署数据以便确认其真实性,但如果您需要的只是一个名称,那么这应该是不必要的 .
    检查真实性的简单方法是

    • 在不安全的域上,生成随机密钥并将其存储,并重定向到传递密钥的不安全域 .

    • 在安全域上将秘密与信息一起传回(使用上述任一方法)
      客户端

    • 验证该信息是否包含该秘密 .

    既然只有两方可能有秘密,信息得到验证 .

    To conclude ,确实没有确定的答案,这完全取决于具体情况 . 所以选择,但明智地选择:)

相关问题