CSRF 跨站伪造请求,是 Web 应用程序固有的攻击手段。
利用 CSRF,可能蒙混网络应用程序的认证,盗用受害者的身份,
经第三者发送各种各样伪造的请求,造成个人隐私泄露,财产安全等,危害很大。
CSRF 攻击原理图解:
官方文档指出:CSRF is an important security issue.
防范措施一:遵循HTTP协议
HTTP 协议提供两种基本的请求方式:
GET:获取资源 POST:改变资源的状态因此,引起服务器资源改变的请求,避免使用 GET 请求。 这样可以避免下列 CSRF 攻击的手段:
< img src="http://www.foo.com/users/destroy/1" /> < a href="http://www.foo.com/users/destroy/1">Click< /a>但是,CSRF 的攻击手段不止这些,还可以模拟 POST 请求。
< a href="http://www.foo.com/" onclick=" var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = 'http://www.foo.com/orders/paid/1'; f.submit(); return false;">Click< /a> < img src="http://www.foo.com/img" onmouseover="..." />防范措施二:验证 Security Token
< meta content="authenticity_token" name="csrf-param" /> < meta content="8TBeQ52iFagSqdv+E125ucR58rEpTm385431j1vfwzI=" name="csrf-token" /> < form accept-charset="UTF-8" action="/users" method="post" novalidate="novalidate"> < input name="utf8" type="hidden" value="✓" /> < input name="authenticity_token" type="hidden" value="8TBeQ52iFagSqdv+E125ucR58rEpTm385431j1vfwzI=" />这个 security token,是由 current session 和 server-side secret 按照一定规则生成。
参考文章:
浅谈CSRF攻击方式
Rails Security Guide
2013-05-03