前些天进行渗透测试,出现不安全的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端如何限制请求方式补上。
网友评论