W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
跨站請(qǐng)求偽造 (XSRF 或 CSRF)是一個(gè)攻擊技術(shù),它能讓攻擊者假冒一個(gè)已認(rèn)證的用戶在你的網(wǎng)站上執(zhí)行未知的操作。HttpClient
支持一種通用的機(jī)制來(lái)防范 XSRF 攻擊。當(dāng)執(zhí)行 HTTP 請(qǐng)求時(shí),一個(gè)攔截器會(huì)從 cookie
中讀取 XSRF 令牌(默認(rèn)名字為 XSRF-TOKEN),并且把它設(shè)置為一個(gè) HTTP 頭 X-XSRF-TOKEN,由于只有運(yùn)行在你自己的域名下的代碼才能讀取這個(gè) cookie
,因此后端可以確認(rèn)這個(gè) HTTP 請(qǐng)求真的來(lái)自你的客戶端應(yīng)用,而不是攻擊者。
默認(rèn)情況下,攔截器會(huì)在所有的修改型請(qǐng)求中(比如 POST 等)把這個(gè)請(qǐng)求頭發(fā)送給使用相對(duì) URL 的請(qǐng)求。但不會(huì)在 GET/HEAD
請(qǐng)求中發(fā)送,也不會(huì)發(fā)送給使用絕對(duì) URL
的請(qǐng)求。
要獲得這種優(yōu)點(diǎn),你的服務(wù)器需要在頁(yè)面加載或首個(gè) GET
請(qǐng)求中把一個(gè)名叫 XSRF-TOKEN
的令牌寫入可被 JavaScript 讀到的會(huì)話 cookie
中。 而在后續(xù)的請(qǐng)求中,服務(wù)器可以驗(yàn)證這個(gè) cookie
是否與 HTTP 頭 X-XSRF-TOKEN 的值一致,以確保只有運(yùn)行在你自己域名下的代碼才能發(fā)起這個(gè)請(qǐng)求。這個(gè)令牌必須對(duì)每個(gè)用戶都是唯一的,并且必須能被服務(wù)器驗(yàn)證,因此不能由客戶端自己生成令牌。把這個(gè)令牌設(shè)置為你的站點(diǎn)認(rèn)證信息并且加了鹽(salt
)的摘要,以提升安全性。
為了防止多個(gè) Angular 應(yīng)用共享同一個(gè)域名或子域時(shí)出現(xiàn)沖突,要給每個(gè)應(yīng)用分配一個(gè)唯一的 cookie
名稱。
注:
HttpClient
支持的只是 XSRF 防護(hù)方案的客戶端這一半。 你的后端服務(wù)必須配置為給頁(yè)面設(shè)置cookie
,并且要驗(yàn)證請(qǐng)求頭,以確保全都是合法的請(qǐng)求。如果不這么做,就會(huì)導(dǎo)致 Angular 的默認(rèn)防護(hù)措施失效。
如果你的后端服務(wù)中對(duì) XSRF 令牌的 cookie
或 頭使用了不一樣的名字,就要使用 HttpClientXsrfModule.withConfig()
來(lái)覆蓋掉默認(rèn)值。
imports: [
HttpClientModule,
HttpClientXsrfModule.withOptions({
cookieName: 'My-Xsrf-Cookie',
headerName: 'My-Xsrf-Header',
}),
],
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: