Asp.net mvc 使用双提交cookie在ASP.NET MVC中实现XSRF安全的想法

Asp.net mvc 使用双提交cookie在ASP.NET MVC中实现XSRF安全的想法,asp.net-mvc,security,csrf,Asp.net Mvc,Security,Csrf,我已经决定尝试使用该技术来阻止我正在工作的站点上的XSRF攻击。所以我在这里写下的方式是,除了获取信息之外,所有实际执行的操作都是POST。得到将是…嗯…得到。其次,每个POST的表单都有key/cookie组合 我的问题是,在ASP.NET MVC web应用程序中实现这一点最简单的方法是什么 不是回答我自己的问题,但以下是我的初步想法: 现在,我的控制器都继承自一个基本控制器,所以我的第一个想法是重写OnActionExecuted方法来检查所需表单字段的存在性,如果找到了它,则根据cook

我已经决定尝试使用该技术来阻止我正在工作的站点上的XSRF攻击。所以我在这里写下的方式是,除了获取信息之外,所有实际执行的操作都是POST。得到将是…嗯…得到。其次,每个POST的表单都有key/cookie组合

我的问题是,在ASP.NET MVC web应用程序中实现这一点最简单的方法是什么

不是回答我自己的问题,但以下是我的初步想法:

现在,我的控制器都继承自一个基本控制器,所以我的第一个想法是重写OnActionExecuted方法来检查所需表单字段的存在性,如果找到了它,则根据cookie验证它,并允许post继续或将其踢到某个错误页面

对于表单部分,我正在考虑生成自己的html扩展方法,如。。。它重载了所有与BeginForm相同的方法(以防我需要它们),但自动生成伪随机密钥和cookie,并将cookie和表单字段自动放置在表单中(如果是POST!)


对不起,如果这是一种混乱,我有笔记分散在这些网页,我正试图组织他们。其中一部分是要弄清楚我的XSRF安全设计。

使用。

内置的ASP.NET MVC XSRF保护有一个缺点:它会向客户端发送另一个cookie

同时,
Html.AntiForgeryToken()
给访问者一个名为uu RequestVerificationToken的cookie,其值与上面显示的随机隐藏值相同

我不希望向客户端发送大量cookie,因此,当您为每个用户都有一个唯一的服务器端跟踪器(比如,数据库中的会话表…)时,您可以使用它。少一个cookie——只需发送用户表中某个内容的唯一散列

但是还有一些匿名用户没有用户帐户,因此没有服务器端跟踪。在这种情况下,我想知道您是否能够以某种方式获取已发送给每个用户的现有ASP.NET_SessionId cookie(启用会话时)。。而不是创建另一个Cookie


可能吗?还是我没有仔细考虑过这一点?

一种获得吸引力的方法是加密令牌模式,由一个名为ARMOR的框架实现。这里的前提是,您不需要会话或cookie来维护CSRF保护。利用Rijndael加密令牌,其完整性由SHA256哈希算法维护


ARMOR框架易于在MVC和Web API应用程序中实现。完整演练。

如果我没有弄错的话,AntiForgeryToken在Futures程序集中,而不是在发行版中。我还以为期货大会还没有准备好生产。因此,我必须实现我自己的解决方案,我不知道为什么人们应该重新发明XSRF属性,而不是在将来使用XSRF属性。它似乎做了必要的事情,我更倾向于相信它,而不是一个非专家(比如我自己)炮制的东西。我们正在对这样的安全软件采取非常谨慎的方法。源代码是可用的。我会检查代码,并在未来试用。如果您发现其中有任何缺陷,请告诉我们。同时,我们将对其进行内部审查。我不会写你自己的,除非我们的有缺陷。