2014-11-17 27 views
8

我很困惑。 我看到JSF 2.0具有隱含的CSRF保護:根據文章http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html我們應該在以下元素與JSF頁面的列表添加到faces-config.xml文件 How JSF 2.0 prevents CSRF是否應將<protected-views>用於JSF 2.2 CSRF保護?

在另一邊。

<protected-views> 
    <url-pattern>/csrf_protected_page.xhtml</url-pattern> 
</protected-views> 

應該將<protected-views>用於JSF 2.2 CSRF保護嗎?

回答

12

我很困惑。 我看到JSF 2.0具有隱含的CSRF保護: How JSF 2.0 prevents CSRF

這種隱性保護僅POST請求(即與<h:form>頁)。


另一方面根據文章http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html我們應該在以下元素與JSF頁面的列表添加到faces-config.xml文件。

<protected-views> 
    <url-pattern>/csrf_protected_page.xhtml</url-pattern> 
</protected-views> 

這種保護也將是對GET請求有效(即網頁與<f:viewAction>,這也是新的,因爲JSF 2.2)。每當您使用<h:link><h:button>爲這些頁面創建GET鏈接/按鈕時,帶有自動生成的標記值的新GET請求參數javax.faces.Token將被附加到生成的HTML輸出中的URL中,並且當涉及的頁面在<protected-views>中聲明。


應該<protected-views>用於JSF 2.2 CSRF保護?

僅在您想要CSRF保護的<f:viewAction>的頁面上。如果您沒有關閉JSF查看狀態<f:view transient="true">,那麼<h:form>已隱式保護爲javax.faces.ViewState隱藏輸入字段。另見a.o. CSRF, XSS and SQL Injection attack prevention in JSF

+0

什麼時候/爲什麼需要使用''來保護(在GET請求上)對CSRF的頁面? – Tiny

+2

@Tiny:我也想知道。 GET請求根據定義是冪等的。另見a.o. https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Disclosure_of_Token_in_URL – BalusC