關(guān)于Web安全

CSRF攻擊

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

原因

瀏覽器在發(fā)送請(qǐng)求時(shí),會(huì)自動(dòng)發(fā)送Cookie

防御方法

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

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

XSS

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

原因

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

防御方法

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

補(bǔ)充說明

以上兩點(diǎn),都屬于在客戶端進(jìn)行攻擊,保證了以上兩點(diǎn),并不代表網(wǎng)站就安全了,因?yàn)槌嗽诳蛻舳斯粢酝猓€可以在網(wǎng)絡(luò)上監(jiān)聽報(bào)文。抓取到了報(bào)文后,一樣可以冒充用戶發(fā)送請(qǐng)求。
所以,為了報(bào)文的安全,要采用Https進(jìn)行通信。
這樣JWT或者SessionID就不會(huì)被截獲了。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容