最稳妥做法是将敏感配置文件移出web可访问路径;若必须共存,须在apache中用filesmatch或directory指令显式拒绝访问,如require all denied。

核心原则是:不让敏感配置文件出现在 Web 可访问路径中;若必须共存,则通过 Apache 显式拒绝所有 HTTP 请求。
把配置文件移出 Web 根目录
这是最根本、最稳妥的做法。php.ini、.env、config.php、.git 等本就不该被浏览器请求到。
- php.ini 应放在系统级路径,如:Debian/Ubuntu 是
/etc/php/8.1/apache2/php.ini,CentOS/RHEL 是/etc/php.ini;执行php --ini可确认真实加载位置 - 项目级配置(如数据库密码)应从
config.php中剥离,改用环境变量($_ENV['DB_PASSWORD'])或由 PHP-FPM 的env[DB_PASSWORD]注入 - 如果使用 Laravel、Symfony 等框架,确保
.env文件位于public/目录之外(例如与public/同级),而非放在 DocumentRoot 下
用 Files 和 FilesMatch 显式禁止访问
当历史原因导致敏感文件暂无法迁移时,必须在 Apache 配置中拦截请求。规则需写在对应 <directory></directory> 块内才生效。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 禁 .git 目录(含大小写变体):
<filesmatch><br> Require all denied<br></filesmatch> - 禁常见敏感文件:
<files> Require all denied </files><br><files> Require all denied </files><br><files> Require all denied </files> - 不要只拦
.php.ini—— 攻击者常探测php.ini、php-ini.bak、config.inc.php等,建议统一用正则:<filesmatch><br> Require all denied<br></filesmatch>
为 config.php 增加执行层防护
即使 Apache 正确解析 PHP,语法错误或模块未启用时,config.php 可能被当作纯文本下载,导致密码明文泄露。
- 在
config.php文件最开头加入:<?php die('Access denied.'); ?> - 确保 PHP 模块已启用(如
a2enmod php8.1),且AddType application/x-httpd-php .php在配置中存在 - 避免在配置文件中直接调用
mysql_connect()或输出敏感值;应仅定义数组或常量
验证是否真正生效
改完配置后重启 Apache,不能只靠浏览器看是否返回 403 —— 要确认服务器确实拒绝了请求,而非返回空页、重定向或 500 错误。
- 用 curl 检查响应头:
curl -I http://localhost/.env→ 应看到Status: 403 Forbidden - 查看 Apache 错误日志(如
/opt/lampp/logs/error_log或/var/log/apache2/error.log),搜索.env或client denied确认拦截记录 - 对
.git/config、composer.json、phpinfo.php等典型路径逐一测试










