红穆笔记
首页 踩坑总结 Nginx 屏蔽敏感目录,安全防护
踩坑总结

Nginx 屏蔽敏感目录,安全防护

Nginx 屏蔽敏感目录,安全防护

起因

前几天给博客加了后台管理功能,新增了 SQLite 数据库目录 Mdata 和缓存目录 Mcache。功能跑通之后,一个念头突然冒出来:

如果我直接访问 https://域名/Mdata/content.db,会发生什么?

试了一下,浏览器开始下载一个文件——数据库文件被完整暴露了。里面装着所有文章内容、用户密码哈希、翻译缓存,一旦被爬虫或路人下载走,整个站就成了透明玻璃房。

这篇文章记录一下排查和修复的过程,也给后来者一个参考。

一、先确认到底暴没暴露

不要凭直觉,先测。用 curl 或浏览器逐个访问:

curl -I https://你的域名/Mdata/content.db
curl -I https://你的域名/Mcache/_config.php
curl -I https://你的域名/Mdata/views.log
curl -I https://你的域名/Mdata/content.db-wal

看返回的 HTTP 状态码:

返回码 含义 200 OK 危险,文件被公开下载 403 Forbidden 被拒绝,但暴露了路径存在 404 Not Found 理想结果,跟不存在一样 如果是 200,事情就得处理了。

二、为什么宝塔默认挡不住

宝塔面板的默认 Nginx 配置里,PHP 处理规则长这样:

location ~ \.php$ {
    fastcgi_pass unix:/tmp/php-cgi-74.sock;
    include fastcgi.conf;
}

它只管 .php 文件,其他扩展名(.db.log.lock)会走静态文件规则,直接被 Nginx 当普通文件吐给用户。所以 content.db 就这样裸奔了。

有人会想:那把 .db 加到 PHP 规则里不就行了?不行,那会让 Nginx 试图用 PHP 解析二进制文件,结果是乱码或 500。

正确做法是用一个独立的前缀匹配规则,把整个目录掐掉

三、核心配置

打开宝塔面板 → 网站 → 点击站点 → 配置文件,找到 server {} 块,在里面加入:

# 屏蔽数据与缓存目录
location ^~ /Mdata/ {
    return 404;
}
location ^~ /Mcache/ {
    return 404;
}

保存,Nginx 会自动 reload。再测一遍那四个 URL,应该全部返回 404

就这两条,问题解决了。

四、加固:扩展到全站

挡掉两个目录只是起点。顺手加上几条通用规则,覆盖更多场景:

# ============ 安全加固 ============

# 屏蔽隐藏文件(放行 .well-known 给证书验证用)
location ~ /\.(?!well-known) {
    return 404;
}

# 屏蔽数据与缓存目录
location ^~ /Mdata/ {
    return 404;
}
location ^~ /Mcache/ {
    return 404;
}

# 屏蔽后台密钥 / 会话文件
location ~ ^/admin/_(key_.*|auth)\.php$ {
    return 404;
}

# 兜底:禁止访问任何数据库文件
location ~* \.(db|sqlite|sqlite3|db-wal|db-shm)$ {
    return 404;
}

# 禁止访问日志 / 锁文件
location ~* \.(log|lock)$ {
    return 404;
}

# 禁止访问备份 / 临时 / 配置文件
location ~* \.(bak|old|orig|save|swp|swo|tmp|inc|ini|conf)$ {
    return 404;
}

