首页 > Git版本管理工具 > 安全防范:nginx下git引发的隐私泄露问题

安全防范:nginx下git引发的隐私泄露问题

2016年12月4日

安全防范:nginx下git引发的隐私泄露问题

http://www.cnblogs.com/beer/p/5589323.html
安全防范:nginx下git引发的隐私泄露问题
1 安全事件
最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露:

http://my.domain.com/.git/config
能够被公网无认证即可访问,请修复。

一般情况下,配置信息泄露是相当严重的问题,往往会千万另外一个地方整片区域的 沦陷,比如:数据库。当然本例并没有这样,但是可以作为一个典型安全来进行讲解。

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

(pyvenv) ➜ web-app-front git:(master) ls -a
. .git .idea css fonts index.html tpl
.. .gitignore ReadMe.rst favicon.ico images js
将此项目发布到服务器的 /var/www/web-app-front 目录中,然后在Nginx中进行如下配置:

复制代码
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name my.domain.com; # substitute your machine’s IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste

sendfile on;
keepalive_timeout 0;
location / {
alias /var/www/web-app-front/; # your webapp static
}

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

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

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

.netrc 保存明文账号和密码
在 url 中带明文账号和密码
使用 ssh-key 进行鉴权
当然,由于笔者使用的 ssh-key,所以并没有千万过多的隐私泄露,将危害控制到了最小(基本只泄露了这个仓库的名称信息,并没有危害)。

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

复制代码
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote “origin”]
url = [email protected]:myteam/web-app-front.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch “master”]
remote = origin
merge = refs/heads/master
复制代码
但是,笔者不禁想起,以比较早期的时候,为了避免反复输入密码,曾经使用过在 url 中带明文账号和密码的方式来 clone 一个 git 仓库:

git clone https://username:[email protected]/myteam/web-app-front.git
即,把账号和密码放在url里面可以免去反复交互式输入账号密码的繁琐操作。这样的话 .git/config 就会包括如下内容了:

[remote “origin”]
url = https://username:[email protected]/myteam/web-app-front.git
显然,如上的疏忽就会导致如下内容被泄露:

账号名:username
密码:password
服务网站:github.com
项目组代号:myteam
项目仓库名称:web-app-front
然后黑客就可以轻松打开服务网站,使用指定的账号和密码登录。然后浏览开发人员所在组的所有代码,然后代码里面可能包含如下的内容:

数据库账号密码
服务器IP
服务器账号密码
其它隐私信息
将会完全被泄露出去,可以说,这样一个小疏忽会导致全线崩盘,这并不是耸人听闻。

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

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

server {
location ~ /\.git {
deny all;
}
}
目录 .git 后是否带有”/”,带”/”只禁止访问目录,不带”/”禁止访问目录中的文件。

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

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

本文的评论功能被关闭了.