— http — 1 min read
除标准的GET
和POST
方法外,HTTP
请求还使用其他各种方法。许多这类方法主要用于完成不常见或特殊的任务。如果低权限用户可以访问这些方法,他们就能够以此向应用程序实施有效攻击。
以下是一些值得注意的方法:
方法 | 说明 |
---|---|
PUT | 向指定的目录上载文件 |
DELETE | 删除指定的资源 |
COPY | 将指定的资源复制到Destination消息头指定的位置 |
MOVE | 将指定的资源移动到Destination消息头指定的位置 |
SEARCH | 在一个目录路径中搜索资源 |
PROPFIND | 获取与指定资源有关的信息,如作者、大小与内容类型 |
TRACE | 在响应中返回服务器收到的原始请求 |
其中,SEARCH
、PROPFIND
等方法属于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.xyz2HTTP/1.1 2003Set-Cookie: JSESSIONID=9C07035B354949CAA5A84CF0102E6C9A; Path=/manager; HttpOnly4Allow: GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS5Content-Length: 06Date: Thu, 19 Mar 2020 02:19:49 GMT
返回的
Allow
信息为即为该链接支持的HTTP
请求方法
可以看到链接暴露了 GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS
等方法,这些HTTP
请求方法并非所有都在项目中应用到,存在安全隐患。
注意:只开放需要的
HTTP
请求方法即可。如果是restful
风格可以按需要关闭不必要的请求方法
修改应用配置文件httpd.conf
,加入如下配置项:
1TraceEnable Off
1if ($request_method !~* GET|POST) {2 return 403;3 }
重启nginx,这样就屏蔽GET
、POST
、之外的HTTP
方法
Controlelr
代码中指定requestMapping
的http
方法,或者使用getMapping
接postMapping
格式
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
中,区别是添加到某一个应用只对某一个应用有效,如 果添加到tomcat
的conf
目录下web.xml
中,则对tomcat
下所有的应用有效。
(完)