在和EasyXDM之间,允许http上的域在https (跨协议)上与同一个域对话,JSONP和EasyXDM之间的最佳长期选择是什么?
例如,我希望http://mywebsite.com与https://mywebsite.com对话,因为会话cookie仅在https之上。我想在http网站上显示用户名,而不需要在http上传输这些数据。
EasyXDM用安全释放吓了我一跳,而JSONP对安全防范措施并不十分清楚。
发布于 2011-09-10 09:43:11
免责声明:我是easyXDM的主要作者。
事实上,要直接回答这个问题并不容易,因为有很多事情要考虑。
首先,让我们在问题范围之外比较easyXDM和JSONP。
JSONP允许客户端程序(使用BOM/DOM的Javascript)与服务器端程序(.net、php等,使用db's、会话存储等)进行交互,只有客户机才能启动消息传递(请求/响应、轮询或推送,尽管对于push,您可以轻松地设置IMG.src、执行XHR或表单发布,因为您不需要响应)。
客户端可以发送到服务器的数据量有限,并且必须将该数据格式化为适合于查询字符串参数,并且必须设置服务器以响应所述数据。对于每一条消息,都会运行一次网络旅行,并承担由此带来的费用。
easyXDM使用基于字符串的传输堆栈在任意两个客户端程序之间方便消息传递。不需要任何服务器端程序,也不需要网络流量。双方都是平等的,都可以启动消息传递,并且都可以在客户端保持状态(因此程序这个术语而不是普通的Javascript)。消息的大小是不受限制的,只要数据可以序列化为字符串,传输就可以处理它(easyXDM允许您设置自定义序列化程序,或者使用JSON)。
这两个程序之间的主要区别是,一个是客户机和服务器之间,其中只有客户端可以启动消息传递,另一个是在两个相同的客户端程序之间,其中一个可以使用XHR和其他方式与服务器通信,或者将数据中继到服务器。
关于安全性,JSONP要求客户端绝对信任服务器,毕竟它允许服务器在其程序中运行任意代码。除此之外,没有什么问题,但这是一个严重的问题。
使用easyXDM只发送信息(字符串),不发送代码,由接收方检查信息并对其采取行动。因此,绝对没有执行任意代码的风险。虽然上述情况是正确的,但easyXDM所依赖的一些组件很容易受到XSS的攻击(巧尽心思构建的url会导致客户端执行任意代码),但这些组件已经关闭。目前还不知道这些漏洞,所有新代码都经过了彻底的检查。
我自己用easyXDM来做一些要求很高的项目,像LinkedIn、Twitter和Disqus这样的网站,以及诺基亚和其他公司运行的应用程序,都是在easyXDM提供的消息传递框架之上构建的,所以有很多人已经检查了代码,并通过使用它来保证代码的安全性。
最后,它实际上是关于用例的。例如,JSONP不能用于调整跨域窗口的大小,因为这需要客户机/客户端通信。但是,easyXDM可以同时用于客户机/客户端和客户机/服务器,方法是让其中一方使用XHR。
在您的情况下,如果您只需要在不安全的域上提供一小块信息,这两种信息都不是真正需要的。
如果信息不能被欺骗是至关重要的,那么您需要对所有这些数据进行签名,以便确认其真实性,但是如果您只需要一个名称,那么这就没有必要了。
检查真实性的一个简单方法是
因为只有双方才有可能知道这个秘密,所以这些信息是经过核实的。
总结,真的没有明确的答案,这一切都取决于情况。因此,选择,但明智地选择:)
https://stackoverflow.com/questions/7363094
复制相似问题