open_basedir必须启用且路径须以斜杠结尾,否则前缀匹配会导致绕过;应配置为如/var/www/html/public/:/var/www/html/:/tmp/:/proc/,多路径用英文冒号分隔,无空格中文,并通过ini_get验证生效。

PHP 8.0 中虚拟目录(如 public/ 入口)若权限配置不当,会直接导致 WebShell 写入、任意文件读取或跨站越权访问——这不是“可能”,而是攻击链中被利用最频繁的环节之一。
为什么 open_basedir 必须启用且路径带尾部斜杠
PHP 8.0 移除了 assert() 的字符串执行能力,但没削弱路径穿越漏洞本身。open_basedir 是内核级白名单,不是开关,不设等于裸奔。常见错误是写成 /var/www/html(缺斜杠),结果 PHP 会把它当作前缀匹配,/var/www/html_evil 也能绕过。
- 必须每段路径以
/结尾,例如:/var/www/html/public/:/var/www/html/:/tmp/:/proc/ - 多个路径用英文冒号分隔,中间不能有空格或中文
- 在
.user.ini中设置时,需先chattr -i .user.ini解锁,保存后再chattr +i .user.ini锁定防篡改 - 验证是否生效:新建一个
info.php,调用ini_get('open_basedir'),输出应为非空字符串
Nginx 层禁执行上传目录的精确写法
仅靠 PHP 层限制不够,攻击者常通过上传 .php 文件再直接请求绕过。Nginx 必须对上传路径做二层拦截,且不能漏掉大小写变体或编码路径(如 %2e%2e)。
- 在站点配置的
location块中加:
location ~ ^/upload/.*\.(php|php5|phtml|phar|sh|pl|py|jsp|asp|aspx|cgi|exe)$ {
deny all;
}
- 注意
^/upload/开头锚定,防止路径遍历后仍命中 - 扩展名列表要覆盖常见 WebShell 后缀,尤其别漏掉
phtml和phar(PHP 8.0 默认启用phar扩展) - 该规则必须放在
location ~ \.php$之前,否则会被优先匹配到 fastcgi_pass
PHP-FPM 用户权限与目录 755/644 的真实含义
很多人以为 chmod 755 就安全了,其实关键不在数字,而在「谁是拥有者」。如果目录属主是 root,而 PHP-FPM 运行用户是 www-data,那 755 的「其他用户」权限就完全失效——www-data 实际只有「其他用户」权限,连读都失败。
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
- Web 根目录(如
/var/www/html)应属主www-data,权限755;代码文件统一644 - 上传目录(如
/var/www/html/upload)同样属主www-data,但权限建议750(组可读执行,其它用户无任何权限) - 敏感配置文件(如
.env)必须600或640,且确保不在 Web 可访问路径下 - 用
ps aux | grep php-fpm确认 master 进程用户,再用ls -l核对目录属主是否一致
虚拟目录暴露风险:重命名 public/ 不够,还得切出敏感路径
框架常用 public/ 作 Web 入口,但攻击者早知道这个惯例。只重命名它没用,真正危险的是 config/、storage/、vendor/ 这些目录仍在 Web 根下,且可能被 file_get_contents() 直接读取。
- 把
config/、storage/、bootstrap/全部移出 Web 根目录,比如放到/etc/myapp/或/var/opt/myapp/ - 在 Nginx 配置里显式禁止访问这些路径:
location ^~ /config/ { return 403; } - 检查
.git、.env、composer.json是否在 Web 可达路径内,若有,立即deny all或物理移走 - PHP 8.0 的
opcache.file_cache若开启,缓存目录也得设为非 Web 可访问路径
最易被忽略的一点:所有路径校验必须在应用代码里二次确认,不能只信服务器配置。哪怕 open_basedir 和 Nginx 都拦住了,一旦某处用了 file_get_contents($_GET['file']) 且没做 realpath() + str_starts_with() 白名单判断,整套加固就形同虚设。


















