一篇搞b站的文章
csrf
攻击简述:
CSRF
(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF
你这可以这么理解
CSRF
攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。具体原理就不详细解释了推荐一篇文章:浅谈CSRF攻击方式
- 了解过
csrf
攻击, 我们应该明白, 所谓的csrf
攻击就是:- 你在你的常用网站登录了
- 此时被
xxx
恶意网站的连接吸引, 访问xxx
恶意网站 xxx
恶意网站的页面向的常用网站发起跨域请求- 跨域请求中携带了常用网站的cookie, 盗用了你的登录状态
csrf
思路分析:
浏览器支持的跨域请求的方式大体有两种:
cros
官方标准, 使用时需要服务端支持, 否则会有请求方法和header限制(header限制不能携带cookie),有两种请求方式这里不做过多介绍, 依然推荐一篇文章:跨域资源共享 CORS 详解,总之cros
很安全。jsonp
方式, 限制是只能使用GET请求(规范GET请求都是只读操作), body中无法携带数据。
网络上open某li某li
的csrf
防御
全局的
jsonp CSRF
防御:首先需要知道的一点是,
jsonp
方式发起的跨域请求header
中一定有referer
字段如果请求没有携带
referer
判断是不是jsonp
请求, 一般不是大概, 双重保障判断一下, 如果不是方行, 恩, 方便接口测试, 也方便了网络爬虫, 代码作者:"我是csrf防御
, 网络爬虫关我何事? " 恩, 合情合理.- 如果请求携带
referer
则检测domin
是不是允许的那些domain
, 如bilibili.com
, 完美防御jsonp
原理进行的跨域攻击. - 笔者目前并未找到b站上的
jsonp
接口, 未提供jsonp
接口依然要检测jsonp csrf
, 可见b站的安全意识很高, 这样做的好处也是可以防止不小心在GET请求接口中做了敏感的写操作而产生的web漏洞. jsonp
out.
cros
跨域- 笔者目前看到的接口都是通过
cros
简单请求的方式跨域,api getway
同样也实现了非简单方式的跨域请求 cros
的Origin
验证机制也有好好实现cros
官方的跨域规范, 安全性很好, 理所应当out.
- 笔者目前看到的接口都是通过
用户登录验证
CSRF
防御- 笔者不解的, 这段代码应该是对盗用用户登录状态的
cros
跨域请进行的防御, 而个人感觉cros
的Origin
验证机制已经很健全了呀, 双重保障?笔者知识盲区?未知的跨域攻击? unknown csrf
out.
- 笔者不解的, 这段代码应该是对盗用用户登录状态的
最后一道防御
- 良好的编码规范
crsf
out
结束
bilibili
的跨域攻击的应对做的很完善, 所以阿宅们大可放心, 在浏览b站时点开各种小连接, xx图(deprecated), 这些都是没问题哒今日的胜负:
bilibili
完胜- 引用:
- github
有疑问加站长微信联系(非本文作者))
