Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Asp.net 反CSRF饼干?_Asp.net_Security_Csrf - Fatal编程技术网

Asp.net 反CSRF饼干?

Asp.net 反CSRF饼干?,asp.net,security,csrf,Asp.net,Security,Csrf,我正在构建一个使用大量ajax的应用程序。大多数反CSRF解决方案都围绕着在viewstate中放置一些信息,并在post中处理这些数据。但是,我无法在ajax调用中访问viewstate 我计划生成一个GUID,在cookie和会话状态中插入一个令牌,在用户注销时使cookie过期,在每次请求时修改cookie令牌和会话状态,并通过将会话中的内容与客户端返回的内容进行比较,使用httpmodule来完成这项工作,在转到web服务或页面方法之前 这会使我的应用程序成为CSRF证明吗 谢谢。不。“

我正在构建一个使用大量ajax的应用程序。大多数反CSRF解决方案都围绕着在viewstate中放置一些信息,并在post中处理这些数据。但是,我无法在ajax调用中访问viewstate

我计划生成一个GUID,在cookie和会话状态中插入一个令牌,在用户注销时使cookie过期,在每次请求时修改cookie令牌和会话状态,并通过将会话中的内容与客户端返回的内容进行比较,使用httpmodule来完成这项工作,在转到web服务或页面方法之前

这会使我的应用程序成为CSRF证明吗

谢谢。

不。“抗CSRF”和“cookie”不能同时使用。正如蒂洛所简要指出的那样:

Cookie首先允许CSRF工作

这篇文章是一个很好的开端,它总结了CSRF的大部分内容:

如果Bob的银行将其身份验证信息保存在cookie中,并且cookie未过期,则Bob的浏览器尝试加载图像时将提交带有其cookie的取款单,从而授权未经Bob批准的交易

问题是浏览器总是有“有效cookie”。但是,GUID--实际上,只是--可以通过其他方式传输回服务器。。。这实际上就是它在视图状态中的状态

CSRF预防机制#1(根据维基百科):

要求在所有表单提交和副作用URL中使用用户特定的秘密令牌防止CSRF;攻击者的站点无法在其提交中放置正确的令牌

重要的是,这个秘密(希望能避免重播攻击)是发送的数据(URI或内容)的一部分,而不是通过cookie传输的

快乐编码


考虑实现这一点的一种方法:

让服务器在建立会话时生成nonce(并将其存储在会话数据中)。然后,在每个AJAX请求上,将此nonce发送回—作为URI的一部分或作为一些POST数据*

服务器应仅基于此nonce以及它是否匹配会话状态中存储的nonce来接受/拒绝请求。(会话状态可以通过cookie来维护:假设nonce是机密的,则通过不同的通道传输的nonce将阻止此CSRF。)

nonce可以通过多种方式传输到客户端,包括但不限于隐藏字段、JavaScript变量、直接链接操作,甚至cookie(只读!不用于验证!)


*当然,存在许多重叠的安全问题(和预防机制),简单的XSS可以绕过最复杂的反CSFR。也许值得考虑使用一个经过良好测试的框架…

否。从阅读开始。“如果Bob的银行将其身份验证信息保存在cookie中,并且cookie尚未过期,则Bob的浏览器尝试加载图像时将提交带有其cookie的取款单,从而在未经Bob批准的情况下授权交易。”问题是浏览器始终具有“有效cookie”。但是,GUID/nonce可以通过其他方式传输。。。这实际上就是它在viewstate中的状态。@pst+1。Cookie是允许CSRF首先工作的东西…@Thilo:好的,谢谢你的澄清:)我猜这个问题的意外目的是为了澄清和简化问题。我会避免使用Guid。它们不一定是不可预测的。使用安全的PRNG。@CodeInChaos:好的,谢谢你的提示。好的,谢谢你的反馈!所以饼干是不,不,谢谢你说清楚。目标是通过另一种方式传输信息。这篇文章建议使用头作为传输机制。有人说用户可以/确实删除标题。你对这项技术有什么看法。谢谢。我对头技术没有什么意见,只是想澄清一下:用户自己可以搞乱自己的请求头不是问题,如果攻击者可以代表用户(在他们不知情的情况下,违背他们的意愿)这么做,那就是问题了。这就是“困惑的代理”的一般问题。好吧,在我的例子中,问题是似乎没有太多的选项来保护ajax请求。