-
CSRF介绍
CSRF攻击的全称是跨站请求伪造(cross site request forgery),是一种对网站的恶意利用,CSRF是通过伪装来自受信用户的请求来利用受信的网站,CSRF可以利用你的身份向受信网站发送恶意请求。
-
CSRF的攻击原理
很多情况下,恶意站点很可能是一个存在其它漏洞(如XSS)的被很多人访问的受信站点,这样普通用户可以在不知不觉的情况下成为受害者。
-
CSRF的防御
1.尽量使用POST
CET请求太容易拿来做CSRF攻击了,只要在页面上构造一个<img/>,如<img src="http://www.xxx.com?a=1&b=2">就可以了,所以最好使用POST请求,当然POST请求也不是万无一失的,攻击者可以伪造一个form表单,如
<form id="form1" action="http://www.xxx.com" metdod="POST" display="none">
<input type="text" name="a" value="1"/>
<input type="text" name="b" value="2"/>
</form>
<script>
var form = document.forms('form1');
form.submit();
</script>
这样的form表单会增加暴露的可能性。
2.将cookie设置成HttpOnly
CSRF攻击很大程度上利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序如(javascript)将读取不到cookie信息,避免了攻击者伪造cookie的情况出现。
JAVA的ServeletApi里设置HttpOnly方式如下:
response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly");
3.通过Referer识别
服务端通过比较referer的值来判断请求是否合法
JAVA的ServeletApi里获取referer的方式如下:
String referer = request.getHeader("Referer");
4.用token
抵御CSRF攻击的关键在于:在请求中放入攻击者不能伪造的信息,并且这些信息不存在于cookie中,我们可以在每次请求中在Http的Header中放入token字段
来源:oschina
链接:https://my.oschina.net/u/3242075/blog/4258014