Angular9 HTTP級別漏洞

2020-07-08 14:41 更新

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

跨站請求偽造(XSRF)

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

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

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

如果 "example-bank.com" 服務器缺乏 XSRF 保護,就無法辨識請求是從應用程序發(fā)來的合法請求還是從 "evil.com" 來的假請求。

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

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

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

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

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

跨站腳本包含(XSSI)

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

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

Angular 的 HttpClient 庫會識別這種約定,并在進一步解析之前,自動把字符串 )]},\n 從所有響應中去掉。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號