web-dev-qa-db-ja.com

web.xmlのセキュリティ制約をホワイトリストに登録する

Struts2アプリケーションにTomcatを使用しています。 web.xmlには、以下に示すような特定のエントリがあります。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>restricted methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>
<security-constraint>
   <web-resource-collection>
       <web-resource-name>no_access</web-resource-name>
       <url-pattern>/jsp/*</url-pattern>
   </web-resource-collection>
   <auth-constraint/>
</security-constraint>
    <security-constraint>
   <web-resource-collection>
       <web-resource-name>no_access</web-resource-name>
       <url-pattern>/myrrunner/*</url-pattern>
   </web-resource-collection>
   <auth-constraint/>
</security-constraint>

上記のブラックリストパーツをホワイトリストパーツのみを使用するように変更するにはどうすればよいですか。たとえば、PUTDELTE httpメソッドをブラックリストに登録する代わりに、他のメソッドをホワイトリストに登録する必要がありますが、それらをホワイトリストに登録する構文とそれらをホワイトリストに登録する方法。

私の上のweb.xmlスニペット、上記のxmlのホワイト化カウンターパートを提供できる人がいれば感謝します。

編集:また、ソリューションが機能するかどうかを実際にどのように確認しますか?

ありがとう

23
Mike

私は以下を試します:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <!-- no auth-constraint tag here -->
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>restricted methods</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
   <auth-constraint/>
</security-constraint>

最初 security-constraintはありませんauth-constraintなので、GETメソッドとPOSTメソッドは、ログインしなくても誰でも利用できます。2番目は、他のすべてのhttpメソッドを制限します(私は試していません)。

21
palacsint

Java EE 6の新機能。アプリケーションのセキュリティ設定を簡素化します。web.xmlで許可されたHTTPメソッドに対してホワイトリストとブラックリストの両方を許可できるようになりました。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Disable unneeded HTTP methods by 403 Forbidden them</web-resource-name>
        <url-pattern>*</url-pattern>
        <http-method-omission>GET</http-method-omission>
        <http-method-omission>HEAD</http-method-omission>
        <http-method-omission>POST</http-method-omission>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

参照: https://docs.Oracle.com/cd/E19798-01/821-1841/bncbk/index.html#6nmq2cpkb

11
aviundefined

受け入れられた回答を少し調整します(url-pattern 2番目のsecurity-constraintはデフォルトのサーブレットにマッピングします"/")はJBossとWeblogicでは機能しますが、Websphereでは機能しません。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Allowed methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <!-- no auth-constraint tag here -->
</security-constraint>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Restricted methods</web-resource-name>
        <url-pattern>/</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

上記のセキュリティ制約設定では、WebsphereがすべてのHTTPメソッドを許可するのに対し、JBossおよびWeblogicはGETおよびPOSTのみを許可する理由がわかりません。

3
mendozal