我管理一些Tomcat 9应用程序,这些应用程序在同样使用IIS 8.5的远程服务器上运行。每个站点有三个环境(DEV、TEST和PROD(。所有环境都是相同的,但在不同的服务器上。他们的数据库(Oracle DB(也位于单独的远程服务器上。我没有为这些网站使用任何其他第三方框架(如Maven或Gradle(。
我的一个应用程序出现了一个问题,攻击者可以通过多目录遍历漏洞访问web.xml。以下是一些简要信息:https://www.securityfocus.com/bid/63052/exploit
然而,我在DEV和TEST上发现(我也认为是PROD(,我们安装的过滤器实际上导致了网站无法正常工作。你输入你的用户和密码,然后点击登录,什么都不会发生。我似乎已经在DEV和TEST环境中修复了它,修复了我的代码用来测试URI的正则表达式。代码:
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,它应该用主页来响应。
502错误
我检查了catalina日志,没有发现堆栈跟踪或任何输出错误的迹象。没有其他日志可以用来显示问题所在。我只尝试过清除缓存并重试,使用不同的浏览器,重新启动tomcat服务,在IIS中重新启动网站,什么都没有。
如果你想看我缺少的东西,请告诉我。顺便说一句,我试着删除了阻止访问web.xml的过滤器,只是为了确保这不是问题所在,无论有没有过滤器,都会导致502错误。
提前感谢您的帮助。
回答我自己的问题:我四处寻找,直到发布后才发现一个相关的帖子:
部署时出现502代理错误
他们的回答起了作用。我的PROD环境和DEV/TEST环境之间的区别在于PROD在代理上。我访问了服务器上的IIS,找到了该网站使用的服务器场。然后我点击"代理"选项,将超时时间从30秒更改为60秒。看来我的代理超时了。希望这对将来的人有所帮助。