我有一个MVC4站点,它使用AntiForgeryTokens,并且总是使用HTTPS。据我所知,只要用户会话相同,就可以重用防伪造令牌。
我担心某种攻击,有人以某种方式获取令牌并重用它,在用户不知情的情况下提交表单。
这种设置是否有真正的攻击风险?我需要考虑一些防止令牌重复使用的方法吗?
发布于 2014-08-12 09:08:31
关于防伪的一些文档:http://msdn.microsoft.com/en-us/library/dd492767(v=vs.118).aspx
从本质上说,AF令牌是一个隐藏字段,您可以将其放置在任何表单上,如下所示:
@Html.AntiForgeryToken()然后,通过装饰操作/方法,在控制器中对其进行如下验证:
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)每次在视图中调用AntiForgeryToken时,它都会生成一个新令牌,然后在控制器中验证该令牌。
这在整体安全中只占一小部分。此外,您通常会在客户端使用cookie,用于标识会话和身份验证:
.ASPXAUTH
ASP.Net_SessionId
__RequestverificationToken除此之外,还有SSL,它还添加了另一层安全和保护。
AF令牌可以很容易地被自动化工具(如JMeter )所获取,并用于将帖子发送回服务器,但是“普通用户”对此一无所知。任何试图使用此令牌的人都需要具有相同的cookie,这更难以模拟。
发布于 2014-08-12 13:01:48
每个会话应该只有一个CSRF令牌。如果会话超时,则CSRF令牌此时到期。
由于攻击者无法读取CSRF令牌(至少不存在攻击者将CSRF令牌作为会话ID cookie读取的风险),因此,除非您有一个新会话,否则不需要生成新的令牌。
我看到的唯一例外是,如果使用有效的用户会话cookie尝试表单提交,但使用不正确的CSRF令牌(即用户受到他们正在使用的另一个站点的攻击)。在这种情况下,您可能希望生成一个新的CSRF令牌,并为自己标记一个警报,以便对请求进行调查。您可能希望在第一个不正确的CSRF令牌之后生成警报(因为包含不正确CSRF令牌的请求根本不应该发生),但是您可以在n次尝试失败后刷新令牌,以减少令牌被强制使用的可能性,同时允许用户在不被拒绝服务的情况下使用您的系统(虽然在这种情况下,拒绝服务是一个小问题,因为攻击将来自他们自己的计算机)。
可以这样想--防伪令牌的唯一目的是防止CSRF。如果攻击者可以以任何方式抓住这一点,那么他们就已经有了访问权限--损害已经造成了。例如,如果您的站点上存在XSS漏洞,这就足以让某个邪恶的人攻击您的用户--这样他们就不需要CSRF攻击了。
https://stackoverflow.com/questions/25259567
复制相似问题