我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何禁用 HTTP TRACE/TRACK

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何禁用 HTTP TRACE/TRACK

HTTP TRACE/TRACK 漏洞问题

最近项目被安全稽核,发现有如下问题:

【问题】远端WWW服务支持TRACE请求。RFC 2616介绍了TRACE请求,该请求典型地用于测试HTTP协议实现。攻击者利用TRACE请求,结合其它浏览器端漏洞,有可能进行跨站脚本攻击,获取敏感信息,比如cookie中的认证信息,这些敏感信息将被用于其它类型的攻击。

1、发现问题

模拟确认: 指令 curl -v -X TRACE localhost:port

# 到服务器上面输入下面的命令[root@dlp logs]$ curl -v -X TRACE localhost:8089* About to connect() to localhost port 8089 (#0)*   Trying ::1...* Connected to localhost (::1) port 8089 (#0)> TRACE / HTTP/1.1> User-Agent: curl/7.29.0> Host: localhost:8089> Accept: **User-Agent: curl/7.29.0Host: localhost:8089* Connection #0 to host localhost left intact

响应返回 200 ,即代表存在高危漏洞!

如果回显为,如下所示,则该漏洞不存在。

< HTTP/1.1 403 Forbidden< Content-Type: text/html; charset=iso-8859-1或者回显为< HTTP/1.1 405 Method Not Allowed< Content-Type: text/html; charset=iso-8859-1

显然,我们服务 8089 应该存在高危漏洞。

2、解决问题

如何解决?

由于我们应用是 spring-boot 内嵌 undertow 服务器, 那么就需要添加配置项,直接附上代码:

package com.example.demo.autoconfigure;import io.undertow.server.HandlerWrapper;import io.undertow.server.HttpHandler;import io.undertow.server.handlers.DisallowedMethodsHandler;import io.undertow.util.HttpString;import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;import org.springframework.boot.web.server.WebServerFactoryCustomizer;import org.springframework.context.annotation.Configuration;@Configurationpublic class UndertowWebServerCustomizerConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {    @Override    public void customize(UndertowServletWebServerFactory factory) {        factory.addDeploymentInfoCustomizers(deploymentInfo -> {            deploymentInfo.addInitialHandlerChainWrapper(new HandlerWrapper() {                @Override                public HttpHandler wrap(HttpHandler handler) {                    HttpString[] disallowedHttpMethods = {HttpString.tryFromString("TRACE"),HttpString.tryFromString("TRACK")};                    return new DisallowedMethodsHandler(handler, disallowedHttpMethods);                }            });        });    }}

写好配置类之后:

  • 在resources/META-INF/spring.factories中设置自动配置类。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.demo.autoconfigure.UndertowWebServerCustomizerConfig
  • 也可以注解方式,启动app类扫码该包路径即可;

3、拓展

3.1、对于spring boot内嵌tomcat:

