我需要从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
生成随机令牌并将其存储在会话中。然后,它将此标记附加到Site B
的JSONP请求的查询字符串。 Site B
然后响应,但使用数字签名加密常用数据和令牌。 Site A
然后将此值粘贴到A
上的Cookie中。在A
的下一个请求中,A
服务器端可以捕获cookie,获取值,解密,检查令牌以及它是否与会话中的值匹配,信任其余数据
这听起来合情合理吗?有没有更简单的方法?我的目标是降低A
结束时的复杂性。
由于
答案 0 :(得分:1)
避免被黑客攻击的方法是让网站直接相互通信,而不是使用客户端JavaScript。编写一个小型轻量级REST API,允许将数据传输到幕后,服务器到服务器。
链接到站点A时,在URL中包含一个身份验证令牌,然后可以使用对站点B的幕后调用来检查。此调用可以传输任何其他所需信息。令牌可能应该是IP绑定的,并在使用后过期。成功后,您可以在站点A中设置您的cookie信息,以避免需要进一步往返。
答案 1 :(得分:1)
您可以使用easyXDM在域之间进行通信。有了它,你有两个javascript程序,一个在消费者域,一个在提供者,它可以断言消费者的域。这两个程序都可以与用户交互,用户可以向双方进行身份验证。通过提供者程序知道用户是谁以及知道消费者是谁,提供者可以将他想要的任何数据传递给消费者。
这就是像Twitter,Disqus和LinkedIn这样的大公司使用它们的API。