Skip to content

毛俊的博客

不安全的http方法解决办法

http1 min read

除标准的GETPOST方法外,HTTP请求还使用其他各种方法。许多这类方法主要用于完成不常见或特殊的任务。如果低权限用户可以访问这些方法,他们就能够以此向应用程序实施有效攻击。

以下是一些值得注意的方法:

方法说明
PUT向指定的目录上载文件
DELETE删除指定的资源
COPY将指定的资源复制到Destination消息头指定的位置
MOVE将指定的资源移动到Destination消息头指定的位置
SEARCH在一个目录路径中搜索资源
PROPFIND获取与指定资源有关的信息,如作者、大小与内容类型
TRACE在响应中返回服务器收到的原始请求

其中,SEARCHPROPFIND等方法属于HTTP协议的WebDAV(Web-based Distributed Authoring and Versioning)扩展。

查看链接支持访问的HTTP方法:

使用CURL命令发送OPTIONS请求,查看响应头中的Allow行,格式:

1$ curl -I -X OPTIONS https:maojun.xyz

测试完整例子:

1curl -I -X OPTIONS https://maojun.xyz
2HTTP/1.1 200
3Set-Cookie: JSESSIONID=9C07035B354949CAA5A84CF0102E6C9A; Path=/manager; HttpOnly
4Allow: GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS
5Content-Length: 0
6Date: Thu, 19 Mar 2020 02:19:49 GMT

返回的Allow信息为即为该链接支持的HTTP请求方法

可以看到链接暴露了 GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS等方法,这些HTTP请求方法并非所有都在项目中应用到,存在安全隐患。

注意:只开放需要的HTTP请求方法即可。如果是restful风格可以按需要关闭不必要的请求方法

解决方法

  • Apache

修改应用配置文件httpd.conf,加入如下配置项:

1TraceEnable Off
  • Nginx 在你要屏蔽的虚拟主机的server段里加入下面代码:
1if ($request_method !~* GET|POST) {
2 return 403;
3 }

重启nginx,这样就屏蔽GETPOST、之外的HTTP方法

  • SpringMVC

Controlelr代码中指定requestMappinghttp方法,或者使用getMappingpostMapping格式

  • Tomcat 编辑Tomcat下的web.xml(全局应用Tomcat下的所有应用) 或者编辑项目中的web.xml(只对当前项目生效),添加如下内容:
1<security-constraint>
2<web-resource-collection>
3<web-resource-name>forbid</web-resource-name>
4<url-pattern>/*</url-pattern>
5<http-method>PUT</http-method>
6<http-method>DELETE</http-method>
7<http-method>HEAD</http-method>
8<http-method>OPTIONS</http-method>
9<http-method>TRACE</http-method>
10</web-resource-collection>
11<auth-constraint></auth-constraint>
12</security-constraint>
13<login-config>
14<auth-method>BASIC</auth-method>
15</login-config>

注意:最好将上面配置放在web.xml的末尾位置。

重启 tomcat 即可完成。 以上的代码添加到某一个应用中,也可以添加到tomcat对应conf目录的web.xml中,区别是添加到某一个应用只对某一个应用有效,如 果添加到tomcatconf目录下web.xml中,则对tomcat下所有的应用有效。

(完)

© 2020 by 毛俊的博客. All rights reserved.
Theme by LekoArts