微信号:ceshibaixiaosheng

介绍:软件测试行业每日一问、每日一答、每日一文.力争做有态度、有深度的行业领先媒体.在这里可以获得你不知道的测试行业干货.在这里你不仅能学到行业技术,更能零距离了解大师所想.加入我们,明天你必将成为大师.

nginx下git引发的隐私泄露问题

2016-10-31 18:36 测试百晓生
测试百晓生
ceshibaixiaosheng
测试圈懂的最多的人,跟着百晓生一起学测试,你定会有收获。我就在你的口袋,你——有问题难得倒我吗?
PS:一颗安利,百晓生继续招种子用户啦。积分攒够兑换礼品的就会得到种子群的邀请,怎么得到积分呢?

  ●  在百宝箱-我的任务 里面进行游戏、测试题、留言等互动就能获得对应积分
  ●  积分可以兑换辣条、测试行业热门书籍。后期奖品正在持续上架中....
  ●  积分还能问问题,每天前10名问问题的免费哦,我们绝对不会嫌你烦,么么哒!
  ●  积分还能换取简历写作的指导,百晓生的成员都是面人无数的哦
  ●  积分还能....培训....反正我是信了

正文
安全事件

最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露:

能够被公网无认证即可访问,请修复。
一般情况下,配置信息泄露是相当严重的问题,往往会导致另外一个地方整片区域的  沦陷,比如:数据库。当然本例并没有这样,但是可以作为一个典型安全来进行讲解。

 问题分析

由于目前的 web 项目的开发采用前后端完全分离的架构:前端全部使用静态文件,和后端代码完全分离,隶属两个不同的项目。表态文件使用 git 来进行同步发布到服务器,然后使用 nginx 指向到指定目录,以达到被公网访问的目的。

将此项目发布到服务器的 /var/www/web-app-front 目录中,然后在Nginx中进行如下配置:


以上配置,确实可以达到,只要访问 my.domain.com 的域,即可进入到 /var/www/web-app-front/ 目录,但是本目录下面有一些本来不想让外界访问到的文件也会被访问到,例如: .git 目录。

一般情况下,黑客可以通过常用的  路径 字典,轻松暴破到此路径及相应的文件。

可能危害

因为要使用持续集成系统,所以对于前端静态文件的发布也必须要使用自动化,使用自动化就必须避免交互式的密码输入。而git中避免使用交互式密码输入, 主要有如下几种方法:

  • .netrc 保存明文账号和密码

  • 在 url 中带明文账号和密码

  • 使用 ssh-key 进行鉴权

当然,由于笔者使用的 ssh-key,所以并没有千万过多的隐私泄露,将危害控制到了最小(基本只泄露了这个仓库的名称信息,并没有危害)。

查看使用的 ssh-key 鉴权方式下的 .git/config 的内容:


但是,笔者不禁想起,以比较早期的时候,为了避免反复输入密码,曾经使用过在 url 中带明文账号和密码的方式来 clone 一个 git 仓库:

即,把账号和密码放在url里面可以免去反复交互式输入账号密码的繁琐操作。这样的话 .git/config 就会包括如下内容了:


显然,如上的疏忽就会导致如下内容被泄露:

  • 账号名:username

  • 密码:password

  • 服务网站:github.com

  • 项目组代号:myteam

  • 项目仓库名称:web-app-front

然后黑客就可以轻松打开服务网站,使用指定的账号和密码登录。然后浏览开发人员所在组的所有代码,然后 代码里面可能包含如下的内容:

  • 数据库账号密码

  • 服务器IP

  • 服务器账号密码

  • 其它隐私信息

将会完全被泄露出去,可以说,这样一个小疏忽会导致全线崩盘,这并不是耸人听闻。

处理方法

其实处理方法,最后仍然是这样一个思想:将权限最大化收拢,不过多外放任何不需要外放的权限。

由于本文是使用 nginx 来让外网具备访问文件目录的能力,所以此权限就在 nginx 层做配置,只需要将不需要被外界访问的目录进行排除设置即可。例如,不允许外部访问 .git 目录:


目录 .git 后是否带有"/",带"/"只禁止访问目录,不带"/"禁止访问目录中的文件。

当然, nginx 还有更多的限制访问的配置,本文不再一一列举,读者有兴趣的可以查看其官网上的相关文档进行更细致的研究。

总结

对于服务器往往都放在公网云端的互联网从业人员来说,任何时候都不能对权限配置疏忽了,否则可能千万无法估量的损失。


 
测试百晓生
每日一文,篇篇精彩
每日一问,句句原创
投稿邮箱:csbaixiaosheng@163.com
微信号:ceshibaixiaosheng
 
测试百晓生 更多文章 软件测试,如何月薪五位数 【视频】 github上最火的测试工具在这里 python单元测试—unittest 【跟我学】Jmeter课程开始啦 ​一次完整的HTTP请求过程
猜您喜欢 攻城掠梦,首战魔都——2015iWeb峰会上海站 Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法 程序员的爱情分析,给你一个清晰的爱情逻辑 可净化水资源的新塑料?IBM能做到! 【译】JavaScript 中的“纯函数”