利用Referer的攻击之CSRF&盗链学习笔记
场景1
小明在电脑上登录了某银行网站,未退出登录的情况下,在同一浏览器点开了含攻击的链接,这个攻击会以小明的名义向银行发送操作命令,将小明银行账户的余额转账给小强(攻击者)。
为什么这个攻击会生效?
因为小明此时与银行的会话未断开,攻击者小强的请求是通过小明发送,银行会认为这是一个正常的请求。
这种攻击就是CSRF(Cross-site request forgery)跨站请求伪造。成立的前提是在登录状态下使用同一浏览器访问恶意网站。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。(百度百科)
如何防御CSRF攻击?
1、验证 HTTP Referer 字段
上图是当前网页请求头的Referer字段,假如我正在写作过程中,不小心点击了恶意网址,通过我的名义发布了一篇虚假广告的文章,那么这个请求头中的Referer字段就不是简书自己,而是恶意网站的地址。
所以检查请求中的Referer字段,即可判断是否真实的合法请求。
但某些旧版本的浏览器存在被利用的漏洞,可以使得攻击者将自己的Referer值修改为简书的地址,以此绕过Referer检查。
2、在请求地址中添加 token 并验证
简单的说,前文攻击者小强能够成功,是利用小明的cookie中携带的身份信息,那就除了cookie之外再检查下是不是小明本人,比如大额操作前短信验证、刷脸等,这个token类似于二次验证。(关于cookie、session、token需要另写一篇)
3、在 HTTP 头中自定义属性并验证
更简单的说,就是换个地方加token。
————————————————————————————————————
场景2
小明在网站A写文章时粘贴了从网站B复制了图片,一段时间后该图片无法显示。
实际访问小明文章时,显示的图片是调用了网站B的资源,源网站删除了图片,引用端也会无法显示。
盗链攻击就是非法调用其他网站资源,直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益(百度百科),或者消耗了其他网站资源。
通过检查Referer值,只允许来自本网站的请求访问资源,避免被盗链。
————————————————————————————————————
学习来源:
https://blog.csdn.net/xiaoxinshuaiga/article/details/80766369
https://blog.csdn.net/Flyz_boy_hss/article/details/99871190