不安全的HTTP方法(未完)

前些天进行渗透测试,出现不安全的HTTP方法,做下小结。

一,先了解下常用的HTTP请求方法

方法 描述
GET GET是最常用的方法,它的作用是获取服务器中的某个资源
POST POST方法是用来向服务器传递数据的. POST请求通常会用来提交HTML的表单. 表单中填好的数据会被传输给服务器,然后由服务器对这些数据进行处理
PUT 与GET从服务器读取资源相反,PUT方法会向服务器写入资源. 有些发布系统允许用户创建Web页面,并用PUT直接向其传输到Web服务器中
DELETE DELETE方法所做的事情就是请服务器删除请求URL所指定的资源
OPTIONS OPTIONS方法请求Web服务器告知其支持的各种功能. 可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法
HEAD HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部. 不会返回实体的主体部分.

还有TRACE,CONNECT等,我不太了解,也没用过。

二、查看不安全的HTTP方法

Web服务器配置为允许使用危险的HTTP方法,可能允许未授权的用户对Web服务器进行敏感操作。如OPTIONS,会造成服务器信息暴露,如ALLOW等

使用命令查看是否支持OPTIONS请求方法

curl -i -X OPTIONS https://test.***.com/proxy/register

上面就没有禁用options方法,请求返回结果为200,可以看到一些服务器信息

三、如何禁止使用不安全的HTTP方法

前两天随便百度了些文章,看到有文章说在请求头设置允许使用的方法即可res.setHeader("Access-Control-Allow-Methods", "GET,POST"),又说curl命令打印出的信息,Allow是GET、HEAD就是正确的(无知的我)

结果提交到测试的时候,人家告诉我返回200就是不对的,应该是403之类,如下图

又尝试在封装请求方法的地方去判断请求方法,但并不生效。我没搞懂真正的HTTP请求,我猜测不管用的原因是,我判断的地方已经走过了node请求那一步,header信息已经发送成功了,晕晕乎乎的搞不明白。最后选择在nginx改配置,一劳永逸。。。

if($request_method !== 'GET' && $request_method !== 'POST'){
    return 403
}

这样也不是个好办法,等有空(也许没空)把node端如何限制请求方式补上。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容