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