解决远端www服务支持TRACE请求的几种方式

目录

1.为什么要禁止

漏洞描述:

漏洞危害:

2.怎么判断当前虚机是否存在trace漏洞

3.解决方式

3.1虚机层解决

3.2代码层修改


1.为什么要禁止

漏洞描述:

目标WEB服务器启用了TRACE方法。TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此,可用来进行跨站脚本(XSS)攻击,这种攻击方式又称为跨站跟踪攻击(XST)

漏洞危害:

恶意攻击者可以通过TRACE Method返回的信息了解到网站前端的一些信息,如缓存服务器等,从而为下一步的攻击提供便利。
恶意攻击者可以通过TRACE Method进行XSS攻击
即使网站对关键页面启用了HttpOnly头标记和禁止脚本读取cookie信息,那么通过TRACE Method恶意攻击者还是可以绕过这个限制读取到cookie信息。


2.怎么判断当前虚机是否存在trace漏洞

服务器输入:

curl -v -X TRACE http://ip:端口号

解决远端www服务支持TRACE请求的几种方式_第1张图片

存在trace漏洞,解决完成之后,无200响应即可

3.解决方式

3.1虚机层解决

IIS服务器:

   

     URLScan

Apache服务器:找到相关apach配置目录

1、停止Apache服务(以root权限登录)

                #    cd  /opt/IBM/HTTPServer/bin

                #    ./apachectl stop

2、修改httpd.conf文件

               #   cd  /opt/IBM/HTTPServer/conf

              编辑httpd.conf文件
 
              # 首先,激活rewrite模块(去掉符号#)
              LoadModule rewrite_module modules/mod_rewrite.so

             # 启用Rewrite引擎
             RewriteEngine On
            

             # 对Request中的Method字段进行匹配:^TRACE 即以TRACE字符串开头
             RewriteCond %{REQUEST_METHOD} ^TRACE
             

             # 定义规则:对于所有格式的来源请求,均返回[F]-Forbidden响应
             RewriteRule .* - [F]
 
            对于2.0.55以上版本的apache服务器,有一种更简单的办法:
            TraceEnable off



3、启动Apache服务(以root权限登录)

                #    cd  /opt/IBM/HTTPServer/bin

                #    ./apachectl start

3.2代码层修改

boot项目,内嵌undertow容器解决方案:

pom依赖:


    org.springframwork.boot
    spring-boot-starter-undertow

前提是,这个类,可以被扫描到,componentScan扫描到

注:定制器怎么调用、加载的,可参考:源码解析

@Configuration
public class UndertowWebServerCustomizerConfig implements WebServerFactoryCustomizer{

    @Override
    public void customize(UndertowServletWebServerFactory factory){
        factory.addDeploymentInfoCustomizers(deploymentInfo ->{
            deploymentInfo.addInitualHandlerChainWrapper(new HandlerWrapper(){
                
                @Override
                public HttpHandler wrap(HttpHandler handler){
                    HttpString[] disallowerHttpMethods = {HttpString.tryFromString("TRACE"),HttpString.tryFromString("TRACK")
                    };

                    return new DisallowedMethodsHandler(handler,disallowerHttpMethods );
                }  
            });
        });

    }

}

其余容器的解决方案如下:

可参考:https://www.cnblogs.com/zcg-cpdd/p/14485370.html

你可能感兴趣的:(java小实践,非功能测试,安全,trace)