何时需要使用令牌保护表单(CSRF 攻击)?
Posted
技术标签:
【中文标题】何时需要使用令牌保护表单(CSRF 攻击)?【英文标题】:When its Necessary to Protect Forms with Token (CSRF attacks)? 【发布时间】:2011-09-02 00:06:42 【问题描述】:据我所知,Web 开发人员应该创建令牌并将其放在表单的隐藏字段中以防止 CSRF 攻击。此外,他应该在会话中保存相同的令牌,然后在提交表单时检查令牌是否相等。
我开始质疑...是否有必要对所有形式都使用这种技术?我的意思是,想象一下为登录而创建的表单。如果没有 CSRF 保护,我看不到对站点和/或用户造成的任何伤害,因为用户没有特权(就像他登录时一样)。注册也是如此……我说的对吗?
附:如果我错了,请解释一下这个概念。
【问题讨论】:
也可用于反垃圾邮件措施。 “分享此页面”链接可能会被垃圾邮件发送者用力敲打,但添加令牌将帮助您阻止它,直到垃圾邮件发送者意识到他们需要处理令牌,而不仅仅是触发 50 亿个 POST 请求。 【参考方案1】:CSRF 试图防止的危险是当您遇到以下情况时:
-
用户已登录或其他,并具有一定级别的权限
坏人在未经用户许可的情况下利用该权限
有时这是通过欺骗用户在不知情的情况下发出 HTTP 请求,例如在图像的源属性中。
您要保护的表单是需要此权限的表单。
在这实际上没有意义的疯狂,偶然的机会中,Chris Shiflett has an awesome article on CSRF(您很可能已经阅读过:/)
【讨论】:
问题明确指出“用户正在登录”,所以 1. 不适用,并且说附加不适用。 可以使用 CSRF 令牌保护登录表单,以防止用户被欺骗以作为攻击者登录。根据站点的不同,攻击者随后可能有权访问用户的搜索历史或添加的信用卡信息。 Source【参考方案2】:一般来说,您希望在提交会导致内容/状态更改的任何时候保护您的表单;无论是添加、删除、编辑还是与外部资源共享(“在 xyz 上共享!”)。
您不需要保护的表单示例是搜索框,因为它不会导致内容发生任何变化。
如果您不确定,任何会导致某些内容被保存/删除的表单(无论它是否在您的网站上)都应该受到保护。
如果您真的不确定只需添加令牌,就不会花费任何安全费用。
【讨论】:
以上是关于何时需要使用令牌保护表单(CSRF 攻击)?的主要内容,如果未能解决你的问题,请参考以下文章