php中的安全模式是指的什么?
php中的安全模式是指的什么?
手册如是说:
章24.安全模式
目录
被安全模式限制或屏蔽的函数
PHP的安全模式是为了试图解决共享服务器(shared-server)安全问题而设立的。在结构上,试图在PHP层上解决这个问题是不合理的,但修改WEB服务器层和操作系统层显得非常不现实。因此许多人,特别是ISP,目前使用安全模式。
表格24-1.控制安全模式的设置选项有:
设置选项默认值
safe_mode Off
safe_mode_gid0
safe_mode_include_dir""
safe_mode_exec_dir1
open_basedir""
safe_mode_allowed_env_vars PHP_
safe_mode_protected_env_vars LD_LIBRARY_PATH
disable_functions""
当safe_mode设置为on,PHP将检查当前脚本的拥有者是否和将被文件函数操作的文件的拥有者相匹配。例如:-rw-rw-r--1rasmus rasmus33Jul119:20script.php
-rw-r--r--1root root1116May2618:01/etc/passwd
运行script.php<?php
readfile('/etc/passwd');
?>
如果安全模式被激活,则将会导致以下错误:Warning:SAFE MODE Restriction in effect.The script whose uid is500is not
allowed to access/etc/passwd owned by uid0in/docroot/script.php on line2
同时,或许会存在这样的环境,在该环境下,宽松的GID检查已经足够,但严格的UID检查反而是不适合的。您可以用safe_mode_gid选项来控制这种检查。如果设置为On则进行宽松的GID检查;设置为Off(默认值)则进行UID检查。
除了safe_mode以外,如果您设置了open_basedir选项,则所有的文件操作将被限制在您指定的目录下。例如:<Directory/docroot>
php_admin_value open_basedir/docroot
</Directory>
如果您在设置了open_basedir选项后运行同样的script.php,则其结果会是:Warning:open_basedir restriction in effect.File is in wrong directory in
/docroot/script.php on line2
您也可以单独地屏蔽某些函数。请注意disable_functions选项不能在php.ini文件外部使用,也就是说您无法在httpd.conf文件的按不同虚拟主机或不同目录的方式来屏蔽函数。如果我们将如下内容加入到php.ini文件:disable_functions readfile,system
则我们会得到如下的输出:Warning:readfile()has been disabled for security reasons in
/docroot/script.php on line2
被安全模式限制或屏蔽的函数
以下安全模式列表可能不完整或不正确。