逐条解释:

  1. 隐藏文件规则:挡住 .git.env.htaccess 这类文件。(?!well-known) 是负向先行断言,避免误伤 .well-known(Let's Encrypt 签发证书用)。
  2. 目录屏蔽:Mdata / Mcache 两个核心目录。
  3. 后台文件屏蔽Madmin/_key_*.php 里存着登录密钥、_auth.php 里存着会话 token。虽然内容被注释包裹不会泄露,但多一层是一层。
  4. 扩展名兜底:万一哪天你把 Mdata 改名成 Data、或者有别的目录里也有 .db,这条规则依然拦得住。
  5. 日志/锁文件views.logviews.lockphp_error.log 这类文件,内容可能包含 IP、UA、错误堆栈。
  6. 备份/临时文件:编辑器(vim / VSCode / PHPStorm)会生成 .swp~.orig 之类,开发者改代码时忘记删掉,就会暴露源码。

六、关于 403404 的哲学

安全圈有一句老话:

不要告诉攻击者你做错了什么。

一个 403 Forbidden 的响应,等价于对扫描器广播:"这里有东西,只是我现在不给你。" 攻击者下一步的动作就是尝试绕过、猜路径、找漏洞。

404 Not Found 是沉默——"你看到的和我看到的没什么不同"。

对自用的小站来说,攻击者本来也没那么"精准打击",大多是自动化扫描。给个 404,扫描器一般就略过了。

微信赞赏

微信

支付宝赞赏

支付宝

✍️ 作者: 红穆

网站管理员 · 感谢阅读,更多精彩内容敬请关注

作者主页 查看主页 →

相关文章

浏览器缓存增加你网站二次访问速度

浏览器缓存增加你网站二次访问速度 踩坑总结

使用浏览器缓存官方话语:如果用户会多次访问您的网站,那么静态资源的浏览器缓存可以节省用户的时间。缓存标头应当应用到所有可缓存的静态资源中,而不仅仅是应用到一小部分静态资源(例如,图片)中。可缓存的资源包括JS和CSS文件、图像文件及其他二进制对象文件(媒体文件和PDF文件等)。通常情况下,HTML不…
👁 201
常用正则表达式

常用正则表达式 踩坑总结

正则表达式网址(URL)[a-zA-z]+://[^\s]*IP地址(IP Address)((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)电子邮件(Email)\w+([-+.]\w+)*@\w+([-.]\w+)*…
👁 243

推荐阅读

响应式创意餐饮酒店装饰设计网站模板 0877

响应式创意餐饮酒店装饰设计网站模板 0877 实用收藏 易优模板

此套eyoucms响应式模板适用于创意餐饮、酒店与装饰设计行业,设计风格现代时尚,能够展示餐饮空间、酒店设计、装饰案例及设计理念。有助于设计公司在线上吸引高端商业项目客户。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优C…
👁 31
(自适应手机端)简繁绿色HTML5响应式环保设备pbootcms模板 环保科技公司网站源码下载 0820

(自适应手机端)简繁绿色HTML5响应式环保设备pbootcms模板 环保科技公司网站源码下载 0820 实用收藏 pbootcms模板

一款简繁绿色响应式环保设备与环保科技PbootCMS网站模板,支持PC与WAP端。设计风格清新环保,适合环保科技公司在两岸及华人市场展示绿色技术与企业形象。有助于企业拓展绿色产业合作。模板展示 安装说明 网站后台:/admin.php 账号:admin 密码:admin 解压密码:www.4s5.c…
👁 38
帝国cms 多条件查询之IN查询

帝国cms 多条件查询之IN查询 程序笔记 帝国cms

在帝国cms中,偶然需要用到in查询,也就是多条件查询中的:在使用这个的时候,发现IN查询并不能查询到我的结果,于是翻找PHP代码,发现下面的函数里需要修改!function SearchDoKeyboard($f,$hh,$keyboard){ // print_r($keyboard);echo…
👁 223
php 将一个字符串分割为组成它的字符

php 将一个字符串分割为组成它的字符 语言笔记 PHP

问: php里如何将一个字符串分割为组成它的字符?比如hello -> [h, e, l, l, o] 以下有三种方法:这是需要被分割的字符串: $str = 'Hello小样';字符串的长度:$len = mb_strlen($str, 'utf8');// 7第一种:$arr = str_…
👁 182
汽车配件外贸响应式英文网站模板 1117

汽车配件外贸响应式英文网站模板 1117 实用收藏 易优模板

一款针对汽车配件外贸的eyoucms响应式英文网站模板。设计风格专业国际,能够展示汽车配件产品、技术参数、出口优势及全球市场。有助于汽配企业在国际市场上展示品牌,拓展海外业务。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易…
👁 41
(自适应手机端)生活服务类网站模板 本地信息服务网站源码下载 1056

(自适应手机端)生活服务类网站模板 本地信息服务网站源码下载 1056 实用收藏 pbootcms模板

一款生活服务类与本地信息服务PbootCMS网站模板,支持PC与WAP端。设计风格清新实用,适合展示本地生活服务信息、分类广告及商家黄页。有助于本地信息平台在线上吸引用户与商家入驻。模板展示 安装说明 网站后台:/admin.php 账号:admin 密码:admin 解压密码:www.4s5.cn…
👁 56