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