CodeQL 文档

缺少跨站请求伪造令牌验证

ID: cs/web/missing-token-validation
Kind: problem
Security severity: 8.8
Severity: error
Precision: high
Tags:
   - security
   - external/cwe/cwe-352
Query suites:
   - csharp-code-scanning.qls
   - csharp-security-extended.qls
   - csharp-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

使用令牌来防止跨站请求伪造 (CSRF) 的 Web 应用程序应该对所有 Http POST 请求验证令牌。

尽管登录和身份验证方法不易受到传统的 CSRF 攻击,但它们仍然需要使用令牌或其他缓解措施进行保护。这是因为攻击者可以利用未受保护的登录页面,使用攻击者控制的帐户强制登录。然后使用此帐户向网站发出后续请求,而用户没有意识到这一点。这可能导致用户将私人信息与攻击者控制的帐户相关联。

建议

应该为此方法添加适当的属性,以确保在调用此操作方法时验证防伪令牌。如果使用 MVC 提供的防伪框架,则这将是 [ValidateAntiForgeryToken] 属性。

或者,您可以考虑包含一个全局过滤器,将令牌验证应用于所有 POST 请求。

示例

在以下示例中,ASP.NET MVC Controller 正在使用 [ValidateAntiForgeryToken] 属性来缓解 CSRF 攻击。它已正确应用于 UpdateDetails 方法。但是,此属性尚未应用于 Login 方法。应该通过添加此属性来修复此问题。

using System.Web.Mvc;

public class HomeController : Controller
{
    // BAD: Anti forgery token has been forgotten
    [HttpPost]
    public ActionResult Login()
    {
        return View();
    }

    // GOOD: Anti forgery token is validated
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult UpdateDetails()
    {
        return View();
    }
}

参考

  • ©2025GitHub 公司
  • 条款
  • 隐私