2014-10-28 118 views
-1

我在瀏覽器中運行spring web應用程序。我登錄到我的帳戶,並使用URL更新一些值說localhost:80/update/name。在控制器端,我檢查principal==null是否不重定向到登錄頁面。Spring安全:限制其他Web應用程序訪問

現在,而登錄到此應用程序。我在同一瀏覽器中打開其他Web應用程序頁面,並通過ajax調用執行相同的更新URL localhost:80/update/name,它正在更新該值。我如何避免這種安全威脅。

我如何確保Application1更新網址將僅由application1請求執行?無論應用程序2是否在同一瀏覽器中,都不應允許應用程序2執行應用程序1的更新請求?

回答

3

你爲什麼感到驚訝?您已記錄,因此瀏覽器有一個有效的會話cookie。您要求瀏覽器向主機發送請求(無論是在第一個窗口還是任何其他窗口,都是一樣的):它會向請求發送所有相關的cookie,包括會話cookie和適當的任何其他安全cookie。服務器收到包含有效會話cookie的請求,該請求包含有效的記錄用戶,即使它控制來自相同地址的IP:all都有效,並且它繼續處理請求。

如果您的客戶端計算機上有不同的瀏覽器,並且您從此不相關的瀏覽器打開連接,則服務器應拒絕您的請求,因爲瀏覽器不會顯示有效的cookie。

+0

如何避免在同一瀏覽器,因爲我從APP2訪問APP1網址 – manish 2014-10-28 20:26:47

+0

是啊我知道它在同一個瀏覽器會話中的COS將被啓用,直到註銷。但我的問題是如何防止這種訪問來自其他應用程序的其他應用程序請求 – manish 2014-10-28 20:40:04

+0

如果您想防止跨站點請求僞造,spring security 3.2可以直接使用。它可以自動將'_csrf'令牌添加到任何表單並在表單提交中對其進行控制。對任何其他應用程序來說,隨機生成的令牌應該是未知的。 Spring Security參考手冊中有很好的例子。但它不完全是你所描述的;-) – 2014-10-28 20:53:29

0

您描述了跨站請求僞造攻擊。通常,當使用POST方法時,會添加隱藏標記以防止它出現。我假設您正在使用GET方法 - 最好不要使用GET方法更改任何狀態。

+0

這裏沒有什麼跨網站。 – 2014-10-28 20:30:08

1

您正在描述跨站請求僞造的變體,您應該啓用Spring Security CSRF保護。您可以read about it in the reference manual.

即使這兩個應用程序在同一臺服務器上,它們也會得到不同的CSRF令牌,這將保護您的情況。