Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
C# 在哪里存储CSRF令牌-ViewState或Session?_C#_Asp.net_Webforms_Csrf - Fatal编程技术网

C# 在哪里存储CSRF令牌-ViewState或Session?

C# 在哪里存储CSRF令牌-ViewState或Session?,c#,asp.net,webforms,csrf,C#,Asp.net,Webforms,Csrf,我一直在研究该漏洞以及如何在.NET应用程序中修复它 根据我的研究,这里是我需要做的伪算法: 检查请求cookie中的CSRF令牌请求,如果不存在,则创建一个 在服务器上。 创建令牌后,将令牌添加到 要发送回客户端的响应cookie。客户端发送此CSRF 所有未来请求cookie的令牌。 当服务器收到一个请求并且 查看CSRF cookie,服务器根据其存储的CSRF进行验证 标记值。 当它匹配时,如果值 不匹配,然后停止请求。 我的问题是在第3步,我使用ASP.NETWeb表单;我可以将此CS

我一直在研究该漏洞以及如何在.NET应用程序中修复它

根据我的研究,这里是我需要做的伪算法:

检查请求cookie中的CSRF令牌请求,如果不存在,则创建一个 在服务器上。 创建令牌后,将令牌添加到 要发送回客户端的响应cookie。客户端发送此CSRF 所有未来请求cookie的令牌。 当服务器收到一个请求并且 查看CSRF cookie,服务器根据其存储的CSRF进行验证 标记值。 当它匹配时,如果值 不匹配,然后停止请求。 我的问题是在第3步,我使用ASP.NETWeb表单;我可以将此CSRF令牌存储在会话或ViewState中

我不想使用ViewState,因为应用程序中的所有页面都必须支持EnableViewState=true。否则,每次回拨后都会删除ViewState内容

在这种情况下我可以使用会话吗?如果我使用Session而不是ViewState,这会影响修复吗?

那么您将采用这种技术,每个用户会话使用一个令牌

使用ASP.NET会话存储来保存CSRF令牌是没有问题的,基于攻击者无法访问它的简单假设,这不会以任何方式损害您的解决方案。尽管如此,正如中所指出的,使用cookies将CSRF令牌发送到服务器是有缺陷的,可以将令牌嵌入HTML表单,或者使用该技术

这就是说,我建议您看看具有内置令牌生成、HTML嵌入和验证方法的。从安全角度来看,实施自己的解决方案从来都不是一个好主意,而应该选择成熟、可信的解决方案


还要确保使用HTTPS来防止您的令牌在

中被劫持。我不认为在没有来自客户端的其他信息的情况下验证cookie将提供保护。。。你可能想回顾一下……阿列克谢,如果我弄错了,请随时纠正我,但这不包括在步骤1和2中吗?服务器生成一个csrf令牌,以cookie的形式将其发送回客户端,客户端在所有后续请求中使用cookie。ASP.NET Web表单中内置此令牌。它存储在一个隐藏的字段中。我不知道-我自己发明或验证安全措施并不是我做过的事情,只是完全不属于我的领域,所以当人们试图这样做时,我总是担心,并始终坚持我代码中的推荐做法。您可能会通过或类似的搜索找到一些讨论。请注意,cookie也会在来自其他来源的请求中发送,因此cookie中的csrf令牌不会提供任何针对csrf的保护,除非与客户端发送的值(但不是cookie中的值)进行比较,请参阅double posting。在尝试使用自定义解决方案解决问题之前,请先阅读并理解问题。或者只使用下面提到的防伪药。谢谢托马斯,回答我最初的问题,我会按照加博、异教徒和你的建议使用防伪药。