网站首页 > 精选教程 正文
1 安全事件
最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露:
http://my.domain.com/.git/config
能够被公网无认证即可访问,请修复。
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
一般情况下,配置信息泄露是相当严重的问题,往往会千万另外一个地方整片区域的 沦陷,比如:数据库。当然本例并没有这样,但是可以作为一个典型安全来进行讲解。
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 = 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 总结
对于服务器往往都放在公网云端的互联网从业人员来说,任何时候都不能对权限配置疏忽了,否则可能千万无法估量的损失。
欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135
本群提供免费的学习指导 架构资料 以及免费的解答
不懂得问题都可以在本群提出来 之后还会有直播平台和讲师直接交流噢
猜你喜欢
- 2024-10-06 Linux系统安全小妙招,这些或许能够帮助到你
- 2024-10-06 最新Nginx安全问题使1400多万台服务器容易受到DoS攻击
- 2024-10-06 Web 环境安全 优化建议例 web安全深度剖析
- 2024-10-06 第 12 章:NGINX 最佳实践和未来趋势
- 2024-10-06 基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制
- 2024-10-06 Nginx 安全问题致使 1400 多万台服务器易遭受 DoS 攻击
- 2024-10-06 nginx安全扫描问题处理 nginx问题排查
- 2024-10-06 中间件安全—Nginx常见漏洞 中间件 nginx
- 2024-10-06 Nginx的HTTPS部署与安全性能优化 nginx的https部署与安全性能优化对比
- 2024-10-06 保持 Nginx 安全: 最佳实践与防护技巧指南
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)