最有效方式是用FilesMatch指令在VirtualHost或Directory块中拦截备份后缀,如.(bak|zip|sql|tar|gz|7z|swp|old|backup)$,配合Require all denied;对专用备份目录需叠加Directory级封锁并设Options None;同时将备份文件存于Web不可达路径,并定期扫描清理。

直接禁止访问备份文件是最有效的方式,不是靠“藏起来”或“改名字”,而是用 Apache 的配置从根源上拦截请求。
用 FilesMatch 精准拦截常见备份后缀
攻击者常尝试直接下载 .zip、.bak、.sql 等备份文件。必须在主配置或虚拟主机中添加全局拦截规则:
- 在
<VirtualHost>或全局<Directory>块内写入: <FilesMatch "\.(bak|zip|sql|tar|gz|7z|swp|old|backup)$"><br> Require all denied<br></FilesMatch>
- 匹配不区分大小写,可加
i标志(如"\.(BAK|Zip)$"i) - 避免只拦 .bak —— 实际中 .sql.zip、.php.bak 也常见,建议定期检查日志里出现的非常规后缀
对备份目录做独立强隔离
如果网站有专用备份目录(如 /var/www/html/backups/ 或 /var/backups/),不能只靠文件匹配,要叠加目录级封锁:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 单独定义该路径的
<Directory>块: <Directory "/var/www/html/backups"><br> Require all denied<br> Options None<br></Directory>
-
Options None防止符号链接跳转、CGI 执行等绕过手段 - 确保该配置不在 .htaccess 中 —— 备份目录下若存在 .htaccess,反而可能被误启用,应统一在主配置中控制
防止备份文件被意外暴露在 Web 根目录下
很多泄露源于开发或运维误将备份存到 /var/www/html/ 下(比如 db_backup_202606.sql)。光靠拦截不够,得从源头收紧:
- 备份脚本生成路径必须设为 Web 不可达位置,例如:
/var/backups/myapp/或/home/backup/ - 若必须临时放 Web 目录(如一键下载),应配合时间限制(如 Nginx 的 expires 或 Apache 的 mod_expires),且执行后立即清理
- 定期用命令扫描:
find /var/www/html -type f \( -name "*.sql" -o -name "*.zip" -o -name "*.bak" \) 2>/dev/null,发现即删并溯源
验证是否真正生效
配完不测等于没配。三类典型请求必须返回 403:
- 直接请求
https://yoursite.com/config.php.bak - 访问
https://yoursite.com/backups/(目录页应 403,而非空白或索引页) - 尝试通过路径遍历访问,如
https://yoursite.com/../var/backups/app.sql(需确认Options -FollowSymLinks已启用) - 重启 Apache 后,用
curl -I检查响应头,确认无内容返回且状态码为 403

















