为什么禁止除GET 和POST 之外的HTTP 方法?

最近 老是 听朋友说,被上级单位通报HTTP不安全方法漏洞,本来是低危漏洞,也没怎么注意它,最近升为中危漏洞,每天催着去整改,闹得人心惶惶,甚至经常被维护人员吐

大家好,今天来为大家分享为什么禁止除GET 和POST 之外的HTTP 方法?的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

因此,有必要解释一下为什么禁止除GET 和POST 之外的HTTP 方法。

换句话说,这些HTTP不安全方法有多不安全?

1. HTTP请求方式有哪些?

根据HTTP标准,HTTP请求可以使用多种方法,其功能描述如下。

HTTP1.0定义了三种请求方法:GET、POST、HEAD

HTTP1.1增加了五种新的请求方法:OPTIONS、PUT、DELETE、TRACE、CONNECT

2. 举例说明不安全的HTTP方法

众所周知,GET和POST是最常见的方法,大多数主流网站只支持这两种方法,因为它们能够满足功能需求。其中,GET方法主要用于获取服务器上的资源,而POST方法用于向服务器上特定URL的资源提交数据。其他方法出于安全原因被禁用,所以在实际应用中,90%以上的服务器不会响应其他方法并抛出404或405错误提示。以下是几种HTTP方法的不安全性:

1. OPTIONS方法会暴露服务器信息,例如中间件版本、支持的HTTP方法等。

2.PUT方法。由于PUT方法本身没有验证机制,因此可以使用PUT方法快速、轻松地入侵服务器并上传Webshell或其他恶意文件以获取敏感数据或服务器权限。

3.删除方法。 DELETE方法可用于删除服务器上的特定资源文件,造成恶意攻击。

为什么禁止除GET 和POST 之外的HTTP 方法?

3、漏洞验证

(一)环境建设

1、测试环境为:WIN10 64位、Tomcat 7.0.72、curl 7.49

2、Tomcat 7默认配置中,web.xml文件的org.apache.catalina.servlets.DefaultServlet

readonly参数默认为true,表示不允许DELETE和PUT操作,因此通过PUT或DELETE方法访问会报403错误。为了方便测试,将readonly参数设置为false。

(2)利用漏洞

1. PUT上传和DELETE删除文件成功

当DefaultServlet的readonly参数为false时,使用Curl进行测试,发现可以通过PUT上传文件,通过DELETE删除文件。

2.jsp直接PUT上传失败

这时我想直接上传webshell.jsp,却发现上传失败。

研究发现原因是默认配置下,涉及jsp、jspx后缀名的请求由org.apache.jasper.servlet.JspServlet处理,其他请求由org.apache.catalina.servlets处理。默认Servlet 处理。

为什么禁止除GET 和POST 之外的HTTP 方法?

只是将DefaultServlet的readonly设置为false,对jsp和jspx是不生效的。因此,当PUT上传jsp和jspx文件时,Tomcat使用JspServlet来处理请求,而JspServlet中没有PUT上传逻辑,所以会报403错误。

3.利用漏洞成功上传WebShell

对于WebShell无法直接上传的问题,一般思路是通过解析漏洞来解决问题,很多中间件版本如IIS 6、TOMCAT 7等都出现过相关漏洞。

本测试环境利用Tomcat 7的任意文件上传漏洞(CVE-2017-12615)来达到目的。该漏洞通过构造特殊后缀名来绕过tomcat检测,使其使用DefaultServlet的逻辑来处理请求,从而上传jsp文件**。具体来说主要有三个方法,比如shell.jsp%20、shell.jsp:$DATA、shell.jsp/

本次测试采用第一种方法,在1.jsp后添加%20,即可成功上传并获取WebShell。

卷曲-X PUT http://127.0.0.1:8080/examples/1.jsp%2 0 -d “HelloJSP”

然后就直接挂了。从下图可以看到,webshell.jsp上传成功,服务器控制成功。

四、如何自我纠错、自我审视

从上面的Tomcat测试中我们可以发现,虽然只有当DefaultServlet的readonly参数为false时才能实现渗透,但仍然建议禁止除GET和POST之外的HTTP方法,原因有二:

1、GET、POST以外的HTTP方法刚性应用场景较少,禁止方法简单,即实现成本低;

2、低权限用户一旦能够访问到这些方法,就可以利用它们对服务器进行有效的攻击,即威胁具有很高的影响力。

