[问题] 不懂 CORS 之目的

楼主: nevikw39 (牧)   2021-06-25 17:16:59
各位板友好,
我是正在学习前端的新手
最近在写一个网页,需要利用爬虫的方式取得一些资料
然而,却又遭遇到 CORS 的恶梦
查一堆资料都看得头晕眼花,JSONP 已经会被 Chrome 检查 MIME Type,找到一个 proxy
在 local 都正常,推到 GitHub Pages 又喷 CORS error
虽然最终我透过 Netlify 提供的 Redirect Proxy 暂时解决我的问题
但我仍然很疑惑 CORS 的目的究竟为何??
如果是要保护服务器端的资料,应该用 API key 之类的方法,否则还是会被其他爬虫撷
取啊
如果是要保护客户端也很不合理啊,怎么是由服务器端加上 header 来保证安全,要注入
恶意程式码难道就不会加上 header 吗??
看起来整个 CORS 似乎只是为惹阻止前端爬虫而已,它到底是要干嘛啊??
还请各位大大不吝赐教,感激不尽
作者: ssccg (23)   2021-06-25 18:00:00
防止XSS攻击,浏览器端存的资料的安全保护是以origin为信任单位,不同origin的script不能互相存取在浏览器的资料然后“服务器端加上 header 来保证安全”是你搞反了吧,默认是不能存取=安全,加上header是指示浏览器放宽限制=危险这机制跟爬虫没关,爬虫只是一种script,从后端自己发没有不会动到浏览器的资料所以没关系,前端是所有XSS都不行可以理解你程式新手写个js用浏览器跑是很直观的想法,但是你要知道浏览器不是用来给你跑程式的,是给一般人上网的你可能还有一个问题是发request哪里动到资料,发request时会自动带入该origin的Cookie,接收时会收到Set-Cookie,这些Cookie就是不能让不同origin存取的资料
作者: vi000246 (Vi)   2021-06-25 18:31:00
等你当骇客的时候就会觉得cors很难搞了 好不容易找到漏洞 结果注入的恶意程式码被cors限制cors是浏览器做的限制 你用后端写爬虫就能正常爬取了
作者: ssccg (23)   2021-06-25 18:33:00
某个origin的资料,要放宽给哪些其他origin存取,当然是服务器决定啊,浏览器难道还要内建全世界网站要开放的名单?想到你可能搞错一点,nevikw39.com 存取 example.com 被挡不是保护 nevikw39.com 用到外部资源,是要保护example.com存在浏览器端的资料不会被 nevikw39.com 的网页存取所以当然由example.com的response header设定CORS规则
作者: fantania (shadowdancer)   2021-07-13 10:20:00
爬虫应该要用Selenium之类的webdriver去爬,不然会被挡
作者: ku399999   2020-01-21 08:00:00
连带两个字是多余的

Links booklink

Contact Us: admin [ a t ] ucptt.com