Apache 虚拟主机中设置 PHP 环境变量,open_basedir 相关

知识回顾:

open_basedir是php.ini中的一个配置选项

它可将用户访问文件的活动范围限制在指定的区域,

假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的

用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。

注意用open_basedir指定的限制实际上是前缀,而不是目录名。

举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是

可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。



1,php_admin_value 和 php_value 区别

相同的地方是:这两个命令都是用来在Apache服务器中针对不同的虚拟主机、目录设置不同的php选项的。

不同的地方是:php_admin_value(php_admin_flag)命令只能用在apache的httpd.conf文件中,而 php_value(php_flag)则是用在.htaccess文件中的。


2,CentOS 8 + Apache 2.4 的虚拟主机中,设置 php_admin_value 和 php_value 必须大写

在虚拟主机配置中添加下面一行:

SetEnv php_value open_basedir=/var/www/_error/:/tmp/


当 php_value 是小写的时候,Core 下的 open_basedir 是空值,只在 PHP Variables 有个记录,并且实际上 PHP 是可以访问其他目录的。如下代码,可以显示所有目录内容。

echo "<pre>";
print_r(scandir("/var/www"));
print_r(scandir("/var/www/_error"));
print_r(scandir("/var"));
echo "</pre>";


只有设置 PHP_VALUE 大写的时候,Core 下的 open_basedir 才有值,open_basedir 才起作用。

SetEnv PHP_VALUE open_basedir=/var/www/_error/:/tmp/ 



3, 更多 open_basedir 安全相关问题

3.1 由于 open_basedir 的设置对 system 等命令执行函数是无效的,所以 disable_function 中一定要禁用 system 函数。

3.2 在Linux环境下,通过symlink完成一些逻辑上的绕过导致可以跨目录操作文件。sysmlink 也需要禁用。



4, Windows 下配置和性能问题参考如下地址

https://javascript.net.cn/article?id=451



声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
Debian11 安装笔记3:安装 MySQL 5.7
JavaScript 类
WordPress 数据库表结构
Node.js child_process 模块
WordPress 输入安全
Node.js 内置模块
Wordpress 主样式表(style.css)
CRSF 跨站脚本攻击已死,使用 Same-Site Cookies 来防范 CSRF