为什么禁止除GET 和POST 之外的HTTP 方法?

写到这里,或许大家就明白为什么要禁止除GET 和POST 之外的HTTP 方法了。一是因为GET和POST已经可以满足功能需求,二是因为如果不禁止的话,威胁会很大。

在自纠自查方面,可以使用OPTIONS方法来遍历服务器使用的HTTP方法。但请注意,不同目录下的激活方法可能会有所不同。很多时候,虽然有反馈说某些方法有效,但实际上并不起作用。很多时候,即使某个方法没有在OPTIONS 请求返回的响应中列出,它仍然可用。一般来说,建议手动测试每种方法以确认其是否有效。

具体方法、例子,使用curl测试:

1、测试OPTIONS是否响应,是否有Allow: GET、HEAD、POST、PUT、DELETE、OPTIONS

卷曲-v -X选项http://www.test.com/test/

2、通过PUT测试是否可以上传文件

卷曲-X PUT http://www.test.com/test/test.html -d“测试”

3、找到一个已有的文件,比如test.txt,测试是否可以删除。

卷曲-X删除http://www.example.com/test/test.text

用户评论

为什么禁止除GET 和POST 之外的HTTP 方法?
揉乱头发

我觉得这篇文章写得很有道理啊。HTTP本来就是用来传输信息的协议,如果把所有方法都开放的话,就容易造成安全风险和可维护性的问题了!

    有8位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
玩味

我不太同意这种说法,现在的RESTful API设计理念并不一定是固定的,随着技术的进步,也许会有更灵活的方法替代GET和POST,让开发工作更有效率!

    有10位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
景忧丶枫涩帘淞幕雨

其实除了GET和POST,其他HTTP方法都有其特定的用场景。像PUT用来更新资源,DELETE用来删除资源,这些用法都非常合理,禁止的话反而会限制技术的發展。

    有18位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
今非昔比'

完全赞同这个观点!过于灵活的系统反而难以维护,规范标准能使代码更易读懂,也能提高安全性!

    有5位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
话扎心

这篇文章让我受益匪浅,以前一直没想过GET和POST之外的方法其实存在安全风险。感谢作者的提醒,今后我会更加注意这些方面的细节。

    有14位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
歇火

我认为限制HTTP方法主要是为了保证系统的稳定性和安全性,尤其是面对一些不可预知的攻击,规范化的请求方式能更好地防御漏洞!

    有14位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
醉枫染墨

我倒觉得HTTP方法限制反而会局限开发人员的想象力,如果允许更多的HTTP方法,能开发出更灵活和创新的应用程序。

    有17位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
经典的对白

对啊,像PATCH这种方法,用来对资源进行局部修改,在一些特定的场景下非常方便,不应该被禁止的!

    有10位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
醉红颜

文章观点很有建设性,GET和POST限制确实可以降低一些安全问题,同时也更容易理解HTTP协议的操作方式。

    有7位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
呆檬

完全同意作者的说法!限制HTTP方法是对系统安全性和可维护性的一种保护措施,尤其是在面对复杂的网络环境时更为重要。

    有20位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
一生荒唐

禁止除GET POST之外的其他方法,确实会让开发工作变得更加复杂,因为很多时候其他方法更有用。

    有15位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
刺心爱人i

其实这篇文章说的问题很有共鸣,在实际项目中也经常遇到这种限制带来的不便,希望能随着技术的进步找到更灵活、安全可靠的方案。

    有16位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
念旧是个瘾。

我觉得作者忽略了现代网络开发中基于HTTP协议的服务架构的多样性,并非所有情况下局限于GET和POST都适合应用。

    有6位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
淡抹丶悲伤

文章观点比较片面,没有充分考虑新技术发展的趋势,一些新的Web标准已经开始打破原本的GET/POST模式限制…

    有15位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
绳情

完全不认同这种说法!如果要保证安全,应该做好相应的防御机制,而不是一味的限制HTTP方法的使用范围。

    有20位网友表示赞同!

为什么禁止除GET 和POST 之外的HTTP 方法?
〆mè村姑

我更觉得重要的是开发人员的意识和技术水平,不依赖于对部分HTTP方法的限制就能保障系统的安全性!

    有15位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/160006.html

(0)
小su's avatar小su
上一篇 2024年9月21日 上午12:25
下一篇 2024年9月21日 上午12:32

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注