Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
Security 防止跨站点请求伪造-切勿依赖Cookie标头中发送到服务器的SessionID_Security_Gwt - Fatal编程技术网

Security 防止跨站点请求伪造-切勿依赖Cookie标头中发送到服务器的SessionID

Security 防止跨站点请求伪造-切勿依赖Cookie标头中发送到服务器的SessionID,security,gwt,Security,Gwt,我正在读教程 它说 记住——你永远不能依赖 已在中发送到服务器的sessionID cookie头;只看下面的图片 GWT应用程序发送的会话ID 在消息的有效负载中显式地 到您的服务器 它是用来预防疾病的吗 有了这个神话,就足以防止上述攻击了吗?是的,就足以防止跨站点请求伪造 无法信任cookie中的sessionid。假设用户登录到mysite.com,并且会话id在cookie中。现在,用户点击一个指向evilsite.com的链接。EvileSite.com有这样的代码 <img

我正在读教程

它说

记住——你永远不能依赖 已在中发送到服务器的sessionID cookie头;只看下面的图片 GWT应用程序发送的会话ID 在消息的有效负载中显式地 到您的服务器

它是用来预防疾病的吗


有了这个神话,就足以防止上述攻击了吗?

是的,就足以防止跨站点请求伪造

无法信任cookie中的sessionid。假设用户登录到mysite.com,并且会话id在cookie中。现在,用户点击一个指向evilsite.com的链接。EvileSite.com有这样的代码

<img src="http://mysite.com/transfermoney.jsp?amount=1000.." />

浏览器将向mysite.com发出请求,并且它还将发送带有会话id的cookie。这里需要了解的是,evilsite.com无法读取cookie,但它仍然可以完成其工作

浏览器同源策略阻止evilsite.com读取会话标识符,无论其是在cookie中还是嵌入在html页面中。但由于浏览器会自动将cookie发送到您的服务器,即使资源是从另一个域中的html代码请求的,所以您有XSRF

为了防止出现这种情况,建议将会话标识符作为请求参数。如果将其作为请求参数添加,evilsite.com将无法访问该标识符,因此无法将其放入img src属性中


但是,请记住,如果您的站点存在XSS漏洞,没有任何东西可以阻止您使用XSRF。换句话说,如果你有XSS漏洞,攻击者甚至不会关心做XSRF。

@Sripathi:这是一个非常好的问题的非常好的答案!我看到的实际问题是,人们习惯于“保持登录”,即使他们关闭一个浏览器窗口,或者如果他们使用其他浏览器窗口访问同一个站点,他们希望仍然登录。因此,如果我的网站没有提供这种功能(以应对CSRF攻击),我担心他们会认为我的网站“质量低下”——即“为什么其他网站可以这样做,而不是你的?!”我可以理解这种态度。有没有办法将两者结合起来,或者找到一个好的折衷办法?这是可能的。CSRF主要是AJAX风格的api的一个问题,在AJAX风格的api中,只需要一个请求就可以做一些有害的事情。对于这样的api请求,您不应该只依赖于长寿命的“记住我”cookie。但是,只使用cookie呈现只读页面是可以的,因为攻击者无法仅使用csrf读取内容。我认为,这是最好的折衷方案。然而,我仍然感到有点不确定,因为我记得读过一篇文章(),关于如何从CSRF的回复中窃取某些类型的数据的技术,尽管这应该是不可能的。我希望,不可能将其扩展到JavaScript结果之外,因为我们可以安全地假设它与第一个
Jeff Atwood推荐的仅使用HttpOnly的方法不同: