2013-10-03 18 views
1

在我當前的Play 2應用程序中,登錄會話在5分鐘後超時。當用戶點擊應用程序中的任何鏈接時,它們將被重定向到登錄頁面。認證成功後,他們被重定向到主頁面。我是否使用此重定向方法暴露任何漏洞? Play Framework 2

我已經實現了一個系統,用戶被重定向到他們在重定向到登錄頁面之前嘗試訪問的頁面。

系統工作原理如下:當會話過期的用戶單擊內部鏈接時,Deadbolt會確定他們未登錄並將其重定向到登錄頁面。在重定向之前,它從請求頭中抓取目標url並將其存儲在會話中。用戶在下一頁填寫登錄表單後,將詳細信息提交給認證操作。如果認證成功,則操作檢查會話中是否存在目標url;如果是,則清除會話中的項目並重定向到目標網址,如果不是,則重定向到主頁面。

目標網址在一段時間內以字符串形式存在,並按此方式輸入到play.mvc.Results.redirect(String url)方法中。

我想知道這是否會打開任何潛在的攻擊媒介到我的應用程序?

回答

2

由於您在會話中存儲URL,因此該URL應該是安全的,因爲該URL必須首先對您的應用程序有效。

但是,可能有一種方法可能導致用戶在會話中存儲無效URL並重定向用戶,但它必須來自同一臺計算機,否則攻擊者必須有另一臺計算機上的fixate a session的機制:

  1. 攻擊者在您的網站上設置主機文件條目,指向www.evil.com。
  2. 攻擊者使用www.evil.com域名和他們自己的憑證登錄到您的網站。
  3. 攻擊者等待會話過期。
  4. 攻擊者點擊一個內部鏈接,導致URL http://www.evil.com/link被存儲在你的會話變量中。
  5. 攻擊者註銷並刪除主機條目。
  6. 另一個用戶使用同一個會話登錄並且用戶被重定向到rouge鏈接。

如果用戶在同一臺​​計算機上登錄,那麼攻擊者必須編輯從www.evil.comwww.yourwebsite.com的cookie域。如果在不同的計算機上,那麼攻擊者必須以某種方式修復會話(可能存在您網站中的另一個漏洞,例如會話ID在任何時候都以明文傳遞的方式具有可預測的令牌)。

如何鎖定您的應用程序:

  1. 確保您的網站是唯一的必然www.yourwebsite.com - 這將停止在撞擊你的網站相同的IP指向主機文件條目。
  2. 在存儲URL之前驗證URL - 拒絕任何指向應用程序未知域名的絕對URL,或僅存儲相關部分(確保此代碼不易受任何可輸入到地址欄中的字符串操作的影響並仍然會被打到你的應用程序 - 例如,如果用戶追加一個URL來查詢字符串或輸入任何其他意外的輸入)。
  3. 將重定向URL存儲在查詢字符串中,並在登錄/註銷時使會話無效以防止會話固定。這次它應該在重定向點上進行驗證,因爲它現在是一個客戶端變量 - 你應該確保它重定向到你期望的域名,或者它肯定是一個相對URL。
  4. 使用會話ID的secure cookie以確保它不通過HTTP傳輸。
相關問題