# CORS/XSS/CSRF ## Cross Origin Request Sharing (CORS)跨來源資源請求 CORS 是一種瀏覽器技術,用於允許 Web 應用從不同的來源請求資源。它解決了瀏覽器的同源政策限制,使得瀏覽器能夠安全地執行跨域請求。 我們讓瀏覽器對不同網域 (Domain)、通訊協定 (Protocol) 或是 Port 送出請求 這就叫 Cross Origin HTTP Reuest (跨來源HTTP請求) 例如:我在A網站,以GoodByeLetter為例,向B網站的綠界科技打API(發出請求),這就是一種CORS。 基於安全性考量,這樣的請求會受到限制。 Same Origin Policy (同源政策) FetchAPI 與 XMLHttpRequest 都遵守同源政策。 關於CORS的規範,會要求瀏覽器在送出CORS前,先送出一個 options 請求,讓對方server 預檢 (Preflight)。 只有以下幾種方法是不需要預檢的,被稱為簡單請求(Simple requests)。 1. Get 2. Head 3. Post 僅允許 Content-Type 1. application/x-www-form-urlencoded 2. multipart/form-data 3. text/plain 當然,對方server也可以設定收到 預檢(Preflight) 時允許哪些IP/host跨來源請求。 Ex:Express.js 的CORS設定可透過cors這個npm套件。 ## Cross Site Scripting (XSS) 跨站腳本 縮寫為了不與CSS搞混,所以把Cross縮寫為X 攻擊者透過 1. 特定連結,被稱為Refected Link 2. 當網頁已經被置入永久的scripts 目標通常是將有儲存用戶資訊的部分(Cookie或Session)回傳給攻擊者,或是將受害者導到特定的網站。 ## Cross Site Request Forgery (CSRF) 跨站請求偽造 又稱為One-click attack、Session riding Ex:如果我的網站`http://exampleMe.com`上有個按鈕,是刪除文章用,點擊時送出這樣的請求 `GET /delete/article/:article_id`。 那麼如果在別的網站上`http://exampleB.com` 有個按鈕,href 為`http://exampleMe.com/delete/article/:article_id` , 這樣的話,只要能取得瀏覽器內的cookie或session資訊,就能在別的網站偽造同樣的請求,刪除我自己網站上的文章。