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

前段时间写了个先后端分离的项目,先后端都是我一我的完成,通讯都是经过接口进行的,这时候就要面对接口安全的问题,api没法使用laravel框架提供的csrf-token等安全措施,我只作了个简单的基于session的验证。个人全部api都是经过ajax来进行的,心想既然有跨域限制,不容许跨域的话是否是就万事大吉了呢?跨域限制仅仅是浏览器的行为吗?服务器有跨域限制吗?html

(此处有误,可使用csrf-token,可是在发起post请求前必须获取到cookie中的token,将其加入header中,能够加在单页的入口html里,或者来一次get请求)laravel

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

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

因而本身作个实验咯,实验步骤以下:后端

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

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

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

那么,同源策略是否是没有什么卵用呢?
错,同源策略是web安全的基石,固然很重要了浏览器

由于:安全

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

若是在其余域名能读qq.com的cookie那就至关于它能拿到登录权限服务器

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

相关文章
相关标签/搜索