面試的時候被問到CORS安全性問題,沒答上來,想請教下大家。
CORS在伺服器端設定了Access-Control-Allow-Origin,不設定為*,不是只有指定的域才能發起請求嗎,否則就被瀏覽器攔截了呀,有看到說http頭可以偽造,但手動設定Origin也會被瀏覽器阻止,請問CORS的漏洞到底在哪裡?有什麼解決方案?謝謝
高洛峰2017-05-19 10:44:05
我反而覺得CORS相交於JSONP是較安全的跨域方式,也是標準的跨域方式。
Access-Control-Allow-Origin就是一個允許請求的域白名單,只有是這個域裡有的,伺服器才會統一跨域請求,如果合理的設定白名單,反而可以避免CSRF攻擊。
我覺得這個問題可能是要求你從如果Access-Control-Allow-Origin為*所面臨的問題來考慮。
設定成*的一般是公共的API,為了避免被頻繁請求或DDOS,一般會多出密鑰驗證的步驟,並且限制請求頻率和次數。
還有就是CORS雖然預設不傳Cookie,但Access-Control-Allow-Credentials設為true就能允許,這樣也可能會有CSRF攻擊的風險。