CSRF的第一次认识
CSRF 全名 Cross Site Request Forgery,中文名称为跨站点请求伪造。
类同于XSS一样靠攻击者自我构造恶意URL链接,不像XSS那样存在持久型,不过破坏力也很大。
浏览器cookie策略会影响CSRF的攻击效果。
浏览器持有的cookie分为两种:一种是session cookie ,又称为 临时cookie;另一种是 third-party cookie,又称为 本地cookie。
某些浏览器会限制 本地cookie 的发送,因而使CSRF攻击变的无效。
但是若CSRF攻击的目标不需要使用cookie,浏览器cookie策略也无关紧要了。
P3P头
P3P header是为了加强用户隐私而提出的标准,不过这个标准把浏览器的cookie策略打乱了。
导致了很多 本地cookie 能跨域发送,因此可能造成一定的危险性。
GET?POST?
CSRF存在在恶意的URL中,但是通过修改GET请求为POST请求的方法不能很好的过滤CSRF攻击。
例如:在一个页面中构造一个form表单,使用javascript自动提交这个表单。
<form action="http://www.a.com/register" id="register" method="POST">
<input type=text name="user" value="" />
<input type=password name"pass" value=""/>
<input type=submit name="sub" value="sub"/>
</form>
<script>
var f = document.getElementById("register");
f.inputs[0].value = "test";
f.inputs[1].value = "password";
f.submit();
</scrpt>
攻击者可以将这个页面隐藏在一个不可见的iframe窗口中,那么整个提交表单的过程对用户来说也是不可见的了。
CSRF的防御
1:验证码
2:referer check (检查请求是否来自合法的 域)
3:anti csrf token (主要方法)
Token使用原则:根据 不可预测性原则 ,通过使用 Token来防御CSRF,使用Token时,要注意Token的保密性和随机性。