一次Http Get请求健壮性问题的排查过程

举报
liuzhen007 发表于 2021/08/05 00:31:28 2021/08/05
【摘要】 问题 解决 结尾 问题 一个健壮性极好的Web服务,当面临暴力请求攻击时,应该具有一定的容错能力。最近,有一个安全项目验收,自己就遇到了相关的问题。因为对应的Web服务接口框架参考的是一个开源工程,可能没有经历太多实战的洗礼,这方面就表现的稍微不如人意。 问题细节描述: 对应的点播服务开放了播放列表的查询接口,正常情况下,当Web页面访问查询接口时,点播服务...

问题

解决

结尾

问题

一个健壮性极好的Web服务,当面临暴力请求攻击时,应该具有一定的容错能力。最近,有一个安全项目验收,自己就遇到了相关的问题。因为对应的Web服务接口框架参考的是一个开源工程,可能没有经历太多实战的洗礼,这方面就表现的稍微不如人意。

问题细节描述:

对应的点播服务开放了播放列表的查询接口,正常情况下,当Web页面访问查询接口时,点播服务返回对应的视频文件播放列表。但是,在进行安全项测试时,测试人员在对应Get请求的URL中输入了不存在的物理文件地址,接口返回了相应的报错堆栈信息。这种行为是非常不安全!

解决

遇到这个报错时,自己以为是一个很简单的问题,后来的尝试让我明白是自己想简单了。

尝试一

于是,自己想到了把对应的报错捕获不就行了嘛。

代码实例:

try { //todo
} catch (e) { console.log("服务查询报错, err: ", e);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

但是,结果出人意料,问题依然存在。(最后才明白了,是接口框架的问题)

尝试二

于是想到了在查询接口中去校验URL的合理性以及参数的合法性,只允许设置指定参数,如果异常直接返回报错信息。

经过测试,上面的问题确实解决了。

但是,后来的安全测试报告中又提到,如果URL后边是一段乱码,问题依然存在。

尝试三

面对上面的问题,自己非常的不解,后来,查看了点播服务处理接口请求部分的代码,发现原来是点播服务响应了所有的接口请求。这样设计的目的是为了解决跨域问题,但是没有想到引入了健壮性问题。

app.all("*",function(req,res,next){
  //设置允许跨域的域名,*代表允许任意域名跨域
  res.header("Access-Control-Allow-Origin","*");
  //允许的header类型
  res.header("Access-Control-Allow-Headers","content-type");
  //跨域允许的请求方式 
  res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
  if (req.method.toLowerCase() == 'options') res.send(200);  //让options尝试请求快速结束
  else next();
})

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

将上述代码改造成接收对应的请求后,问题消失。

结尾

好了,关于 http get 请求健壮性问题的排查过程就介绍完了,欢迎大家关注我,我是 Data-Mining (liuzhen007),中国邦德,中国一个会敲代码的邦德。

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/119374634

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。