Web学习——任务四
复述本周任务
时间:2020.5.18——2020.5.23
内容:
- 学习CSRF(跨站请求伪造)
- 完成dvwa第三个模块CSRF
- 继续学习php以及HTML
学习CSRF(跨站请求伪造)
什么是CSRF
我的理解就是:
我给一家超市说:本周所有的账单,只要报了我的名字就记在我的账上;但是有一次我去了另一家店(恶意),这家店用某种方式知道了我的名字(cookie),然后他就去那家店报我名免费消费了。
如何实现CSRF
⭐ 贴一段百度上的一个比较形象的回答:
附链接1:CSRF攻击与防御(写得非常好)
附链接2:Cross-Site Request Forgeries
附链接3:CSRF原理简介
如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下 携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
如何检测CSRF漏洞
- 最简单的方法:抓取一个正常请求的数据包,去掉Referer字段 后再Forward,如果该提交有响应,则基本上可以确定存在CSRF漏洞。
- 工具:CSRFTester,CSRF Request Builder等。
如何防御CSRF漏洞
- 检查Referer字段
http头中的Referer字段(用以标明请求来源于哪个地址)。
在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址。
⭐ 局限性:因其完全依赖浏览器发送正确的Referer字段。虽然http协议无法保证浏览器没有安全漏洞影响到此字段;并且也存在攻击者攻击某些浏览器&#x