【发布时间】:2018-11-30 00:24:27
【问题描述】:
我有一个带有 POST 操作的通用 MVC 控制器。该控制器用于多个应用程序使用的通用项目中。我们正在尝试在交错发布过程中添加 CSRF 保护,我们通过 Anti Forgery Token 为每个应用程序一次添加一个 CSRF 保护。
如果我将验证属性 [ValidateAntiForgeryToken] 添加到此控制器,但仅在其中 1 个应用程序的视图中包含 Anti Forgery Token 隐藏表单元素,这将对其他应用程序造成严重破坏。如何根据条件应用此属性。这可能吗?这是否需要手动完成,类似于下面的代码?有没有更好的办法?
[HttpPost]
public ActionResult GenericSection(string nextController, string nextAction, FormCollection form)
{
// Validate anti-forgery token if applicable
if (SessionHandler.CurrentSection.IncludeAntiForgeryToken)
{
try
{
AntiForgery.Validate();
}
catch (Exception ex)
{
// Log error and throw exception
}
}
// If successful continue on and do logic
}
【问题讨论】:
-
你可以做的是,根据一些配置跳过防伪令牌的验证。您共享的代码是否获得了预期的行为?
-
@ChetanRanpariya 是的,上面的代码产生了正确的结果,但是,我希望有更好的方法仍然可以使用注释,从而从控制器方法中删除大量内容。
标签: c# asp.net-mvc csrf antiforgerytoken