2
我沉浸在Struts中,我開始學習JSF 2.0。我能否繼續使用Struts中的工具來減少攻擊媒介,還是有新的攻擊媒介需要編碼?JSF的安全性問題是什麼?
我沉浸在Struts中,我開始學習JSF 2.0。我能否繼續使用Struts中的工具來減少攻擊媒介,還是有新的攻擊媒介需要編碼?JSF的安全性問題是什麼?
JSF/Facelets在默認情況下已經轉義輸出UIOutput
和UIInput
組件。所以只要你重新顯示用戶控制輸入<h:outputText>
和<h:inputWhatever>
,那麼XSS部分是安全的。
JSF也具有內置的防止CSRFjavax.faces.ViewState
隱藏的輸入字段。在JSF 2.1之前,這只是「太容易」猜測,另請參閱JSF impl issue 812和JSF spec issue 869。最近(2010年10月3日)JSF 2.1已經修復。
請注意,針對SQL injection攻擊的預防不是Web MVC框架的責任。您需要在數據層中解決該部分。如果您以正確的方式使用JPA(即,不要連接SQL字符串中的用戶控制輸入,但使用參數化查詢),那麼該部分也是安全的。
@BalusC + 1感謝您的意見,我們只介紹了UIOutput和UIInput,它看起來很有前途。 – bakoyaro 2010-12-14 14:42:29
@BalusC過濾器如何?由於'javax.faces.webapp.FacesServlet實現了javax.servlet.Servlet',我應該可以爲任何通過我編寫的Facelet創建的輸入和輸出過濾器編寫輸入和輸出過濾器。 – bakoyaro 2010-12-14 21:12:38
JSF確實運行在Servlet API之上。你確實可以在JSF webapp上使用servlet過濾器,但是我沒有看到它們對於像XSS/CSRF/SQLI這樣的安全問題有用。他們能做的最好的事情是根據登錄用戶進行認證/授權檢查。在過濾器中消毒輸入/輸出的方式是一個糟糕的主意 - 如果您想要的話。輸出轉義(防止XSS)只能在視圖方面完成。輸入轉義(以防止SQLI)應該只在數據層完成。 – BalusC 2010-12-14 21:14:12