备份文件泄露漏洞源于人为疏忽,非框架或语言缺陷;攻击者通过访问index.php.bak等路径直接下载源码获取数据库密码等敏感信息,防御需立即删除+禁止访问双保险。

PHP备份文件泄露漏洞不是框架或语言本身的缺陷,而是开发和运维过程中人为留下的“后门”——比如编辑器自动生成的.php~、backup.php.bak、config.php.save等临时文件,被直接上传到Web根目录且未被屏蔽,导致攻击者通过URL就能下载源码,进而获取数据库密码、密钥、路径结构等敏感信息。
快速确认是否已暴露
不用翻代码,打开浏览器直接试:
- 访问
https://yoursite.com/index.php.bak,若返回PHP源码或下载弹窗,说明备份文件可读 - 尝试常见后缀组合:
.php~、.swp、.swo、.orig、.save、.backup - 用目录扫描工具(如dirsearch)扫
/backup/、/data/、/old/等常见备份目录
立即删除+禁止访问双保险
光删文件不够,必须阻断所有可能路径:
- 登录服务器,递归查找并删除全部备份文件:
find /path/to/webroot -name "*~" -o -name "*.bak" -o -name "*.swp" -delete - Apache环境下,在
public/.htaccess中添加规则(确保mod_rewrite已启用):<filesmatch><br> Order Allow,Deny<br> Deny from all<br></filesmatch>
- Nginx环境下,在server块中加入:
location ~* \.(bak|swp|swo|orig|save|backup|php~)$ {<br> deny all;<br>}
从源头杜绝生成和上传
编辑器和部署流程才是真正的风险点:
- VS Code用户:在设置中关闭
files.autoSave或设为off;禁用files.enableTrash避免回收站残留 - Sublime Text用户:关闭
create_backup_file,并清空backup_before_save相关配置 - 上线前执行部署脚本自动清理:
rsync -av --exclude='*.bak' --exclude='*~' src/ dest/ - CI/CD流程中加入检查步骤,用
grep -r "\.bak\|\.swp" ./拦截含备份文件的提交
补充加固:防止其他同类泄露
备份文件只是冰山一角,顺手堵住其他常见泄露入口:
- 禁止访问
.git目录:location ~ /\.git { deny all; } - 屏蔽
composer.lock、phpinfo.php、test.php等调试/元数据文件 - 检查
php.ini中expose_php = Off是否生效,避免HTTP头泄露PHP版本 - 将
config.php等配置文件移出Web根目录(如放到../private/),改用绝对路径加载
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











