| 属性 | 值 |
|---|---|
| 规则 ID | CA5395 |
| 标题 | 缺少操作方法的 HttpVerb 属性 |
| 类别 | 安全性 |
| 修复是导致破坏性更改还是非破坏性更改 | 非中断 |
| 在 .NET 10 中默认启用 | 否 |
| 适用的语言 | C# 和 Visual Basic |
原因
未为操作方法显式指定 HTTP 请求的类型。
规则说明
创建、编辑或以其它方式修改数据等所有操作方法都需要使用防伪特性来保护,以避免受跨网站请求伪造攻击的影响。 执行 GET 操作应是没有副作用且不会修改持久数据的安全操作。
如何解决违规
使用 HttpVerb 属性标记操作方法。
何时禁止显示警告
在以下情况下,可安全地禁止显示此规则的警告:
- 你确认在操作方法中没有发生任何修改操作。 或者,它根本就不是操作方法。
- 采用除使用防伪造令牌属性之外的其他解决方案来缓解 CSRF 漏洞。 有关详细信息,请参阅在 ASP.NET Core 中预防跨网站请求伪造 (XSRF/CSRF) 攻击。
抑制警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA5395
// The code that's violating the rule is on this line.
#pragma warning restore CA5395
若要对文件、文件夹或项目禁用该规则,请在none中将其严重性设置为 。
[*.{cs,vb}]
dotnet_diagnostic.CA5395.severity = none
有关详细信息,请参阅如何禁止显示代码分析警告。
伪代码示例
违规
using Microsoft.AspNetCore.Mvc;
[ValidateAntiForgeryToken]
class BlahController : Controller
{
}
class ExampleController : Controller
{
public IActionResult ExampleAction()
{
return null;
}
}
解决方案
using Microsoft.AspNetCore.Mvc;
[ValidateAntiForgeryToken]
class BlahController : Controller
{
}
class ExampleController : Controller
{
[HttpGet]
public IActionResult ExampleAction()
{
return null;
}
}