谈谈跨域这点事儿

跨域

什么是跨域

参考这篇博客:
https://www.jianshu.com/p/f880878c1398

提取下关键词
跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。
这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

跨域引起的安全问题CSRF攻击
那么问题又来了

什么是CSRF攻击

参考这篇博客:
https://blog.csdn.net/ppxin/article/details/94717173#1.%20%E4%BB%80%E4%B9%88%E6%98%AF%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%EF%BC%88Cross-domain%20Request%EF%BC%89

梳理一下:
我们先引入一个概念浏览器的同源策略

同源策略只针对于浏览器端,浏览器一旦检测到请求的结果的域名不一致后,会堵塞请求结果。这里注意,跨域请求是可以发去的,但是请求响应response被浏览器堵塞了。

测试了一下:
谈谈跨域这点事儿
请求发送到服务器并且服务器执行了相应的cgi,但是浏览器无法获取响应的数据。

那么问题又来了,如果恶意网站使用这个方法伪造一个转账请求,是不是就可以得逞了呢?答案是否定的。因为同源策略限制了不同源脚本之间的访问,也就是说恶意js脚本无法获取用户在银行网站的Cookie(网站身份验证的token会短期存放在Session中或较长期存放在Cookie中),而实际上在JS跨域请求时,浏览器既不会带跨域网站的cookie,也不会带上恶意网站的cookie。

所以说同源策略还是规避了一定的风险的,但是真的就万无一失了嘛?

答案当然是否定的

由于同源策略的限制,跨域的ajax请求不会带上cookie,然而 script / iframe / img等标签却是支持跨域的这几个标签相当危险啊,所以在请求的时候是会带上cookie的。

模拟一个“被转账”的场景

小明在一个淘宝中登录,此时cookie中有了token,同时小明又在浏览不健康网站 unhealthy.com,而这个unhealthy.com中有一个< iframe >标签的src指向淘宝的转账请求,并且如果淘宝的转账请求没有做第二次加密措施的话(当然这是不可能的),小明的钱就会被转走了

这就是CSRF攻击的典型示例

实现跨域

虽然在安全层面上同源限制是必要的,但有时同源策略会对我们的合理用途造成影响,为了避免开发的应用受到限制,有多种方式可以绕开同源策略,下面注重介绍的是经常使用的 JSONP, CORS 方法。

上一篇:phpokCms从CSRF到getShell


下一篇:Django框架之十 中间件 csrf跨站请求伪造