2012-09-26 39 views
1

我們有一個JSF2.1.7應用,我們的IT安全中發現的問題如下JSF2 ViewStateID可以重新使用嗎?

In Browser: 
    1) Get login Page. 
    2) Post Login Page with UserName/Password & submit&JSFViewStateId_1&JSessionID_1 
    3)Successful login. 

在幾分鐘之內,如果我們做出同樣的http請求,如下面舊的ViewState和新JSession。

1) Post Login page with UserName/Password & submit&JSFViewStateId_1&JSessionID_2 
    2) Successful Login 

納悶,怎麼老視圖狀態服務器接受,當第二請求時,它應該不報告視圖過期? 服務器是否將ViewSTate和JSession ID驗證爲組合認證。

回答

0

只有在javax.faces.STATE_SAVING_METHOD設置爲client時纔有可能。 javax.faces.ViewState然後不代表引用存儲在用戶會話中的視圖狀態的唯一視圖狀態標識符,而是代表整個視圖狀態本身,以序列化的風格。會話ID不再相關。

正在測試的web應用程序顯然已啓用客戶端狀態保存。這是否是一個安全問題是第二個。當存在XSS漏洞時,只能提取視圖狀態並將其發送給惡意服務器。 JSF本身具有非常強大的內置XSS預防功能,開發人員只能在重新顯示用戶控制數據時明確使用escape="false"才能禁用該功能。即使如果有一個XSS漏洞,那麼它會可以發送會話ID沿。服務器端狀態保存不會更安全。

+0

我們沒有將avax.faces.STATE_SAVING_METHOD設置爲client。對於每個請求,視圖狀態的獲取方式不同。唯一的問題是,該視圖狀態可以與不同的JSession ID一起使用。其中escape = false被設置,在faces-config.xml> – user684434

+0

然後在測試過程中出現誤解。 – BalusC

相關問題