2017-05-12 92 views
1

我一直在試圖構建一個應用程序,該應用程序在其前端具有角度(2),並且具有Spring Restful服務以從數據庫中獲取/操作數據。現在,一直在困擾我的是如何確保安全。我已經實現了Spring Security來處理認證。Angular和Spring安全體系結構

但是,現在有一些像通過交叉原點請求完成的CSRF攻擊。服務器上的角度運行(默認爲localhost:4200)與Spring Rest服務(例如tomcat - localhost:8080)不同。當對其餘服務發出請求時,它將被視爲跨源請求。有什麼令我困惑的是,如果我能在這種情況下使用spring security提供的csrf保護。如果沒有,那麼我怎樣才能防止我的Rest服務被惡意攻擊利用?

我已經通過類似的問題: CORS issue - No 'Access-Control-Allow-Origin' header is present on the requested resource我可以看到csrf保護被禁用,CORS根據需要進行配置。 但是,這並沒有解決我的問題,如果休息服務是否是開放的攻擊或不?

P.S我很新的Web應用程序的安全配置,所以,請指出,如果我做錯了什麼或概念錯了。

回答

1

要解決您的CSRF攻擊易受攻擊的問題,您需要首先確定要使用哪種身份驗證機制(令牌庫或基於cookie)。 CSRF攻擊的關鍵依賴於利用cookie,IP地址或瀏覽器自動包含在請求中的任何其他內容來利用用戶登錄上下文的應用程序(有關CSRF和示例攻擊的更多詳細信息,請查閱this後)。例如,假設您使用的是基於cookie的身份驗證,並且您依賴於瀏覽器在隨後的Http請求中自動包含cookie(因爲cookie仍然有效,即尚未過期等),以便驗證特定用戶已發送請求。由於Cookie自動包含在瀏覽器的請求中,攻擊者可以重建後端服務器可以處理的請求,並且如果他們能夠讓網站的用戶在瀏覽器中觸發此請求,則後端服務器不會能夠詆譭請求,因爲它看起來好像是來自您的某個用戶的合法請求。

在基於令牌的身份驗證的情況下,這不是問題,因爲瀏覽器不會自動將您的身份驗證令牌包含在請求標頭中。因此,攻擊者將無法單獨依靠瀏覽器來驗證他們的假請求。
此外,CSRF攻擊只有

現在接下來的問題與跨境原則有關。現在,所有受信任的瀏覽器都強制執行此操作,因此您可以期望大多數用戶將發送符合跨源策略的請求。因此,你需要做你的後端服務器上執行下列操作之一:

  1. 看到,因爲你使用了一個backned服務器上localhost:8080運行,並且您的localhost:4200角的應用程序,我會假設你有他們運行在同一主機上。如果您打算讓它們都在生產環境中的同一主機上運行,​​那麼您可以在後端服務器中將'Access-Control-Allow-Origin'標頭設置爲'*'
    這將讓你的後端服務器接受任何來源的請求。然後,您可以使用防火牆使外部連接無法訪問端口8080
    這是一個快速修復(特別是讓事情在本地進行),但不理想,因爲單靠依靠防火牆是不可取的。
  2. 我會建議你設置Access-Control-Allow-Origin標題只接受你的Angular應用程序作爲源。因此,如果您的應用程序與後端服務器位於同一主機上,例如用於本地開發,則應將其設置爲http://localhost:4200。如果您的Angular應用程序將位於Spring服務器的不同主機上,那麼您將需要指定您的網站的域名,例如。 http://example.comAccess-Control-Allow-Origin標題(請參閱this後更清楚地解釋如何使用此標題)。

我希望這能回答你的問題。