[問題] 不懂 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