我在共享主机配置中使用 PHP-FPM。每个 FPM 池都以不同的用户身份运行。Apache 以 www-data 身份运行。Apache 使用 mod_proxy_fcgi 通过套接字连接。我允许用户使用 .htaccess 文件。
如何防止用户连接到错误的 FPM 池?
vhost 看起来像这样:
<VirtualHost *:80>
ServerName foo.com
DocumentRoot /var/www/sites/foo.com/html
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/foo-com-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
但是,foo-com 用户可以轻松地从他的 .htaccess 中覆盖该处理程序:
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/bar-com-fpm.sock|fcgi://localhost"
</FilesMatch>
这将允许他以其他用户身份运行 PHP 脚本。如何在不禁止 FileInfo 覆盖的情况下阻止这种情况发生?
答案1
AllowOverrideList
允许进一步将 .htaccess 指令限制在指定的列表中。
引用自文档:
当此指令设置为
None
并且AllowOverride
设置为None
时,.htaccessfiles 将被完全忽略。在这种情况下,服务器甚至不会尝试读取.htaccess
文件系统中的文件。例子:
AllowOverride None AllowOverrideList Redirect RedirectMatch
在上面的例子中,只 允许使用
Redirect
和指令。所有其他指令都会导致内部服务器错误。RedirectMatch
例子:
AllowOverride AuthConfig AllowOverrideList CookieTracking CookieName
在上面的例子中,
AllowOverride
授予指令组权限AuthConfig
,并且AllowOverrideList
仅授予FileInfo
指令组中两个指令的权限。所有其他权限都将导致内部服务器错误。