JSONP和EasyXDM之间的最佳长期选择是什么,以允许http上的域与https(跨协议)上的同一域通信?< / p>
例如,我希望http://mywebsite.com与https://mywebsite.com进行对话,因为会话cookie仅通过https进行。我想在http网站上显示一个用户名,而不是通过http传输这些数据。
EasyXDM让我感到害怕security release并且JSONP对安全预防措施不是很清楚。
答案 0 :(得分:74)
免责声明:我是easyXDM的主要作者。
直接回答这个问题实际上并不容易,因为有很多事情需要考虑。
首先,让我们比较问题范围之外的easyXDM和JSONP。
JSONP允许客户端程序(使用BOM / DOM的Javascript)与服务器端程序(.net,php等使用db,会话存储等)进行交互),只有客户端可以启动消息传递(请求/响应,轮询或推送,但是对于推送,您可以轻松设置IMG.src,执行XHR或FORM帖子,因为您不需要响应)。登记/> 客户端可以发送到服务器的数据量有限,并且还必须将此数据格式化为适合作为查询字符串参数,并且必须设置服务器以响应所述数据。对于每条消息,运行网络旅行时产生的成本。
easyXDM使用基于字符串的传输堆栈促进任意两个客户端程序之间的消息传递。不需要涉及任何服务器端程序,也没有网络流量。双方都是平等的,都可以发起消息传递,并且可以在客户端保持状态(因此术语程序而不是普通的 Javascript )。 消息的大小不受限制,只要数据可以序列化为字符串,传输就可以处理它(easyXDM允许您设置自定义序列化程序,或使用JSON)。
这两者之间的主要区别在于客户端和服务器之间只有客户端可以发起消息传递,而另一个是在两个相同的客户端程序之间,其中任何一个都可以使用XHR和其他方式与之通信,或将数据中继到服务器。
关于安全; JSONP要求客户端完全信任服务器,毕竟它允许它在程序中运行任意代码。除此之外,几乎没有问题,但这是一个严重的问题 使用easyXDM信息(字符串)并且不传输代码,接收者可以检查信息并对其进行操作。因此绝对没有执行任意代码的风险。虽然上述情况属实,但easyXDM依赖于建立通道的一些组件易受XSS攻击(一个特制的url会导致客户端执行任意代码),但这些已被关闭。目前还没有这样的漏洞,所有新的代码都经过彻底的审查。
我自己将easyXDM用于一些要求苛刻的项目,而像 LinkedIn,Twitter和Disqus 这样的网站以及诺基亚和其他公司运行的应用程序都在easyXDM提供的消息框架之上构建了应用程序因此,有许多人已经检查过代码并对其进行了检查,并且通过使用它来保证其安全性。
最后,它实际上是关于用例。例如,JSONP不能用于跨域调整窗口大小,因为这需要客户端/客户端通信。但是,easyXDM可以用于客户端/客户端和客户端/ 服务器,其中一方使用XHR。
在您的情况下,如果您只需要在不安全的域上提供一小段信息,那么这些都不是真正需要的。
如果信息不能被欺骗是至关重要的,那么您所有这些都需要签署数据以便确认其真实性,但如果您需要的只是一个名称,那么这应该是不必要的。
检查真实性的简单方法是
由于只有双方可能拥有这个秘密,所以信息会得到验证。
总结,确实没有确定的答案,这完全取决于具体情况。所以选择,但明智地选择:)