目录
CSRF漏洞介绍
CSRF:跨站请求伪造,也称为One Click Attack 缩写为CSRF
XSS与CSRF区别
XSS 跨站脚本攻击 利用站点内的信任用户盗取cookie
CSRF 跨站请求伪造攻击 通过伪装成信任用户请求信任的网站
CSRF漏洞原理
利用目标用户的合法身份,以目标用户的名义执行某些非法操作
例如 简单转账案例
初始化链接:http://www.xxx.com/pay.php?user=xx&monkey=10000
CSRF漏洞代码分析
<?php
//会话验证
$user =$_GET["user"];
$money=$_GET["monkey"];
//转账操作
?>
构造恶意链接:http://www/xxx.com/pay.php?user=恶意用户&monkey=100000
我们把这个链接发给受害人,受害人点击后,就会把受害人的钱发给我们。
GET型CSRF代码分析
GET型 CSRF利用
构造GET型URL,提交username和password参数,从而新建对应的用户名和密码。
http://127.0.0.1/csrf_test/get_csrf/user.php?username=admin111&password=132251231
POST型CSRF代码分析
POST型 CSRF利用
设置表单用于提交。例如:<input type="type" name="username" value="1111">
CSRF漏洞利用方法
1.链接利用
<a href="http://127.0.0.1/csrf/csrf.php?username=admin&password=admin123">csrf</a>
2.iframe利用
iframe标签内容将在页面加载过程中自动进行加载,src指向的位置就是页面请求的位置
<iframe src="http://127.0.0.1/csrf/csrf.php?username=admin&password=admin123" style="display:none"/>
注意:可以设置iframe的 style="display:none",以此来不显示iframe加载的内容
3.img标签利用
<img src="http://127.0.0.1/csrf/csrf.php?username=admin&password=admin123" />
4.CSS-backgroud利用
可以利用CSS中 backgroud样式中的url来加载远程机器上的内容,从而对url中的内容发送http请求
列如:
body{
backgroud:#00f00 url("http://127.0.0.1/csrf/csrf.php?username=admin&password=admin123") no-repeat fixed top;
}
CSRF漏洞防御措施
1.验证码防御
验证码防御被认为是对抗CSRF最简单的而且有效的防御方法
CSRF在用户不知情的情况下完成对应操作,而验证码强制用户与应用程序交互,才能最终完成操作。通常情况下,验证码能很好的遏制CSRF
出于用户体验考虑,不可能每一操作都加入验证码。所以验证码只作为辅助手段,不能作为防御CSRF的主要解决方案。
验证码防御也可以被认为是二次验证
2.token防御
CSRF本质原因:重要操作的所有参数都是被恶意攻击者猜测道的。
那么防御措施就是生成一个随机且不被轻易猜测的参数。目前大多数防御都采取token。
3.referer cherk 防御
Referer check主要用于防止盗链。同理也可用于检查请求是否来自合法的"源"。
比如用户修改密码,一定是在登陆系统之后进行操作。所以在修改提交表单的时候,一定会从系统后台提交。携带referer头。如果referer不是当前系统的域,那么极有可能遭受CSRF
缺陷:服务器并非任何时候都可以取到Referer,例如HTTPS跳转到HTTP