我管理着一些在同样使用 IIS 8.5 的远程服务器上运行的 Tomcat 9 应用程序。每个站点都有三个环境(DEV、TEST 和 PROD)。所有环境都相同,但在不同的服务器上。他们的数据库(Oracle DB)也位于不同的远程服务器上。我不为这些站点使用任何其他第三方框架(例如 Maven 或 Gradle)。
我的一个应用程序存在攻击者可以通过多目录遍历漏洞访问 web.xml 的问题。可以在此处找到一些简要信息:https ://www.securityfocus.com/bid/63052/exploit
但是,我在 DEV 和 TEST 中发现(我也认为是 PROD),我们放置的过滤器实际上导致站点无法正常工作。你输入你的用户名和密码,然后点击登录,什么都不会发生。通过修复我的代码正在测试 URI 的正则表达式,我似乎已经在 DEV 和 TEST 环境中修复了它。代码:
final String REGEX_INCLUDED = ".*\\/WEB-INF\\/web.xml.jsf.*";
...
if (Pattern.matches(REGEX_INCLUDED, URI)) {
log.debug("SecurityFilter redirect");
resp.sendRedirect("/errors/403.html"); // /login.jsf OR /index.html
} else
chain.doFilter(request, response);
我在 PROD 上部署了新的战争,输入了我的用户名和密码,它就会加载。该网站在登录后重定向到主页,但如果这有意义,它实际上不会加载。响应是一个通用的 502 错误(如下所示),但实际上 URL 确实是 /home.jsp,它应该响应主页。
我检查了 catalina 日志,没有发现堆栈跟踪或任何输出错误的迹象。没有其他日志可用于显示问题所在。我试过清除我的缓存并重试,使用不同的浏览器,重新启动 tomcat 服务,在 IIS 中重新启动站点,什么都没有。
如果有什么我想念的东西你想看,请告诉我。顺便说一句,我尝试删除阻止访问 web.xml 的过滤器,以确保它不是问题,无论有无过滤器,都会导致 502 错误。
提前感谢您的帮助。