重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
怎样避免Manager应用被人利用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联公司服务项目包括沛县网站建设、沛县网站制作、沛县网页制作以及沛县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,沛县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到沛县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
使用Tomcat时,你一定发现Tomcat的webapps目录中自带了许多的应用,有演示特性与样例的,有进行应用管理的等等,这其中就包含Manager应用。
我们前面的文章曾经分析过Manager应用的内部实现,具体可以移步这里查看:
深入Tomcat的Manager
在Tomcat的manager应用的META-INF/context.xml中,有这样一行注释:
在Tomcat的邮件组里刚好有人也在问这个问题。提问者说有人在猜他的管理员密码,想通过这个,登录到Manager应用。而Manager应用可以直接控制容器内应用的生命周期,可以直接进行Tomcat内应用的启动停止和解部署等,还是很危险的。
通过上面的context.xml中的配置,可以限制只有本地才能访问manager应用,这样除非你的主机被hack掉,否则manager应用还是不会被直接利用的。
这样就解决了Manager应用被非法利用的危险。
下面我们来深入源码,来了解下Tomcat内部是如何进行处理来实现的该功能。
通过上面的配置内容,我们能看出,实现的本质是基于Tomcat的Valve组件来进行请求的过滤处理的。关于Valve之前也曾写过内容:
Tomcat的AccessLogValve介绍
而本次在RemoteAddrValve中,调用的invoke方法注释是这样写的:
/**
* Extract the desired request property, and pass it (along with the
* specified request and response objects) to the protected
*process()
method to perform the actual filtering.
* This method must be implemented by a concrete subclass.
*/
也就是解析出需要的参数,传到process方法中。这个方法是其父类
RequestFilterValve的方法,传入的参数是request中的远程请求地址:
request.getRequest().getRemoteAddr();
再看process方法,内容如下:
void process(String property, Request request, Response response) {
if (isAllowed(property)) {
getNext().invoke(request, response);
return;
}
// Deny this request
denyRequest(request, response);
}
基本逻辑类于我们常说的黑名单与白名单。可以配置哪些是允许的,哪些是禁止的。
再翻到上面看Manager应用的配置,是配置了allow属性,设置了允许的请求地址,其它不在此范围的请求都会被拒绝。
isAllow方法,在判断时使用java.util.regex进行正则的判断。首先是根据配置的是allow还是deny进行具体的property解析和匹配。
public boolean isAllowed(String property) {
// Use local copies for thread safety
Pattern deny = this.deny;
Pattern allow = this.allow;
// Check the deny patterns, if any
if (deny != null && deny.matcher(property).matches()) {
return false;
}
// Check the allow patterns, if any
if (allow != null && allow.matcher(property).matches()) {
return true;
}
// Allow if denies specified but not allows
if (deny != null && allow == null) {
return true;
}
// Deny this request
return false;
}
对于RemoteFilterValve,在官方文档还有这样一个样例,可以在拒绝请求招待时,跳转到指定的端口。
addConnectorPort="true"
allow="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>
通过分号进行分隔,后面跟上跳转的端口。
与RemoteAddrValve类似的,Tomcat还提供了一个RemoteHostValve,可以进行远程主机的过滤,配置与功能与我们上面的介绍基本一致。
Tomcat内置了丰富的Valve,可以进行多种情形下的应用。
和Tomcat学设计模式 | Facade模式与请求处理
关于怎样避免Manager应用被人利用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。