簡體   English   中英

處理交叉原點的 Angular 2 csrf

[英]Handling Angular 2 csrf for cross origins

下面是我們應用程序的架構。

  1. Web 界面[客戶端]是獨立的 Angular 2 應用程序[domain.com]
  2. 持有客戶端憑據的[代理] [Web 界面機密] [domain2.com]
  3. 具有身份驗證服務器[domain3.com][API]本身

申請流程如下:

  1. 用戶將他的憑據用戶名+密碼輸入[客戶端]登錄頁面,然后將其發送到[代理]
  2. 然后代理會將憑據附加到請求並將其轉發到[API]
  3. [API]將能夠在驗證用戶憑據后獲取訪問+刷新令牌並將其返回給[代理]
  4. [代理]將響應與標頭[Set-Cookie:XSRF-TOKEN] 一起返回
  5. [client]然后應該能夠讀取[XSRF-TOKEN]並將它與每個請求一起作為[X-XSRF-TOKEN]標頭發送。

除了第 5 步之外,在身份驗證服務器、代理和客戶端上一切都按預期工作:

Angular 應該能夠根據文檔自動處理這個問題

{ provide: XSRFStrategy, useValue: new CookieXSRFStrategy('XSRF-TOKEN', 'X-CSRF-TOKEN')}

其中 angular 將能夠獲取[XSRF-TOKEN] cookie 的值並創建[X-CSRF-TOKEN]標頭以及我們通過應用程序發出的每個請求。

雖然 & 當我使用不同的來源構建架構時,angular 無法從另一個來源讀取 cookie。

我面臨的這種方法的問題是,由於服務器在不同的域中,我無法通過 XSRFStrategy 提供程序讀取 cookie。 有沒有辦法讀取那個 cookie 的值?

如果不是,那么當前的架構是錯誤的,我需要在同一個域中構建[client][proxy] ,我避免了這種方法,因為我需要將表示層與任何后端代碼分開。

所以,我的問題是如何針對這種情況實施 csrf 保護?

在您的端口中,您提到了“訪問+刷新令牌”,這聽起來像是您在使用 OAuth。 在跨域場景中,CSRF 通常根本不是問題。 如果您的客戶端需要發送任何類型的 HTTP Header 進行身份驗證,您可以安全地禁用 CSRF。

CSRF 攻擊會使您的瀏覽器發送為 [API] 域存儲的 cookie,並且通過一些黑客攻擊,攻擊者還可能發送“X-Requested-With: XMLHttpRequest”。 但是,如果您的 API 還需要“授權:不記名...”令牌,您可以放棄整個 CSRF 的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM