应立即检查web可访问目录下配置文件残留、phpinfo()页面暴露、源码硬编码凭据、错误页面路径泄露、git目录未屏蔽及目录列表开启六类高危风险。

在PHP框架项目中快速定位数据库密码、API密钥、绝对路径等敏感信息是否被意外暴露,是安全审计中最紧急的环节——这类泄露往往无需复杂利用,直接访问即可接管系统。
检查Web可访问目录下是否存在配置文件残留
进入项目根目录,执行 find . -name "*.php" -o -name "*.env" -o -name "config.*" | grep -E "(bak|~|#|swp|\.old)$",重点筛查 backup.sql、.env.bak、config.php~ 等扩展名文件。
若发现 【.env 文件被放在 webroot 下且可通过 HTTP 直接下载】,立即移走或加 Nginx/Apache 规则 deny all;这类文件一旦被爬虫收录,攻击者5秒内就能拿到数据库凭证。
打开浏览器访问 /phpinfo.php 或 /info.php,若页面存在,截图并关闭——【phpinfo() 默认暴露全部环境变量、扩展列表、真实物理路径】,这是高危配置错误,必须删除或限制IP访问。
扫描源码中硬编码的敏感凭据
方法一:用 grep 递归搜索典型关键词
grep -r -n "DB_PASSWORD\|DB_PASS\|AWS_SECRET\|SECRET_KEY\|password.*=\|pass.*=" --include="*.php" --include="*.ini" --include="*.yml" ./app/ ./config/ ./src/ 2>/dev/null
方法二:用 ripgrep(更快更准)
rg -t php '($|->)(host|user|pass|key|secret|token|pwd)' --ignore-case ./
看到匹配行后,不要只看变量名,要向上追溯赋值来源:如果值来自 getenv('DB_PASSWORD') 且该环境变量由服务器设置,则安全;但如果写成 $password = '123456'; 或 define('API_KEY', 'sk-xxx');,就必须立刻替换为环境变量注入方式。
验证错误页面是否泄露路径与堆栈
第一步:触发一个可控报错,例如访问不存在的路由 /test/route/notfound.php
第二步:观察HTTP响应体,若返回内容含 /var/www/html/app/config/database.php on line 23 这类绝对路径,说明 display_errors = On 未关闭。
第三步:登录服务器,检查 php.ini 中 display_errors = Off 和 log_errors = On 是否生效;若使用 Laravel/Lumen,还需确认 APP_DEBUG=false 已设为 false —— 【APP_DEBUG=true 时会完整输出异常堆栈,含数据库连接串和.env 路径】。
第四步:检查自定义错误页(如 500.blade.php)是否包含 {{ $exception->getMessage() }} 这类未过滤输出,应改为仅记录日志、前端显示通用提示。
排查Git历史与服务器目录列表风险
执行 curl -I https://yourdomain.com/.git/config,若返回 200 OK,说明 .git 目录未屏蔽,攻击者可用 git-dumper 工具一键拉取全部源码。
访问 https://yourdomain.com/uploads/ 或 https://yourdomain.com/storage/,若页面列出文件名(如 avatar_abc123.jpg、backup_202607.sql),说明 Apache 的 Options Indexes 或 Nginx 的 autoindex on 未关闭。
运行 git log -p -S "DB_HOST" --all 查看历史提交中是否曾误提交过含密码的配置文件——即使已删,仍可能被恢复;此时需强制重写历史并通知所有协作者重新克隆仓库。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











