2012-07-16 83 views
2

我是JSF的新手,所以我對某些標籤的知識並不太好。 我想知道的是如何安全地傳遞參數在這種情況下:JSF f:事件可以安全地傳遞參數嗎?

<f:event listener="#{backBean.myMethod(**param**)}" type="preRenderView"/> 

因爲,我要通過這個「參數」,用戶無法接取該信息(改變這個值意味着一個安全缺陷,並且這不會發生)。所以我問這個知道是否可以使用這個事件來破解這個代碼(傳遞另一個參數)?

謝謝!

回答

5

如果param值不能由最終用戶控制,那麼你很安全。就那麼簡單。您直接或間接(通過JSF或DB)從HttpServletRequest提取的任何內容均在完整控制的最終用戶。

因此,如果您例如硬編碼,

<f:event listener="#{backBean.myMethod('foo')}" type="preRenderView"/> 

那麼你是安全的。

但是,如果你傳遞一個用戶控制的請求參數,

<f:event listener="#{backBean.myMethod(param.foo)}" type="preRenderView"/> 

那麼你就只有安全的,如果你驗證其在服務器端的價值。

+0

感謝您的幫助。所以在我的情況下,我將通過參數作爲您發佈的第一種情況。只是爲了更多地理解,這整個標籤,用戶無法訪問它,沒有任何信息(考慮'foo'的情況)?這怎麼可能?這個代碼(f:event ...)只在服務器端訪問? – sampert 2012-07-16 20:25:06

+0

它完全在服務器端執行。我認爲,如果您意識到webbrowser根本沒有檢索到JSF源代碼,那麼它會有所幫助。它只檢索其生成的HTML輸出。右鍵單擊webbrowser中的JSF頁面,然後選擇*查看源代碼*以自己查看。如果您通過學習基本的HTTP,HTML和Servlet教程瞭解HTTP,HTML和Servlet的工作方式,這也會有所幫助。最終用戶只能控制通過HTTP響應(例如,JavaScript)檢索到的任何內容,並且已通過HTTP請求(標頭,參數和主體)發送。 – BalusC 2012-07-16 20:28:19

+0

這真的很有幫助。非常感謝您的幫助。 – sampert 2012-07-16 20:39:55