Angular9 HTTP級(jí)別漏洞

2020-07-08 14:41 更新

Angular 內(nèi)置了一些支持來(lái)防范兩個(gè)常見的 HTTP 漏洞:跨站請(qǐng)求偽造(XSRF)和跨站腳本包含(XSSI)。 這兩個(gè)漏洞主要在服務(wù)器端防范,但是 Angular 也自帶了一些輔助特性,可以讓客戶端的集成變得更容易。

跨站請(qǐng)求偽造(XSRF)

在跨站請(qǐng)求偽造(XSRF 或 CSFR)中,攻擊者欺騙用戶,讓他們?cè)L問一個(gè)假冒頁(yè)面(例如 "evil.com"), 該頁(yè)面帶有惡意代碼,秘密的向你的應(yīng)用程序服務(wù)器發(fā)送惡意請(qǐng)求(例如 "example-bank.com")。

假設(shè)用戶已經(jīng)在 "example-bank.com" 登錄。用戶打開一個(gè)郵件,點(diǎn)擊里面的鏈接,在新頁(yè)面中打開 "evil.com"。

該 "evil.com" 頁(yè)面立刻發(fā)送惡意請(qǐng)求到 "example-bank.com"。這個(gè)請(qǐng)求可能是從用戶賬戶轉(zhuǎn)賬到攻擊者的賬戶。 與該請(qǐng)求一起,瀏覽器自動(dòng)發(fā)出 "example-bank.com" 的 cookie

如果 "example-bank.com" 服務(wù)器缺乏 XSRF 保護(hù),就無(wú)法辨識(shí)請(qǐng)求是從應(yīng)用程序發(fā)來(lái)的合法請(qǐng)求還是從 "evil.com" 來(lái)的假請(qǐng)求。

為了防止這種情況,你必須確保每個(gè)用戶的請(qǐng)求都是從你自己的應(yīng)用中發(fā)出的,而不是從另一個(gè)網(wǎng)站發(fā)出的。 客戶端和服務(wù)器必須合作來(lái)抵擋這種攻擊。

常見的反 XSRF 技術(shù)是服務(wù)器隨機(jī)生成一個(gè)用戶認(rèn)證令牌到 cookie 中。 客戶端代碼獲取這個(gè) cookie,并用它為接下來(lái)所有的請(qǐng)求添加自定義請(qǐng)求頁(yè)頭。 服務(wù)器比較收到的 cookie 值與請(qǐng)求頁(yè)頭的值,如果它們不匹配,便拒絕請(qǐng)求。

這個(gè)技術(shù)之所以有效,是因?yàn)樗袨g覽器都實(shí)現(xiàn)了同源策略。只有設(shè)置 cookie 的網(wǎng)站的代碼可以訪問該站的 cookie,并為該站的請(qǐng)求設(shè)置自定義頁(yè)頭。 這就是說,只有你的應(yīng)用程序可以獲取這個(gè) cookie 令牌和設(shè)置自定義頁(yè)頭。"evil.com" 的惡意代碼不能。

Angular 的 HttpClient 對(duì)這項(xiàng)技術(shù)的客戶端部分提供了內(nèi)置的支持要了解更多信息,參見 HttpClient 部分。

可到 "開放式 Web 應(yīng)用程序安全項(xiàng)目 (OWASP) " 深入了解 CSRF,參見 Cross-Site Request Forgery (CSRF)Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet。

跨站腳本包含(XSSI)

跨站腳本包含,也被稱為 Json 漏洞,它可以允許一個(gè)攻擊者的網(wǎng)站從 JSON API 讀取數(shù)據(jù)。這種攻擊發(fā)生在老的瀏覽器上, 它重寫原生 JavaScript 對(duì)象的構(gòu)造函數(shù),然后使用 <script> 標(biāo)簽包含一個(gè) API 的 URL。

只有在返回的 JSON 能像 JavaScript 一樣可以被執(zhí)行時(shí),這種攻擊才會(huì)生效。所以服務(wù)端會(huì)約定給所有 JSON 響應(yīng)體加上前綴 )]},\n,來(lái)把它們標(biāo)記為不可執(zhí)行的, 以防范這種攻擊。

Angular 的 HttpClient 庫(kù)會(huì)識(shí)別這種約定,并在進(jìn)一步解析之前,自動(dòng)把字符串 )]},\n 從所有響應(yīng)中去掉。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)