问个脑洞问题,跨域是浏览器的安全行为,如果有个黑客浏览器不拦截这个同源限制,直接放行,业务层是否可以接收到任意非同源的接口数据
问题点在于
- 谁来监督浏览器的这个安全策略的正确性
- 服务端如何识别得到浏览器作弊
其实,现在大多数浏览器都不是严格限制同源的,开发扩展就可以绕过。
比如 油猴脚本
,就提供了一个增强的 XHR 方法可以忽视同源策略,不过油猴有自身的权限管理当发起跨域时会提示用户。
再比如,你在 Chrome 商店直接搜索 CORS
,就可以找到扩展来忽视浏览器的同源策略。
(实现原理就是在响应头上加上允许 CORS 的 header ,来欺骗浏览器)
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
5 回答910 阅读
3 回答2.2k 阅读✓ 已解决
5 回答1.3k 阅读✓ 已解决
3 回答2.2k 阅读
那浏览器为什么要有同源限制呢?
那就要弄明白,浏览器的同源策略解决了什么安全问题。
同源策略隔离了不同源的 Cookie,Storage,DOM 树等的操作范围,似乎这些都无可厚非,如果这些东西都不加以隔离,那 Web 就大乱了。你读不到我家的 cookie,我哪怕用 iframe 嵌套你的网站也拿不到你内部的按钮或输入框。
还有一条是,JS 发送的网络请求也同样受同源策略约束。这一条限制的本质还是 cookie 造成的
。HTTP 本身是无状态的,但是因为 cookie 的原因,浏览器和网站之间的会话是有状态的。虽然你不能进我家,但是你家的遥控器(XHR)却能在我家开着电视的情况下(另一个网站的会话存在)换我的台(替用户在另一个网站做操作)?
跨域资源请求也不止 XHR 请求,图片,CSS,Script 都可以发出跨域请求。逻辑上,图片,css,script 都可以做到 “给别人家电视换台” ,所以他们也都受跨域资源共享的策略限制。
所以我们可以看到,同源策略解决的是非用户意愿的请求造成的安全问题。
而这个初衷,肯定管不了非要禁用浏览器同源限制的用户,抑或是自己用工具来模拟发请求的用户。你所说的黑客浏览器如果是用户自己安装的,那和他自己用工具模拟请求是一回事,你再折腾也只能折腾你自己的浏览器,那上面都是登录的你自己的用户。
如果说黑客浏览器是你从别的地方不小心下载的,别人就是想要黑你,好家伙,种点什么后门不好要选“禁用同源策略”这种蹩脚的地方埋坑。再则,这是杀毒软件的事了。
如果你说的是那种第三方浏览器谁来监督?那只能是用户自己了。你愿意相信这个浏览器,那就用。至于服务端,还是那句话,浏览器限制不限制非同源请求,跟服务端本身的安全没有关系。