使用POST自动实现ValidateAntiForgeryToken吗?

时间:2017-07-25 14:03:52

标签: c# asp.net-core asp.net-core-mvc

我正在阅读POST被认为是安全的并且没有GET,我们应该在每个控制器的每个动作中实现[ValidateAntiForgeryToken]。

问题是:当我使用[POST]时,是否需要使用[ValidateAntiForgeryToken]数据注释?

1 个答案:

答案 0 :(得分:3)

默认情况下是关闭的 这是有充分理由的。并非每个POST都必须来自一个表单(尤其是因为您的问题被标记为asp.net-core

您应该使用[ValidateAntiForgeryToken]

修饰您的控制器操作
[ValidateAntiForgeryToken]
public IActionResult Post(Model model)
{
    // ... etc
}

如果您正在使用表单标记帮助程序,它会自动将防伪标记添加到<form>标记中。

生成的标记类似于:

<form action="/MyController" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="fhTFfhkKNsdfhYazFtN6c4YbZAmsEwG0srqlUqqloi/OIJOIJoijojhishg" />
    <!-- rest of form here -->
</form>

注意:您还可以使用表单助手标记手动启用/禁用__RequestVerificationToken生成:

<form
 asp-controller="MyController" 
 asp-action="MyAction" 
 asp-antiforgery="false" 
 method="post">