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