最直接有效的方式是用 filesmatch 指令匹配敏感后缀并拒绝访问,同时确保这些文件不放在 web 可访问路径下——后者才是根本防线;配置需置于 virtualhost 或 directory 块中,结尾加 $ 防误杀,敏感文件应移出 documentroot,辅以目录级限制和三步验证。

最直接有效的方式是用 FilesMatch 指令匹配敏感后缀并拒绝访问,同时确保这些文件不放在 Web 可访问路径下——后者才是根本防线。
核心方案:用 FilesMatch 一键封禁常见敏感后缀
把以下配置放入虚拟主机(<virtualhost></virtualhost>)或站点根目录的 <directory></directory> 块中(不能写在 .htaccess 或 <location></location> 里):
<filesmatch></filesmatch>Require all denied
注意结尾必须加 $,防止误杀如 mysql.php 这类含子串但非目标后缀的文件。Apache 默认区分大小写,若需兼容 .SQL 或 .ENV,建议统一用小写写法,并启用 mod_speling 模块,或改用 mod_rewrite 方案。
关键加固:不让敏感文件出现在 DocumentRoot 中
配置文件(如 php.ini、.env、config.php)本就不该放在网站根目录下。正确做法是:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
php.ini放在/etc/php/等系统路径,由 PHP 引擎读取,不走 HTTP 请求 -
.env或数据库配置文件移出/var/www/html,放到上层非 Web 目录(如/var/www/config/),再通过 PHP 的file_get_contents或parse_ini_file安全加载 - 若必须保留在 Web 路径内,应在
config.php开头加<?php die('Access denied'); ?>作为兜底防护
补充防护:对敏感目录单独设限
除了文件后缀,还要隔离存放备份、日志、版本库的目录。例如:
<directory></directory>Require all deniedOptions None
同样适用于 /logs/、/.git/、/vendor/ 等路径。这类配置必须放在 <virtualhost></virtualhost> 内或全局 <directory></directory> 块中,避免被 .htaccess 覆盖。
验证是否生效的三个检查点
配置完成后,务必测试:
- 浏览器访问
https://yoursite/.env→ 应返回403 Forbidden,不是下载或200 OK - 访问
https://yoursite/.git/config→ 同样应 403 - 尝试请求
https://yoursite/config.php→ 若文件存在且未移出 Web 目录,也应 403
改完主配置后执行 apachectl configtest 检查语法,再 systemctl reload apache2 生效。Debian/Ubuntu 用户还需确认 a2enmod rewrite 已启用(用于备用规则)。










