大家好,今天来为大家分享为什么禁止除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方法可用于删除服务器上的特定资源文件,造成恶意攻击。
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 处理。
只是将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已经可以满足功能需求,二是因为如果不禁止的话,威胁会很大。
在自纠自查方面,可以使用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
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/160006.html
用户评论
揉乱头发
我觉得这篇文章写得很有道理啊。HTTP本来就是用来传输信息的协议,如果把所有方法都开放的话,就容易造成安全风险和可维护性的问题了!
有8位网友表示赞同!
玩味
我不太同意这种说法,现在的RESTful API设计理念并不一定是固定的,随着技术的进步,也许会有更灵活的方法替代GET和POST,让开发工作更有效率!
有10位网友表示赞同!
景忧丶枫涩帘淞幕雨
其实除了GET和POST,其他HTTP方法都有其特定的用场景。像PUT用来更新资源,DELETE用来删除资源,这些用法都非常合理,禁止的话反而会限制技术的發展。
有18位网友表示赞同!
今非昔比'
完全赞同这个观点!过于灵活的系统反而难以维护,规范标准能使代码更易读懂,也能提高安全性!
有5位网友表示赞同!
话扎心
这篇文章让我受益匪浅,以前一直没想过GET和POST之外的方法其实存在安全风险。感谢作者的提醒,今后我会更加注意这些方面的细节。
有14位网友表示赞同!
歇火
我认为限制HTTP方法主要是为了保证系统的稳定性和安全性,尤其是面对一些不可预知的攻击,规范化的请求方式能更好地防御漏洞!
有14位网友表示赞同!
醉枫染墨
我倒觉得HTTP方法限制反而会局限开发人员的想象力,如果允许更多的HTTP方法,能开发出更灵活和创新的应用程序。
有17位网友表示赞同!
经典的对白
对啊,像PATCH这种方法,用来对资源进行局部修改,在一些特定的场景下非常方便,不应该被禁止的!
有10位网友表示赞同!
醉红颜
文章观点很有建设性,GET和POST限制确实可以降低一些安全问题,同时也更容易理解HTTP协议的操作方式。
有7位网友表示赞同!
呆檬
完全同意作者的说法!限制HTTP方法是对系统安全性和可维护性的一种保护措施,尤其是在面对复杂的网络环境时更为重要。
有20位网友表示赞同!
一生荒唐
禁止除GET POST之外的其他方法,确实会让开发工作变得更加复杂,因为很多时候其他方法更有用。
有15位网友表示赞同!
刺心爱人i
其实这篇文章说的问题很有共鸣,在实际项目中也经常遇到这种限制带来的不便,希望能随着技术的进步找到更灵活、安全可靠的方案。
有16位网友表示赞同!
念旧是个瘾。
我觉得作者忽略了现代网络开发中基于HTTP协议的服务架构的多样性,并非所有情况下局限于GET和POST都适合应用。
有6位网友表示赞同!
淡抹丶悲伤
文章观点比较片面,没有充分考虑新技术发展的趋势,一些新的Web标准已经开始打破原本的GET/POST模式限制…
有15位网友表示赞同!
绳情
完全不认同这种说法!如果要保证安全,应该做好相应的防御机制,而不是一味的限制HTTP方法的使用范围。
有20位网友表示赞同!
〆mè村姑
我更觉得重要的是开发人员的意识和技术水平,不依赖于对部分HTTP方法的限制就能保障系统的安全性!
有15位网友表示赞同!