在ASP.NET MVC1.0中,有一个用于处理跨站点请求伪造安全问题的新功能:
<%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc
}
我发现在html表单中生成的令牌在每次呈现新表单时都会发生变化。
我想知道这些令牌是如何生成的?当使用某些软件扫描此站点时,它会报告另一个安全问题:会话已修复。为什么?由于令牌一直在变化,这个问题是怎么来的呢?
还有另一个功能,那就是antiForgeryToken
的"salt“,但我真的知道这是用来做什么的,即使我们不使用"salt”来生成令牌,令牌也会一直在变化,那么为什么要有这个功能呢?
发布于 2009-09-10 00:11:23
您已经问了一些不相关的问题:
这是用来(假设)验证每个请求是有效的。因此,考虑到有人试图提供指向页面?x=1
的链接,如果令牌没有同时传递,请求将被拒绝。此外,它(可以)防止相同项目的重复张贴。如果你点击两次'post‘,令牌可能会改变(每次请求),这种情况将通过如下方式检测到:
Session["nextToken"] = token;
WriteToken(token);
...
if( !Request["nextToken"] == Session["nextToken"] ){
...
}
// note: order in code is slightly different, you must take the token
// before regenerating it, obviously
我认为这个术语(它所保护的攻击)现在被称为"CSRF“(跨站点请求伪造)。
https://stackoverflow.com/questions/1402770
复制相似问题