深入理解跨域与跨域攻击CSRF

此文适合了解跨域与CSRF攻击,但又好像似懂非懂的童鞋阅读,对于没有了解过跨域或者跨域攻击的童鞋可以先去了解跨域跟CSRF 再回来看

先看问题
1:为何浏览器要有同源策略,限制跨域?
2:同源策略有什么限制?
3:浏览器既然有同源策略,为何还允许JSONP 或者COSF解决跨域?
4:浏览器已经限制跨域为何还会有csrf?
5:scrf防御核心思想是啥?

1:为何浏览器要有同源策略,限制跨域?

答1:浏览器没有同源策略 那csrf攻击将会轻而易举,网站cookie随手可取,任何网站将变得不安全
eg:用户登录完银行网站,这时去访问其他网站,其他网站可以直接伪造请求将用户的银行钱转走;(如果没有同源策略这时会自动携带用户刚刚登录银行cookie)

2:同源策略有什么限制?
答2:浏览器同源策略主要限制:
a:跨域不允许ajax 访问后的后续操作,直接报跨域错误No ‘Access-Control-Allow-Origin’ header is present on the requested resource (这里请求是已经发出去的,就是说服务器是有收到请求,只是浏览器限制获得请求后的操作,不允许处理跨域数据)

b:跨域不允许携带cookie,不管是标签< scrip> 方式还是 ajax 请求方式 都是不允许携带cookie的,上面的ajax服务器是可以收到请求,但是是没有任何cookie的

c:< img>标签跨域请求图片会污染canvas,不允许canvas 输出,常用 html2canvas 一款html转图片的插件,原html里的图片跨域则最终生成图片会失败

3:浏览器既然有同源策略,为何还允许JSONP 或者COSF解决跨域?
答3:JSONP 或者COSF解决跨域 都需要后端配合,并且COSF 只有后台配置白名单才能使用cookie,不能使用cookie 是不能造成跨域攻击,通过这样的方式将网站是否能跨域,哪些域能跨交给各自网站去判断(比如银行网站只要不设置COSF请求头头是不能被跨域的)

4:浏览器已经限制跨域为何还会有csrf?
答4:上面已经说到浏览器已经限制跨域的cookie使用,这只是针对ajax 或者< scrip>访问的,下面的情况都可以正常使用cookie
a:直接通过windo.location.href=xxx 重定向跨域
b: 通过< form> 表单跨域提交 ,不论post 或者get
c:通过< ifram> 打开跨域连接

所以同源策略没有完全限制跨域攻击的可能,要完全限制只能要求网页不能跳外链或者任何外链都不能带cookie,这样做成本会很重会严重影响网站功能开发

5:scrf防御核心思想是啥?
答5:跨域攻击防御(简单的说就是怎么判断访问是从自己的网站或者app 发出的)核心思想:判断发出请求的网站来源;
主要实现如下:
a:验证HTTP Referer
HTTP Referer 即是打开当下链接的页面的域名(网页是从哪个页面链接过来的);
跨域攻击只能直接跳转或者 < form>提交,正常情况是不能伪造Referer的 服务端只要获取到Referer 校验是否合法链接即可,当然这是不能百分百保证的,Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞

b:通过自定义token
网站每次进入一个页面都必须由后端生成一个token 通过预编译(php 模板) 或者请求头方式传给前端,前端每次请求都要带上上一次请求的返回的token,token 可由后端加密,这个有点像 referer 只是这个referer 是我们自己定义的

猜你喜欢

转载自blog.csdn.net/lqb3732842/article/details/106790680