WEB安全之CSRF攻击

自作多情 提交于 2020-04-29 11:59:42
  • 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字段

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!