Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何提出不可伪造的跨域请求_Javascript_Security_Cross Domain_Csrf - Fatal编程技术网

Javascript 如何提出不可伪造的跨域请求

Javascript 如何提出不可伪造的跨域请求,javascript,security,cross-domain,csrf,Javascript,Security,Cross Domain,Csrf,我需要从站点B获取一些数据到站点A的服务器端。为了请求站点B检索数据,需要存在与站点B域相关的cookie。因此,我假设我需要使用JSONP在javascript中执行此操作 我的想法是使用JavaScript向B发出请求,然后捕获结果并将其粘贴在as域上的cookie中,这样对a的后续请求将携带cookie和返回的数据(向A发出两次请求以将信息发送到A的服务器端并不重要)。这样做可以很好地工作,但完全可以进行黑客攻击 数据本身不是秘密,但我需要防止请求伪造或站点A上的人手动调用JSONP回调函

我需要从
站点B
获取一些数据到
站点A
的服务器端。为了请求
站点B
检索数据,需要存在与
站点B
域相关的cookie。因此,我假设我需要使用JSONP在javascript中执行此操作

我的想法是使用JavaScript向
B
发出请求,然后捕获结果并将其粘贴在
a
s域上的cookie中,这样对
a
的后续请求将携带cookie和返回的数据(向
A
发出两次请求以将信息发送到
A
的服务器端并不重要)。这样做可以很好地工作,但完全可以进行黑客攻击

数据本身不是秘密,但我需要防止请求伪造或
站点A
上的人手动调用JSONP回调函数,或使用被盗或伪造的数据手动设置
A
cookie。此外,是否还有其他黑客漏洞?这也需要防止

我能想到的唯一方法是:

站点A
生成一个随机令牌并将其存储在会话中。然后,它将该令牌附加到JSONP请求的查询字符串中,以
站点B
然后响应,但使用数字签名将常用数据与令牌一起加密。
站点A
然后将该值粘贴到
站点A
的cookie中。在对
A
的下一个请求中,
A
s服务器端可以捕获cookie,获取值,解密它,检查令牌,如果它与会话中的值匹配,则信任其余的数据

这听起来合理吗?有没有更简单的方法?我的目标是降低
A
s端的复杂性


谢谢

避免被黑客攻击的方法是让站点直接相互通信,而不是使用客户端JavaScript。编写一个小型的轻量级REST API,允许数据在后台从服务器到服务器传输

链接到站点A时,在URL中包含一个身份验证令牌,然后可以使用对站点B的幕后调用进行检查。此调用可以传输任何其他所需信息。该令牌可能是IP绑定的,并且在使用后过期。成功后,您可以在站点A中设置cookie信息,以避免需要进一步往返。

您可以使用它在域之间进行通信。使用它,您有两个javascript程序,一个在使用者域上,一个在提供者域上,可以断言使用者的域。这两个程序都可以与用户交互,用户可以向双方进行身份验证。使用提供者程序知道用户是谁,知道消费者是谁,提供者可以向消费者传递它想要的任何数据


这是像Twitter、Discus和LinkedIn这样的大公司在API中使用的。你控制这两个网站吗?也就是说,你能在这两个域中更改代码吗?听起来像是你重新发明了公钥密码术!请看这里:@bdares不,我没有,因为这仍然不能防止伪造。有什么办法阻止我偷别人加密的东西repsonse和我自己使用它?@steve
站点A
是一个想要使用我的服务的客户站点
站点B
。是的,他们的代码可以更改,但我需要他们尽可能少地做工作。你从客户端发送的任何javascript ajax请求都可以伪造,因为javascript源代码可以读取/复制/修改,这就是我交易,但存储在用户浏览器中的
站点B
的cookies呢?添加了更多。出于安全原因,您无法访问不同域的cookies。您所说的“链接到站点A时”是什么意思?此外,JSONP请求将传输Cookie您是否有指向JSONP传输Cookie示例的链接?您是否使用iFrame?我假设您在某个时候从站点B链接到站点a?或者您的用户只是独立到站点a?它使用脚本标记,因此发送Cookie的方式与任何其他请求相同,而不是ajax/xhr。场地A将单独使用