CSRF跨站攻击
CSRF攻击会强制终端用户在当前对其进行身份验证后的Web应用程序上执行非本意的操作
CSRF攻击的着重点在伪造更改状态的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应
攻击流程
- 用户输入用户名和密码登录网站A
- 用户名密码正确网站A返回cookie,用户浏览器保存cookie
- 诱导用户访问恶意网站B,网站B存在构造好的恶意页面(隐藏表单,通过标签src属性,超链接发 起请求)
- 诱导用户点击按钮或访问构造好的恶意页面。
- 恶意页面利用用户网站A的合法cookie向网站A发送非用户本意的恶意请求
CSRF漏洞利用条件
用户成功登录网站A,并取得有效cookie 用户在未登出网站A的情况下在同浏览器下访问了恶意网站B
CSRF的防御方法
验证Referer字段:如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
添加Token验证:可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token
如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
二次验证:在转账等关键操作之前提供当前用户的密码或者验证码 用户养成良好的习惯一一不要随意点击链接和图片、及时退出长时间不使用的已登录账户、安装合适的安全防护软件
XSS和CSRF的区别
同:都可以利用用户cookie发起请求。 CSRF能做到的跨站请求伪造,XSS同样也可以实现
异: XSS是将恶意的代码插入到html页面中,当用户浏览页面时,插入的JavaScript代码会被执行,从而达到最终目的,而CSRF是一种欺骗受害者提交恶意请求的攻击,使受害者执行非本意、恶意的操作
其他角度:
- CSRF比XSS漏洞危害更高,相对XSS而言较难防御。(XSS主要打cookie,扫内网,扫端口组合其他漏 洞getshell,CSRF主要是利用用户cookie发起恶意非用户本意的请求)
- CSRF可以做到的事情,XSS都可以做到。(XSS同样可以利用打到的cookie发送请求)
- XSS有局限性,而CSRF没有局限性。(xss长度限制,CSRF无长度限制)
- XSS针对客户端,而CSRF针对服务端。(XSS是利用js勾住浏览器,CSRF是利用用户在浏览器的合法 cookie发起恶意请求)
- XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求。