關(guān)于Web安全

CSRF攻擊

主要攻擊對象是Cookie中保有用戶狀態(tài)的情況,如用Cookie保存SessionID或JWT
這樣在另一個網(wǎng)站中嵌入被攻擊網(wǎng)站的url,就可以在用戶不知情的情況下代替該用戶向被攻擊網(wǎng)站發(fā)送請求。

原因

瀏覽器在發(fā)送請求時,會自動發(fā)送Cookie

防御方法

方法1: 客戶端在每次http請求時,附帶與服務(wù)端約定好的其他參數(shù),可以放在header里,因為瀏覽器不會自動做這個操作,所以就防止了CSRF攻擊。簡單來說就是服務(wù)端在校驗請求時,不單純基于Cookie,還要基于一個Cookie外的附加信息。

方法2: 【不建議使用】不在Cookie中保存用戶狀態(tài),比如將JWT保存在客戶端內(nèi)存或LocalStorage里。因為沒有使用Cookie,所以自然就不會有CSRF的問題,但這個會帶來新的問題——XSS攻擊。因為不在Cookie中的話,如果代碼被侵入會非常容易取得用戶狀態(tài)。而利用Cookie的 HttpOnly可以有效的保護Cookie。

XSS

利用在被攻擊網(wǎng)站侵入的腳本,獲得想要得到的內(nèi)容,發(fā)給黑客網(wǎng)站并保存。
如獲取當前用戶的Cookie信息,就可以冒充該用戶向服務(wù)器發(fā)送請求。

原因

被攻擊網(wǎng)站有缺口可以執(zhí)行嵌入的代碼

防御方法

首先應(yīng)該保證前端代碼的健壯性,不會執(zhí)行嵌入的代碼。
但這個不是這里想討論的重點,這里主要是想保護Cookie或者說是用戶狀態(tài),所以防御的方法是上文已經(jīng)提到的設(shè)置Cookie為HttpOnly。
這個屬性是可以對每個Cookie的屬性分別設(shè)置的,所以只要把SessionID或者JWT這種敏感的信息設(shè)置成HttpOnly就可以了。

補充說明

以上兩點,都屬于在客戶端進行攻擊,保證了以上兩點,并不代表網(wǎng)站就安全了,因為除了在客戶端攻擊以外,還可以在網(wǎng)絡(luò)上監(jiān)聽報文。抓取到了報文后,一樣可以冒充用戶發(fā)送請求。
所以,為了報文的安全,要采用Https進行通信。
這樣JWT或者SessionID就不會被截獲了。

順便說個概念:
加密方式分為信道加密和內(nèi)容加密。
Https屬于信道加密。類似密碼的加密或者JWT里面對某些內(nèi)容的加密,屬于內(nèi)容加密。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容