iT邦幫忙

1

Spring Boot防止跨域攻擊的問題

目前在測試跨域的問題,自己寫了兩個web做為測試,都是用sprong boot2.0寫的,分別是WebA(localhost)和WebB(abc.com)。
WebB的某一個網頁中塞了ajax發出跨域請求,並且是withCredentials:true的狀態,url設定指向WebA的API,該API能更改登入使用者的狀態。

1.先開瀏覽器至WebA完成登入(利用session紀錄登入狀態)
2.在到WebB的網頁,該網頁發出一個ajax跨域請求給WebA,WebA後臺更改了使用者的狀態。

問題來了,其實我在WebA是沒有設定跨域的(@CrossOrigin),WebB在發送跨域請求後,chrome的console是會顯示阻擋response的訊息的,但WebA的後台也已經更改了該使用者的狀態。

我該如何阻擋這種CSRF攻擊呢?

1 個回答

2
克理獅
iT邦新手 4 級 ‧ 2019-09-24 03:35:14
最佳解答

1.CORS只管要不要讓瀏覽器顯示,不管server side要不要執行。
可以試試另外用後端語言或postman去打API,保證連response都秀給你看

2.你的API為什麼可以直接打進去就改狀態?

3.CORS和csrf是不一樣的東西

4.有啟用Spring security去做權限控管嗎?

taro iT邦新手 5 級 ‧ 2019-09-24 19:19:57 檢舉

感謝提點,現在大概知道方向在哪了。現在才完全搞懂CSRF和CORS的差異,之前一直認為是在講同樣的事。
接下來會往Spring Security的方向去研究。

第2點是一個假設那個情境而已,實務上當然沒那麼容易拉XD

克理獅 iT邦新手 4 級 ‧ 2019-09-24 19:42:34 檢舉

Spring Security的應用情境蠻複雜的,建議先去啃一啃官方文件,再去看別人的範例。
不然大概會想說這code到底要一路「.」到哪裡去,怎麼整串比蜈蚣還長?
/images/emoticon/emoticon40.gif

我要發表回答

立即登入回答