保护 JSF 应用程序以防止访问 WEB-INF 文件夹内应用程序的 XML 资源

Securing a JSF application to prevent access to application's XML resources inside WEB-INF folder

我目前支持使用 JSF 1.2 和 Spring MVC 的 J2EE Web 应用程序。最近观察到该应用程序允许通过调整 URL 来显示 WEB-INF/ 文件夹下的各种 XML 资源。例如,应用程序的 URL 是 https://www.example.org/abc-app/faces//WEB-INF/web.xml 导致显示 web.xml (abc_app 是上下文根;并且故意在 [= 中有两个 '//' 23=] 导致显示 xml 文件)。该应用程序没有在web.xml中定义元素,所以我添加如下:

<security-constraint>
    <display-name>excluded</display-name>
        <web-resource-collection>
            <web-resource-name>No Access</web-resource-name>
            <url-pattern>/abc-app/WEB-INF/*.xml</url-pattern>
            <url-pattern>/abc-app/faces//WEB-INF/*.xml</url-pattern>
            <url-pattern>/abc-app/faces/*</url-pattern>
            <url-pattern>/faces/*</url-pattern>
            <url-pattern>/faces//*</url-pattern>
            <url-pattern>/*.xml</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>NoAccess</role-name>
        </auth-constraint>   
</security-constraint>

不幸的是,这没有帮助,应用程序仍然显示 XML 文件。关于如何防止显示 WEB-INF 文件夹下的 XML 文件有什么建议吗?

一些附加信息: 我们的应用程序部署在 WebSphere Application Server 上,并在 WebServer 级别使用 SAML 进行自己的身份验证。

我查看了 web.xml 并注意到它具有以下 Servlet 映射:

<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

我将其更新为只有以下内容

<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.faces</url-pattern>
</servlet-mapping>

这有助于解决问题,并且无法再访问 XML 文件。

但是,强烈建议将 JSFv1 更新为 JSF2,以防有人仍在使用它。