配置TomcatConfig.java

 1 import org.apache.catalina.Context; 2 import org.apache.tomcat.util.descriptor.web.SecurityCollection; 3 import org.apache.tomcat.util.descriptor.web.SecurityConstraint; 4 import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; 5 import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer; 6 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 7 import org.springframework.context.annotation.Bean; 8 import org.springframework.context.annotation.Configuration; 9 10 @Configuration11 public class TomcatConfig {12     13     @Bean14     public EmbeddedServletContainerFactory servletContainer() {15         TomcatEmbeddedServletContainerFactory tomcatServletContainerFactory = new TomcatEmbeddedServletContainerFactory();16         tomcatServletContainerFactory.addContextCustomizers(new TomcatContextCustomizer(){17             @Override18             public void customize(Context context) {19                 SecurityConstraint securityConstraint  = new SecurityConstraint();20                 securityConstraint.setUserConstraint("CONFIDENTIAL");  21                 SecurityCollection collection = new SecurityCollection();22                 23                 collection.addPattern("/*");  24                 collection.addMethod("HEAD");  25                 collection.addMethod("PUT");  26                 collection.addMethod("DELETE");  27                 collection.addMethod("OPTIONS");  28                 collection.addMethod("TRACE");  29                 collection.addMethod("COPY");  30                 collection.addMethod("SEARCH");  31                 collection.addMethod("PROPFIND");  32                 securityConstraint .addCollection(collection);  33                 context.addConstraint(securityConstraint );  34             }35         });36         37         //禁用TRACE请求38         tomcatServletContainerFactory.addConnectorCustomizers(connector -> {39             connector.setAllowTrace(true);40         });41         return tomcatServletContainerFactory;42     }43 }

引入方式同上!

3.2、 对于非内嵌式Jetty:

在jetty.xml中增加配置:

1 <security-constraint>2     <web-resource-collection>3         <web-resource-name>NoTraceweb-resource-name>4         <url-pattern>/*url-pattern>5         <http-method>TRACEhttp-method>6     web-resource-collection>7     <auth-constraint>auth-constraint>8 security-constraint>

3.3、对于非内嵌tomcat:

直接修改tomcat根目录conf目录下的web.xml,
在文件末尾(之前)添加如下代码:

<security-constraint><web-resource-collection><url-pattern>/*url-pattern><http-method>PUThttp-method><http-method>DELETEhttp-method><http-method>HEADhttp-method><http-method>OPTIONShttp-method><http-method>TRACEhttp-method>web-resource-collection><auth-constraint>auth-constraint>security-constraint><login-config><auth-method>BASICauth-method>login-config>注:在tomcat的在server.xml中先允许TRACE请求,再在web.xml中禁用TRACE,以此禁用TRACE请求.<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" allowTrace="true"               redirectPort="8443" />

3.4、对于apache:

对于2.0.55以上版本的apache服务器,
在httpd.conf尾部添加如下指令后重启apache即可:
TraceEnable off

来源地址:https://blog.csdn.net/hawinlolo/article/details/127776465

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何禁用 HTTP TRACE/TRACK

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何禁用 HTTP TRACE/TRACK

HTTP TRACE/TRACK 漏洞问题 最近项目被安全稽核,发现有如下问题: 【问题】远端WWW服务支持TRACE请求。RFC 2616介绍了TRACE请求,该请求典型地用于测试HTTP协议实现。攻击者利用TRACE请求,结合其它浏
2023-08-21

如何禁止非法的HTTP User Agents

这篇文章主要介绍了如何禁止非法的HTTP User Agents,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。禁止非法的HTTP User AgentsUser Agent是
2023-06-27

FlexBuilder中trace函数如何使用

本篇文章给大家分享的是有关FlexBuilder中trace函数如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。FlexBuilder利用trace函数成功调试在网上下载
2023-06-17

wmiproviderhost如何禁用

本篇内容主要讲解“wmiproviderhost如何禁用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“wmiproviderhost如何禁用”吧!wmiproviderhost禁用的方法:1、首
2023-07-04

Nginx服务器如何禁掉不需要的HTTP方法

这篇文章主要介绍Nginx服务器如何禁掉不需要的HTTP方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!禁掉不需要的 HTTP 方法例如一些web站点和应用,可以只支持GET、POST和HEAD方法。在配置文件中的
2023-06-05

gitee如何禁用用户

随着人们网络活动的增多和网站的数量不断增加,安全问题也越来越突出。在开源社区中,如何保护项目和社区的安全备受关注。在使用Gitee进行开源项目管理时,为了保护项目和社区的安全,有时需要禁用某些用户。本文将介绍如何在Gitee中禁用用户。一、
2023-10-22

php.ini如何禁用方法

这篇文章将为大家详细讲解有关php.ini如何禁用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php.ini禁用方法:1、找到并打开php.ini配置文件;2、找到“disable_function
2023-06-22

Linux中如何禁用IPv6

这篇文章给大家分享的是有关Linux中如何禁用IPv6的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。IPv6和IPv4同属于网络协议,在Linux系统中,IPv6和IPv4同时存在时可能会出现连接超时的情况,这时
2023-06-27

Win10如何禁用闪存

小编给大家分享一下Win10如何禁用闪存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先使用 Win + R 组合快捷键打开运行窗口,然后输入gpedit.ms
2023-06-14

Linux下如何禁用IPV6

这篇文章主要介绍了Linux下如何禁用IPV6,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linux如何禁用 IPV6?简介Pv6被认为是IPv4—&mdash
2023-06-28

datagridview排序如何禁用

要禁用DataGridView的排序功能,可以通过设置DataGridView控件的`AllowUserToOrderColumns`属性为`false`来实现。这将阻止用户手动对DataGridView列进行排序。以下是使用C#代码禁用D
2023-10-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录