关于跨域限制,仅仅是浏览器的行为,和服务端无关

无风

前段时间写了个前后端分离的项目,前后端都是我一个人完成,通信都是通过接口进行的,这时候就要面对接口安全的问题,只做了个简单的基于 session 的验证。所有 api 都是通过 ajax 来进行的,心想既然有跨域限制,不允许跨域的话是不是就万事大吉了呢?跨域限制仅仅是浏览器的行为吗?服务器有跨域限制吗?

如果只是浏览器的行为,那么就能轻松绕过了,没有意义。

带着这个问题查了一些资料,讲同源策略的很多,很多地方都说这是 web 安全的基石,但是没看到哪里明确的提到这只是浏览器的行为,和服务端、http 没有关系。

于是自己做个实验咯,实验步骤如下:

  1. 在阿里云服务器上用 Go 起一个后端应用,弄一个 test 接口,不设置 Access-Control-Allow-Origin
  2. 服务器上写一个静态页面,有个按钮点击发送 ajax 请求 test 接口
  3. 本地弄一个同样的页面
  4. 本地弄一个代理服务器,转发test至阿里云服务器
  5. 分别进行如下测试:

    • 线上页面在浏览器中发请求到线上服务器
    • 本地页面在浏览器中发请求到线上服务器
    • 修改 allow-origin 为 *,本地页面在浏览器中发请求到线上服务器
    • 不设置 allow-origin,本地页面在浏览器中通过代理服务器请求接口
    • 不设置 allow-origin,使用 postman 等工具请求接口

测试结果:除了第二种情况,其他的均能进行跨域请求,结论就是跨域限制仅仅是浏览器的行为,通过代理服务器,或者其他工具发送请求就能轻松绕过。

那么,同源策略是不是没有什么卵用呢?
错,同源策略是 web 安全的基石,当然很重要了

因为:

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。
(1) Cookie、LocalStorage 和 IndexDB 无法读取。
(2) DOM 无法获得。
(3) AJAX 请求不能发送。

如果在其他域名能读 qq.com 的 cookie 那就相当于它能拿到登陆权限。

reference:
浏览器同源政策及其规避方法-阮一峰
浏览器的同源策略-mdn

阅读 5.9k

无风的内存空间
编程相关,随手记下
633 声望
54 粉丝
0 条评论
你知道吗?

633 声望
54 粉丝
文章目录
宣传栏