1

我决定尝试使用双重提交 cookie技术来尝试防止对我正在处理的站点的 XSRF 攻击。所以我在这里写下来的方式是,除了获取信息之外,所有实际执行的操作都将是帖子。获取将是……呃……获取。其次,发布的每个表单都将具有键/cookie 组合。

我的问题是,在 ASP.NET MVC Web 应用程序中实现此功能的最简单方法是什么?

不回答我自己的问题,但这是我最初的想法:

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

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

抱歉,如果这有点混乱,我在这些页面中散布着笔记,我正在尝试组织它们。其中一部分是为了弄清楚我对这个 XSRF 安全性的设计。

4

3 回答 3

2

在 ASP.NET MVC 中使用对此的内置支持

于 2008-11-14T20:16:25.720 回答
0

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

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

我不希望向客户端发送大量 cookie,因此当您为每个用户拥有一个唯一的服务器端跟踪器时(例如,说数据库中的会话表..),您可以使用它。少一个 cookie —— 只需在用户表中发送一个唯一的哈希值。

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

可能的?还是我没有考虑清楚..?

于 2009-05-04T09:08:24.840 回答
0

一种获得关注的方法是加密令牌模式,它由一个名为 ARMOR 的框架实现。这里的前提是您既不需要 Session 也不需要 cookie 来维护 CSRF 保护。加密令牌模式利用 Rijndael 加密令牌,其完整性由 SHA256 散列算法维护。

ARMOR 框架很容易在 MVC 和 Web API 应用程序中实现。完整的演练在这里

于 2013-12-18T14:07:56.317 回答