首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AntiForgeryToken重复使用

AntiForgeryToken重复使用
EN

Stack Overflow用户
提问于 2014-08-12 08:31:18
回答 2查看 1.8K关注 0票数 3

我有一个MVC4站点,它使用AntiForgeryTokens,并且总是使用HTTPS。据我所知,只要用户会话相同,就可以重用防伪造令牌。

我担心某种攻击,有人以某种方式获取令牌并重用它,在用户不知情的情况下提交表单。

这种设置是否有真正的攻击风险?我需要考虑一些防止令牌重复使用的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 09:08:31

关于防伪的一些文档:http://msdn.microsoft.com/en-us/library/dd492767(v=vs.118).aspx

从本质上说,AF令牌是一个隐藏字段,您可以将其放置在任何表单上,如下所示:

代码语言:javascript
复制
    @Html.AntiForgeryToken()

然后,通过装饰操作/方法,在控制器中对其进行如下验证:

代码语言:javascript
复制
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)

每次在视图中调用AntiForgeryToken时,它都会生成一个新令牌,然后在控制器中验证该令牌。

这在整体安全中只占一小部分。此外,您通常会在客户端使用cookie,用于标识会话和身份验证:

代码语言:javascript
复制
.ASPXAUTH
ASP.Net_SessionId
__RequestverificationToken

除此之外,还有SSL,它还添加了另一层安全和保护。

AF令牌可以很容易地被自动化工具(如JMeter )所获取,并用于将帖子发送回服务器,但是“普通用户”对此一无所知。任何试图使用此令牌的人都需要具有相同的cookie,这更难以模拟。

票数 0
EN

Stack Overflow用户

发布于 2014-08-12 13:01:48

每个会话应该只有一个CSRF令牌。如果会话超时,则CSRF令牌此时到期。

由于攻击者无法读取CSRF令牌(至少不存在攻击者将CSRF令牌作为会话ID cookie读取的风险),因此,除非您有一个新会话,否则不需要生成新的令牌。

我看到的唯一例外是,如果使用有效的用户会话cookie尝试表单提交,但使用不正确的CSRF令牌(即用户受到他们正在使用的另一个站点的攻击)。在这种情况下,您可能希望生成一个新的CSRF令牌,并为自己标记一个警报,以便对请求进行调查。您可能希望在第一个不正确的CSRF令牌之后生成警报(因为包含不正确CSRF令牌的请求根本不应该发生),但是您可以在n次尝试失败后刷新令牌,以减少令牌被强制使用的可能性,同时允许用户在不被拒绝服务的情况下使用您的系统(虽然在这种情况下,拒绝服务是一个小问题,因为攻击将来自他们自己的计算机)。

可以这样想--防伪令牌的唯一目的是防止CSRF。如果攻击者可以以任何方式抓住这一点,那么他们就已经有了访问权限--损害已经造成了。例如,如果您的站点上存在XSS漏洞,这就足以让某个邪恶的人攻击您的用户--这样他们就不需要CSRF攻击了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25259567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档