26

我将 Tomcat 用于我的 Struts2 应用程序。具有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>

如何将上述列入黑名单的部分更改为仅使用列入白名单的部分...例如,我需要将其他方法列入白名单,而不是 blacklisting PUTDELTEhttp 方法,但我不确定将它们列入白名单的语法以及将它们列入白名单的方法。

对于我上面的web.xml片段,如果有人可以为我提供上面的 whitelisitng 对应部分,我将不胜感激xml

编辑:另外,我将如何真正验证解决方案是否有效?

谢谢

4

3 回答 3

23

我会尝试以下方法:

<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 方法,而无需登录。第二个限制每个人的其他 http 方法。(我没试过。)

于 2011-11-09T20:53:36.943 回答
15

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

于 2013-10-22T00:05:30.313 回答
3

对接受的答案稍作调整(将url-pattern第二个设置security-constraint为映射到默认 servlet "/")适用于 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 只允许GETand POST

于 2016-04-19T20:28:10.793 回答