【问题标题】:How to add integrity check (e.g. HMAC) to the ValidateAntiForgeryTokenAttribute如何向 ValidateAntiForgeryTokenAttribute 添加完整性检查(例如 HMAC)
【发布时间】:2013-12-18 21:54:36
【问题描述】:

我一直在开发一个使用 MVC AntiForgeryToken 来防止 CSRF 攻击的 ASP.NET MVC 4 Web 应用程序。最近,该应用程序被一家安全公司审计,他们声称在我们使用的 AntiForgeryToken 中发现了一个漏洞。问题是令牌没有完整性检查。可以稍微更改令牌,它仍将作为有效令牌传递。

是否可以扩展基本的 ASP.NET MVC AntiForgeryToken 使其包含完整性检查(例如 HMAC)?是否有任何现有的实现可用?还是我只需要编写自己的 CSRF 令牌实现?

【问题讨论】:

    标签: asp.net asp.net-mvc csrf data-integrity antiforgerytoken


    【解决方案1】:

    编辑:

    不明白为什么会有漏洞,因为令牌是使用 System.Web.Security.MachineKey 加密的。您可以在machineKey element中自定义要使用的算法(HMAC 是默认的验证算法)

    原文:

    我能想到的最简单的方法是通过提供 IAntiForgeryAdditionalDataProvider 将您自己的安全令牌附加到 AntiForgeryToken。

    public class UserAgentAntiForgeryAdditionalDataProvider : IAntiForgeryAdditionalDataProvider
    {
        public string GetAdditionalData(HttpContextBase context)
        {
            return GenerateToken(context);
        }
    
        public bool ValidateAdditionalData(HttpContextBase context, string additionalData)
        {
            return string.Equals(GenerateToken(context), additionalData, StringComparison.Ordinal);
        }
    
        private string GenerateToken(HttpContextBase context)
        {
            return context.Request.UserAgent; //DON'T DO THIS IN PRODUCTION
        }
    }
    

    在 Global.asax.cs 中

    AntiForgeryConfig.AdditionalDataProvider = new UserAgentAntiForgeryAdditionalDataProvider();
    

    【讨论】:

    • 感谢您的回答。这无疑是朝着正确方向迈出的一步,但我不确定如何为 AntiForgeryToken 创建完整性检查。我不应该能够访问为从中派生完整性检查数据而创建的实际令牌吗?添加额外数据可以使 AntiForgeryToken 更安全,但它似乎没有提供进行完整性检查的方法?
    • 您可以对附加数据进行完整性检查(仅)。如果附加数据无效,则 MVC 将防伪令牌视为无效。除非您实现自己的 Html.Helper.AntiForgeryToken() 和 ValidateAntiForgeryTokenAttribute,否则我看不到自定义整个令牌的方法。
    • 非常感谢您解释选项是什么并澄清问题。我也不明白为什么会有漏洞,我所有破坏 AntiForgeryToken 的尝试都导致抛出异常。尽管我没有包含完整性检查的 AntiForgeryToken 实现,但我现在有一些非常具体的内容可以回复审核我们应用程序的安全公司。
    【解决方案2】:

    您还应该看看无状态 CSRF 保护的概念。有两种标准方法可以实现这一点:加密令牌模式和双重提交 Cookie 模式。 Encrypted Token Pattern 使用 Rijndael 加密令牌,其完整性由 SHA256 哈希算法维护。

    【讨论】:

    • 好的,谢谢,当我有时间开始实施自定义令牌时,我会研究一下。现在内置的就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2011-05-16
    • 1970-01-01
    • 2011-09-22
    • 2013-03-06
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多