CORS 访问控制备忘录

2019-08-18  本文已影响0人  abyte

关于 CORS 的基础知识在 MDN上有很详细的描述HTTP访问控制(CORS)和可能会有的隐患。CORS机制及其风险

不过有一点需要注意,跨域的请求,最终是会被目标服务器当作一个正常的请求处理,只是浏览器拦截了返回结果。
A页面里有一个ajax请求访问B服务的接口,B服务没有设置 Access-Control-Allow-Origin这个header。
查看B的 nginx 的 access_log 还是可以看到请求被正确处理,返回200状态码。

192.168.10.1 - - [18/Aug/2019:17:12:36 +0800] "GET /test HTTP/1.1" 200 40 "http://a.test/test.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"

经过测试发现:如果将设置 withCredentials 为 true,浏览器会携带上cookie请求目标服务器,服务器正常处理和相应。

<script>
    $.ajaxSetup({xhrFields: {withCredentials: true}});
    $.get('http://b.test/test',[], function (data) {
        alert(data);
    });
</script>

也就是说你可以在A页面携带上B的身份凭证数据去搞事情。除非A页面是在自己可以控制的浏览器(App 内置浏览器),那样就可以拦截B服务器返回的数据包。不过A都已经在自己的App了,想玩啥不行?

上一篇下一篇

猜你喜欢

热点阅读