HTTP Methods
简介
HTTP 定义了一组请求方法,以表明要对给定资源执行的操作。指示针对给定资源要执行的期望动作, 虽然他们也可以是名词,但这些请求方法有时被称为HTTP动词。每一个请求方法都实现了不同的语义,但一些共同的特征由一组共享。
方法 | 说明 |
GET | GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据。 |
HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体。 |
POST | POST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改。 |
PUT | PUT方法用请求有效载荷替换目标资源的所有当前表示。 |
DELETE | DELETE方法删除指定的资源。 |
CONNECT | CONNECT方法建立一个到由目标资源标识的服务器的隧道。 |
OPTIONS | OPTIONS方法用于描述目标资源的通信选项。 |
TRACE | TRACE方法沿着到目标资源的路径执行一个消息环回测试。 |
PATCH | PATCH方法用于对资源应用部分修改。 |
上述HTTP方法中,可能会产生较大威胁的是PUT和DELETE方法,可以在目标系统上创建和删除文件。
Tomcat配置
一般而言,GET和POST方法是被启用的,而想PUT、DELETE等不太安全的方法应该禁用。
启用不安全的HTTP方法
Step 1: 在配置文件./conf/web.xml,Filter Mappings处,添加如下配置
<!-- ==================== Built In Filter Mappings ====================== -->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET, POST, PUT, DELETE, OPTIONS, HEAD</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Step 2: 在配置文件./conf/web.xml,servlet处添加readonly参数,并设置为false。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
重启Tomat服务,使用curl命令进行测试。
C:\WINDOWS\system32>curl -I -X OPTIONS http://localhost:8080/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: *
vary: Access-Control-Request-Headers,Access-Control-Request-Headers,access-control-request-method
Access-Control-Max-Age: 1800
Access-Control-Allow-Methods: HEAD,DELETE,POST,GET,OPTIONS,PUT
Access-Control-Allow-Headers: referer,accept-language,origin,access-control-request-method,accept,authorization,x-requested-with,host,access-control-request-headers,connection,content-type,token-id,accept-encoding,user-agent
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Mon, 25 Mar 2019 01:03:51 GMT
可以看到PUT、DELETE等方法已启用。这样便能对目标服务器做一些有危害的操作。
测试验证
主要测试一下PUT和DELETE两个方法。
PUT方法
使用PUT方法,向目标系统http://127.0.0.1:8080/test/helo.txt,写入字符串"hello world"。
C:\WINDOWS\system32>curl -v -X PUT -d "hello world" http://127.0.0.1:8080/test/helo.txt
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> PUT /test/helo.txt HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.55.1
> Accept: */*
> Content-Length: 11
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 11 out of 11 bytes
< HTTP/1.1 201 Created
< Server: Apache-Coyote/1.1
< Access-Control-Allow-Origin: *
< Content-Length: 0
< Date: Mon, 25 Mar 2019 01:14:46 GMT
<
* Connection #0 to host 127.0.0.1 left intact
响应码为201,表示文件创建成功,通过浏览器访问,我们可以看到:
hello world ~
或使用REST API进行测试,在Chrome上安装REST API插件...请自行安装
可以看到文件创建成功。
DELETE方法
我们使用curl命令删除前面用REST API创建的文件:http://localhost:8080/test/haha.txt
C:\WINDOWS\system32>curl -v -X DELETE http://localhost:8080/test/haha.txt
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> DELETE /test/haha.txt HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 204 No Content
< Server: Apache-Coyote/1.1
< Access-Control-Allow-Origin: *
< Date: Mon, 25 Mar 2019 01:24:14 GMT
<
* Connection #0 to host localhost left intact
再使用REST API删除使用curl创建的文件:http://localhost:8080/test/helo.txt
整个世界都清净了...
由上可知,PUT和DELETE方法可以在目标服务器上创建和删除文件,危害较大。因此,应该尽量不去使用这些不安全的方法,仅允许一些常规的GET和POST请求,其它不用的方法都禁用。
参考
HTTP Methods的更多相关文章
- How to implement equals() and hashCode() methods in Java[reproduced]
Part I:equals() (javadoc) must define an equivalence relation (it must be reflexive, symmetric, and ...
- Sort Methods
heyheyhey ~~ It has been a long time since i come here again...whatever today i will summerize some ...
- Top 10 Methods for Java Arrays
作者:X Wang 出处:http://www.programcreek.com/2013/09/top-10-methods-for-java-arrays/ 转载文章,转载请注明作者和出处 The ...
- Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
1.问题: 在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...
- C# Extension Methods
In C#, extension methods enable you to add methods to existing class without creating a new derived ...
- CLR via C# 3rd - 08 - Methods
Kinds of methods Constructors Type constructors Overload operators Type con ...
- 转 Dynamics CRM Alert and Notification JavaScript Methods
http://www.powerobjects.com/2015/09/23/dynamics-crm-alert-and-notification-javascript-methods/ Befor ...
- AX7: HOW TO USE CLASS EXTENSION METHODS
AX7: HOW TO USE CLASS EXTENSION METHODS To create new methods on a standard AX class without custo ...
- Keeping Async Methods Alive
Consider a type that will print out a message when it’s finalized, and that has a Dispose method whi ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
随机推荐
- B1014. 福尔摩斯的约会
14/20 #include<bits/stdc++.h> using namespace std; map<char,string> day; int main(){ day ...
- 微软职位内部推荐-SW Engineer II for Embedded System
微软近期Open的职位: Do you have a passion for embedded devices and services?   Does the following m ...
- Linux内核分析— —计算机是如何工作的(20135213林涵锦)
实验部分 (以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码, int g(i ...
- 对《OA云》作品的分析
对<OA云>作品的分析 软件描述:<OA云>是一款基于移动端的企业日常事物办公软件,企业人员进入该产品后可以对当天的出勤情况进行签到,系统会自动的识别以及记录下员工的实时签到信 ...
- Studying GIT
Studying git Shopping list: GIT的功能 接触一个新的软件或者网站,最重要的就是认识它的功能:Git 是用于 Linux内核开发的版本控制工具.与常用的版本控制工具 CVS ...
- Beta冲刺——day4
Beta冲刺--day4 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...
- GIT情况展示说明
旧仓库:https://git.coding.net/shenbaishan/GIFT.git 公开的 新仓库:https://git.coding.net/shenbaishan/gift-sele ...
- C语言入门:04.数据类型、常量、变量
一.数据 1.什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数 ...
- PSP(4.6——4.12)以及周记录
1.PSP 4.6 8:30 10:30 20 100 博客 B Y min 12:00 13:00 5 55 Account A Y min 13:05 13:15 0 10 站立会议 A Y mi ...
- 开发Spring Shell应用程序
2 开发Spring Shell应用程序 向shell提供命令非常简单,需要学习的注解很少.该命令的实现风格与使用依赖注入的应用程序的开发类相同,您可以利用Spring容器的所有特性来实现您的命令类. ...