据我所知,Web开发人员应该创建令牌并将其放在隐藏的表单字段中以防止CSRF攻击。此外,他应该在会话中保存相同的令牌,然后,在提交表单时 - 检查令牌是否相等。
我开始质疑......是否有必要对所有形式采用这种技术?我的意思是,想象一下为登录创建的表单。如果没有CSRF保护,我看不到对网站和/或用户造成的任何伤害,因为用户没有特权(就像他登录时一样)。注册也一样......我是对的吗?
P.S。如果我错了,请向我解释这个概念。
答案 0 :(得分:6)
CSRF试图阻止的危险是当您遇到以下情况时:
有时,这是通过诱使用户在不知情的情况下发出HTTP请求,例如在图像的源属性中。
您要保护的表单是需要此权限的表单。
关于这实际上没有意义的疯狂,偶然的机会,Chris Shiflett has an awesome article on CSRF(你可能已经读过了:/)
答案 1 :(得分:5)
一般来说,您希望保护您的表单,只要其提交将导致内容/状态发生变化;是添加,删除,编辑或与外部源共享(“分享xyz!”)。
您不需要保护的表单示例是搜索框,因为它不会导致内容发生任何变化。
如果您不确定,任何会导致某些内容被保存/删除的表单(无论是否在您的网站上)都应受到保护。
如果您真的不确定只是添加令牌,则不需要花费任何安全费用。