6

JSF2.1とGlassfish3.1.2を使用しています。

すべてをブロックするセキュリティ制約を指定します。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secured Content</web-resource-name>
        <!-- Block all -->
        <url-pattern>/*</url-pattern>
    </web-resource-collection>

    <!-- only users with at least one of these roles are allowed to access the secured content -->
    <auth-constraint>
        <role-name>ADMINISTRATOR</role-name>
    </auth-constraint>
</security-constraint>

ページとリソースのサブセットへのアクセスを許可する別のものがあります。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Open Content</web-resource-name>
        <!-- Allow subscribe -->
        <url-pattern>/subscribe/*</url-pattern>
        <url-pattern>/javax.faces.resource/*</url-pattern>
    </web-resource-collection>
    <!-- No Auth Contraint! -->
</security-constraint>

これは正常に機能します。ただし、以下は

<url-pattern>/javax.faces.resource/*</url-pattern>

すべてのリソースを許可する正しい方法は?

これは、Faceletsがxhtmlに挿入するURLを確認することによってのみ行いました。このアプローチにはセキュリティホールがありますか?

ありがとう。

4

1 に答える 1

6

ResourceHandler#RESOURCE_IDENTIFIER定数の値でなければなりません。そのjavadocも参照してください。

RESOURCE_IDENTIFIER

public static final java.lang.String RESOURCE_IDENTIFIER

Resource#getRequestPathこの定数の値を URI のプレフィックスとして返します。handleResourceRequest(javax.faces.context.FacesContext)は、リクエスト URI 内でこの定数の値を検索して、リクエストがリソース リクエストかビュー リクエストかを判断します。

関連項目:

定数フィールド値

定数フィールドの値は次のとおりです。

public static final java.lang.String    RESOURCE_IDENTIFIER    "/javax.faces.resource"

したがって、URL パターンに関しては完全に正しいです。/resourcesJSF リソース ハンドラによって処理される公開 Web コンテンツのフォルダに機密情報を置かない限り、セキュリティ ホールはありません。

于 2012-12-04T11:02:40.033 に答える