安全防范:nginx下git引发的隐私泄露问题
安全防范: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 ;
# the domain name it will serve for
server_name my.domain.com; # substitute your machine's IP address or FQDN
charset utf-;
# max upload size
client_max_body_size 75M; # adjust to taste sendfile on;
keepalive_timeout ; 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 =
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com: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:password@github.com/myteam/web-app-front.git
即,把账号和密码放在url里面可以免去反复交互式输入账号密码的繁琐操作。这样的话 .git/config 就会包括如下内容了:
[remote "origin"]
url = https://username:password@github.com/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 总结
对于服务器往往都放在公网云端的互联网从业人员来说,任何时候都不能对权限配置疏忽了,否则可能千万无法估量的损失。
| 作者: | Harmo哈莫 |
|---|---|
| 作者介绍: | https://zhengwh.github.io |
| 技术博客: | http://www.cnblogs.com/beer |
| Email: | dreamzsm@gmail.com |
| QQ: | 1295351490 |
| 时间: | 2016-02 |
| 版权声明: | 欢迎以学习交流为目的读者随意转载,但是请 【注明出处】 |
| 支持本文: | 如果文章对您有启发,可以点击博客右下角的按钮进行 【推荐】 |
安全防范:nginx下git引发的隐私泄露问题的更多相关文章
- [典型漏洞分享]exported Android content provider引发的隐私泄露问题
YS android手机APP对外开放多余的content provider,可任意增.删.改和查images数据库表格,导致隐私泄露 问题描述: YS android手机APP使用SQLITE数据库 ...
- CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装
CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装 安装目录准备 新建data目录,用来放下载的软件 mkdir -p /data 切换到该data目录 ...
- 如何在Nginx下配置PHP程序环境
1.nginx与PHP的关系 首先来看nginx与php的关系, FastCGI的关系(而不是像apache那样安装成nginx的模块) FastCGI的意思是, 快速的通用网关接口:CGI Comm ...
- Setup a private http/nginx based GIT server
原文:http://aaba.me/blog/2014/03/setup-a-private-http-nginx-based-git-server.html https://doomzhou.git ...
- shell 实现自动备份nginx下的站点
shell 实现自动备份nginx下的站点 优点 实现自动备份ngnix下的所有运行的站点 自定义排除备份站点,支持三种排除 自动维护备份目录,防止备份目录无限扩大 备份压缩tar.gz格式 源码: ...
- Ubuntu下git的安装与使用
Ubuntu下git的安装与使用 Ubuntu下git的安装与使用与Windows下的大致相同,只不过个人感觉在Ubuntu下使用git更方便. 首先,确认你的系统是否已安装git,可以通过git指令 ...
- 聊下git pull --rebase
有一种场景是经常发生的. 大家都基于develop拉出分支进行并行开发,这里的分支可能是多到数十个.然后彼此在进行自己的逻辑编写,时间可能需要几天或者几周.在这期间你可能需要时不时的需要pull下远程 ...
- 聊下 git rebase -i
在使用git作为源代码管理工具的时候,开发的时经常会面临一个常见的问题,多个commit 需要合并为一个完整的commit提交. 在一个基本的迭代周期里,你会有很多次commit,有跟配置文件相关的, ...
- nginx下目录浏览及其验证功能配置记录
工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果;而Nginx的目录列表功能默认是关闭的,如果需要打开Nginx的目录列表功能,需要手动配置, ...
随机推荐
- 利用snowfall.jquery.js实现爱心满屏飞
小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- Jquery 搭配 css 使用,简单有效
前几篇博客中讲了Jquery的基础和点击实际,下面来说一下和css搭配着来怎么做 还是和往常一样,举个例子 好几个方块,然后设置颜色 <!DOCTYPE html PUBLIC "-/ ...
- 关于全局ID,雪花(snowflake)算法的说明
上次简单的说一下:http://www.cnblogs.com/dunitian/p/6041745.html#uid C#版本的国外朋友已经封装了,大家可以去看看:https://github.co ...
- 08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 随手记_C#验证码
前言 最近在网上偶然看见一个验证码,觉得很有意思,于是搜了下,是使用第三方实现的,先看效果: 总体来说效果还是可以的,官方提供的SDK也比较详细,可配置性很高.在这里在简单啰嗦几句使用方式: 使用步骤 ...
- 预览github里面的网页或dome
1.问题所在: 之前把项目提交到github都可以在路径前面加上http://htmlpreview.github.io/?来预览demo,最近发现这种方式预览的时候加载不出来css,js(原因不详) ...
- 使用技术手段限制DBA的危险操作—Oracle Database Vault
概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...
- javascript之活灵活现的Array
前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...