【问题标题】:How to catch HttpAntiForgeryException in ASP.NET MVC如何在 ASP.NET MVC 中捕获 HttpAntiForgeryException
【发布时间】:2010-11-12 08:48:45
【问题描述】:

我在我的 ASP.NET MVC 表单中使用 AntiForgeryToken。如果我在浏览器中停用 cookie 并发送来自,我会收到以下错误消息:

所需的防伪令牌未提供或无效。

如何防止显示此消息?我更愿意将用户重定向到另一个页面。

我已激活 customErrors 并将此 HandleError 包含在我的控制器中:

[HandleError(ExceptionType=typeof(HttpAntiForgeryException), View="Index")]
public class MyController : Controller
{
...
}

HandleError 被忽略。

有人解决了吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    对我来说很好用:)

    我注意到您已将错误视图指定为“索引” - 此视图中是否可能存在仅在此错误情况下显示的错误? HandleErrorAttribute 将在不执行操作本身的情况下显示此“索引”视图 - 如果您的索引操作方法在 ViewData 中设置视图依赖的对象,则错误将无法正确处理,您将得到丑陋的黄色页面。

    如果这不能解决问题,您是否测试过其他错误的错误处理以使其正常工作?一些可能导致错误无法处理的事情:

    1. 您的 web.config 中没有自定义错误
    2. 您的视图中有错误
    3. 视图使用的母版页出错。

    【讨论】:

      【解决方案2】:

      我认为防伪令牌的意义在于阻止另一个网站代表经过身份验证的用户发出的请求。因此,如果您可以在没有 cookie 的情况下合法地访问表单,这意味着您可以在没有经过身份验证的情况下访问它,因此不需要保护它免受 CSRF 攻击。

      如果我错了,我希望有人纠正我。

      【讨论】:

      • 如果我理解正确,防伪令牌也应该保护我的页面免受机器人攻击。由于没有令牌,任何其他网页都可以调用任何控制器操作。我不确定风险有多高,但我认为安全总比抱歉好。
      猜你喜欢
      • 2023-03-16
      • 2016-12-16
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多