2011-04-14 48 views
0

我需要从Site B得到一些数据Site A的服务器端跨域请求。为了使请求Site B检索数据,存在与需要存在的Site B的域相关的cookie。我认为我需要在JavaScript中使用JSONP来做到这一点?如何使心不是伪造

我的想法是使用JavaScript向B发出请求,然后捕获结果并在A的域中将其粘贴到cookie上,以便后续请求A将携带返回数据的cookie(它并不重要向A发送两个请求,以获取信息到A的服务器端)。这将工作得很好,除非它完全可以破解。

数据本身并不是秘密,但我需要防止请求伪造或Site A上的人员手动调用JSONP回调函数,或者手动设置A cookie与被盗或伪造的数据。另外,还有没有其他的黑客攻击漏洞?这也需要预防!

我能想到这样做的唯一方法是:

Site A产生会话随机令牌并将其存储。然后它将此令牌附加到JSONP请求的查询字符串Site B。然后Site B响应,但使用数字签名将通常的数据与令牌一起加密。然后Site A将此值粘贴在A的cookie中。在A的下一个请求中,A的服务器端可以捕获cookie,获取值,解密,检查令牌以及它是否与会话中的值匹配,相信其余数据。

这听起来合理吗?有更容易的方法吗?我的目标是在A的最后减少复杂性。

感谢

+0

你是否在控制这两个网站?即你可以在两个域中进行代码更改吗? – 2011-04-14 07:59:22

+0

听起来像你刚刚重新创建公钥密码术!看到这里:http://en.wikipedia.org/wiki/Public-key_cryptography#A_postal_analogy – bdares 2011-04-14 08:00:45

+0

@bdares不,我没有,因为这仍然不能防止伪造。什么阻止我偷别人加密repsonse和自己使用它? – 2011-04-14 08:04:40

回答

1

,以避免它被破解的方式是让网站相互直接通信,而不是使用客户端的JavaScript。编写一个小型轻量级REST API,允许数据在幕后,服务器到服务器之间传输。

当连接到站点A,包括然后可以使用幕后的来电网站B.此调用任何其他所需信息传递要检查的URL的认证令牌。该令牌可能应该是IP绑定的,并在使用后到期。成功后,您可以在网站A中设置Cookie信息,以免需要进一步往返。

+0

这将是理想的,但在用户的浏览器中存储的“网站B”Cookie是什么? – 2011-04-14 08:24:44

+0

增加了更多。出于安全原因,您无法访问不同域名的Cookie。 – 2011-04-14 08:31:25

+0

你是什么意思“链接到网站A”?另外,JSONP请求将传输Cookie – 2011-04-14 08:35:58

1

你可以使用easyXDM域之间进行通信。有了它,你有两个JavaScript程序,一个用于消费者域,一个用于提供者,它可以声明消费者的域。这两个程序都可以与用户进行交互,用户可以向双方进行身份验证。随着供应商计划知道用户是谁,知道谁是消费者,供应商可以将想要的任何数据传递给消费者。

这就是Twitter,Disqus和LinkedIn等大公司使用的API。

+0

有趣,我会调查!谢谢 – 2011-04-28 16:05:20