2010-12-13 119 views

回答

6

JSF/Facelets在默認情況下已經轉義輸出UIOutputUIInput組件。所以只要你重新顯示用戶控制輸入<h:outputText><h:inputWhatever>,那麼XSS部分是安全的。

JSF也具有內置的防止CSRFjavax.faces.ViewState隱藏的輸入字段。在JSF 2.1之前,這只是「太容易」猜測,另請參閱JSF impl issue 812JSF spec issue 869。最近(2010年10月3日)JSF 2.1已經修復。

請注意,針對SQL injection攻擊的預防不是Web MVC框架的責任。您需要在數據層中解決該部分。如果您以正確的方式使用JPA(即,不要連接SQL字符串中的用戶控制輸入,但使用參數化查詢),那麼該部分也是安全的。

+0

@BalusC + 1感謝您的意見,我們只介紹了UIOutput和UIInput,它看起來很有前途。 – bakoyaro 2010-12-14 14:42:29

+0

@BalusC過濾器如何?由於'javax.faces.webapp.FacesServlet實現了javax.servlet.Servlet',我應該可以爲任何通過我編寫的Facelet創建的輸入和輸出過濾器編寫輸入和輸出過濾器。 – bakoyaro 2010-12-14 21:12:38

+0

JSF確實運行在Servlet API之上。你確實可以在JSF webapp上使用servlet過濾器,但是我沒有看到它們對於像XSS/CSRF/SQLI這樣的安全問題有用。他們能做的最好的事情是根據登錄用戶進行認證/授權檢查。在過濾器中消毒輸入/輸出的方式是一個糟糕的主意 - 如果您想要的話。輸出轉義(防止XSS)只能在視圖方面完成。輸入轉義(以防止SQLI)應該只在數據層完成。 – BalusC 2010-12-14 21:14:12

相關問題