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