作者nevikw39 (▎#如诗的韵律™♪)
看板Web_Design
标题[问题] 不懂 CORS 之目的
时间Fri Jun 25 17:16:59 2021
各位板友好,
我是正在学习前端的新手
最近在写一个网页,需要利用爬虫的方式取得一些资料
然而,却又遭遇到 CORS 的恶梦
查一堆资料都看得头晕眼花,JSONP 已经会被 Chrome 检查 MIME Type,找到一个 proxy
在 local 都正常,推到 GitHub Pages 又喷 CORS error
虽然最终我透过 Netlify 提供的 Redirect Proxy 暂时解决我的问题
但我仍然很疑惑 CORS 的目的究竟为何??
如果是要保护伺服器端的资料,应该用 API key 之类的方法,否则还是会被其他爬虫撷
取啊
如果是要保护客户端也很不合理啊,怎麽是由伺服器端加上 header 来保证安全,要注入
恶意程式码难道就不会加上 header 吗??
看起来整个 CORS 似乎只是为惹阻止前端爬虫而已,它到底是要干嘛啊??
还请各位大大不吝赐教,感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.240.165.72 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1624612621.A.E53.html
1F:→ ssccg: 防止XSS攻击,浏览器端存的资料的安全保护是以origin为信任 06/25 18:00
2F:→ ssccg: 单位,不同origin的script不能互相存取在浏览器的资料 06/25 18:01
3F:→ ssccg: 然後「伺服器端加上 header 来保证安全」是你搞反了吧,预 06/25 18:02
4F:→ ssccg: 设是不能存取=安全,加上header是指示浏览器放宽限制=危险 06/25 18:04
5F:→ ssccg: 这机制跟爬虫没关,爬虫只是一种script,从後端自己发没有 06/25 18:06
6F:→ ssccg: 不会动到浏览器的资料所以没关系,前端是所有XSS都不行 06/25 18:09
7F:→ ssccg: 可以理解你程式新手写个js用浏览器跑是很直观的想法,但是 06/25 18:10
8F:→ ssccg: 你要知道浏览器不是用来给你跑程式的,是给一般人上网的 06/25 18:11
还是不懂怎麽是伺服器端放宽限制,浏览器就可以存取??我感觉应该由浏览器来决定外部
资源是否可以被信任
而且我只是要 fetch JSON 而已,我没有要执行它阿
※ 编辑: nevikw39 (123.240.165.72 台湾), 06/25/2021 18:23:54
9F:→ ssccg: 你可能还有一个问题是发request哪里动到资料,发request时 06/25 18:18
10F:→ ssccg: 会自动带入该origin的Cookie,接收时会收到Set-Cookie,这 06/25 18:19
11F:→ ssccg: 些Cookie就是不能让不同origin存取的资料 06/25 18:20
12F:推 vi000246: 等你当骇客的时候就会觉得cors很难搞了 好不容易找到漏 06/25 18:31
13F:→ vi000246: 洞 结果注入的恶意程式码被cors限制 06/25 18:31
14F:→ vi000246: cors是浏览器做的限制 你用後端写爬虫就能正常爬取了 06/25 18:32
CORS 就让我超头痛,资安领域看起来真不简单
15F:→ ssccg: 某个origin的资料,要放宽给哪些其他origin存取,当然是伺 06/25 18:33
16F:→ ssccg: 服器决定啊,浏览器难道还要内建全世界网站要开放的名单? 06/25 18:34
17F:→ ssccg: 想到你可能搞错一点,nevikw39.com 存取 example.com 被挡 06/25 18:49
18F:→ ssccg: 不是保护 nevikw39.com 用到外部资源,是要保护example.com 06/25 18:51
19F:→ ssccg: 存在浏览器端的资料不会被 nevikw39.com 的网页存取 06/25 18:52
所以是 CORS 的目的其实是要防止某个网页资源的 cookie, storage 被其他网页载入??
结果连带使得其他网页不能取得某网页资源??
我现在这样理解正确吗
※ 编辑: nevikw39 (123.240.165.72 台湾), 06/25/2021 18:57:33
20F:→ ssccg: 所以当然由example.com的response header设定CORS规则 06/25 18:52
我大概想通惹
比如今天我的浏览器有登入 Google, Facebook 等服务,如果没有 CORS 那麽所有网页都可
以帮我发文之类的,那就可怕惹
※ 编辑: nevikw39 (123.240.165.72 台湾), 06/25/2021 19:02:51
21F:推 fantania: 爬虫应该要用Selenium之类的webdriver去爬,不然会被挡 07/13 10:20
22F:→ ku399999: 连带两个字是多余的 01/21 08:00