【问题标题】:how AntiForgeryToken() works in MVC and how to retrieve value at server action method from AntiForgeryToken?AntiForgeryToken() 如何在 MVC 中工作以及如何从 AntiForgeryToken 在服务器操作方法中检索值?
【发布时间】:2013-09-25 09:35:53
【问题描述】:

我正在阅读有关 AntiForgeryToken 但不了解实际用途或重要性的信息。我看到人们用他们的形式写了一个代码,就像

@using (Html.BeginForm("Create", "Register")) 
{ 
    @Html.AntiForgeryToken()  
}

所以它做了什么......它将生成一个唯一令牌,当表单发布时,这个唯一令牌将通过,并且 cookie 将通过相同的唯一令牌值传递,两个唯一数据将在服务器端进行比较两者是否相等。如果不是,那么就会发生一些篡改。

我只是不明白其他表单字段值是否更改或篡改,那么如何确定该篡改。假设我们经常将有价值的数据存储在隐藏字段中。如果我需要保护隐藏字段的值,那么 AntiForgeryToken 如何帮助我们?

我们是否可以使用 AntiForgeryToken 将这些有价值的数据封装在其中,然后在服务器端进行比较。

谁能给我一些示例代码,我可以通过它在我的页面中放置 3 个有价值的数据,如果被篡改,则会向用户显示一条友好的消息。指导我怎么做。谢谢

【问题讨论】:

标签: asp.net-mvc-3


【解决方案1】:

AntiForgeryToken 背后的想法是防止数据从“假”源发布。使用伪造(伪造)表单的攻击者可以欺骗用户使用他们当前的会话上下文提交任何类型的数据。正如你可以想象的那样,这会造成相当大的伤害。

防止这种情况的一种方法是在您的表单上设置一个隐藏字段,其中包含存储在会话中的用户特定数据(随机的),这样坏人就无法伪造它。在这种情况下,当用户发布数据但没有用户特定令牌时,您可以将其视为恶意。

我认为你有一个误解,认为防伪令牌是关于检测发布的数据是否经过“修改”,而事实并非如此。

Here 对此进行了详细介绍。

【讨论】:

  • 我想显示一条自定义消息或将用户重定向到一个页面,此时将调用操作方法并且 AntiForgeryToken 验证检查将失败,这意味着攻击者伪造了某些东西。所以请指导我如何在操作方法结束时发现 AntiForgeryToken 验证失败。谢谢
  • @Thomas 最简单的方法是将[ValidateAntiForgeryToken] 属性添加到您的操作方法中。如果令牌是伪造的,这将引发异常。如果您想检测何时发生这种情况,您可以在 Global.asax 中捕获异常并在那里做任何您需要的事情。
猜你喜欢
  • 2015-06-25
  • 2011-06-18
  • 2012-07-28
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多