有关php的安全模式详细介绍

有关php的安全模式详细介绍

php安全模式:safe_mode=on|off

启用safe_mode指令将对在共享环境中使用PHP时可能有危险的语言特性有所限制。可以将safe_mode是指为布尔值on来启用,或者设置为off禁用。它会比较知性脚本UID(用户ID)和脚本尝试访问的文件的UID,以此作为限制机制的基础。如果UID相同,则知性脚本;否则,脚本失败。

具体地,当启用安全模式时,一些限制将生效。

1、所有输入输出函数(例如fopen()、file()和require())的适用会受到限制,只能用于与调用这些函数的脚本有相同拥有者的文件。例如,假定启用了安全模式,如果Mary拥有的脚本调用fopen(),尝试打开由Jonhn拥有的一个文件,则将失败。但是,如果Mary不仅拥有调用fopen()的脚本,还拥有fopen()所调用的文件,就会成功。

2、如果试图通过函数popen()、system()或exec()等执行脚本,只有当脚本位于safe_mode_exec_dir配置指令指定的目录才可能。

3、HTTP验证得到进一步加强,因为验证脚本用于者的UID划入验证领域范围内。此外,当启用安全模式时,不会设置PHP_AUTH。

4、如果适用MySQL数据库服务器,链接MySQL服务器所用的用户名必须与调用mysql_connect()的文件拥有者用户名相同。

安全模式和禁用的函数

下面是启用safe_mode指令时受影响的函数、变量及配置指令的完整列表:

apache_request_headers()backticks()和反引号操作符chdir()

chgrp()chmode()chown()

copy()dbase_open()dbmopen()

dl()exec()filepro()

filepro_retrieve()filepro_rowcount()fopen()

header()highlight_file()ifx_*

ingres_*link()mail()

max_execution_time()mkdir()move_uploaded_file()

mysql_*parse_ini_file()passthru()

pg_lo_import()popen()posix_mkfifo()

putenv()rename()zmdir()

set_time_limit()shell_exec()show_source()

symlink()system()touch()

以下是一些和安全模式相关的配置选项

safe_mode_goff

次指令会修改安全模式的行为,即从执行前验证UID改为验证组ID。例如,如果Mary和John处于相同的用户组,则Mary的脚本可以对John的文件调用fopen()。

safe_mode_include_dir=string

可以使用指令safe_mode_include_dir指示多个路径,启用安全模式时在这些路径中将忽略安全模式。例如,你可以使用此函数指定一个包含不同模板的目录,致谢模板可能会继成到一些用户网站。可以指定多个目录,在基于UNIX的系统各目录用冒号分隔,在Windows中用分号分隔。

注意,如果指定某个路径但未包含最后的斜线,则该路径下的所有目录都会忽略安全模式设置。例如,如果设置次指令为/home/configuration,表示/home/configuration/templates/和/home/configureation/passwords都排除在安全模式限制之外。因此,如果只是要排除一个目录或一组目录不受安全模式设置的限制,要确保每个目录都包括最后的斜线。

safe_mode_env_vars=string

当启用安全模式时,可以只用次指令允许执行用户的脚本修改某些环境变量。可以允许修改多个变量,每个变量之间用逗号分隔。

safe_mode_exec_dir=string

次指令指定一些目录,其中的系统程序可以通过诸如system()、exec()或passthru()等函数执行。为此必须启用安全模式。此指令有一个奇怪的地方,在所有操作系统中(包括Windows),都必须使用斜线(/)作为目录的分隔符。

safe_mode_protected_env_vars=string

此指令保护某些环境变量不能被putenv()函数修改。默认情况下,变量LD_LIBRARY_PATH是受保护的,因为如果在运行时修改这个变量可能导致不可预知的结果。关于此环境变量的更多信息,请参考搜索引擎或Linux手册。注意,本届中声明的所有便来弄个都覆盖safe_mode_allowed_env_vars指令中声明的变量。

Linux下的Apache和PHP安全设置

PHP安全模式开启,PHP5.3将不再有安全模式,

safe_mode:以安全模式运行php;

在php.ini文件中使用如下

safe_mode=On(使用安全模式)

safe_mode=Off(关闭安全模式)

在apache的httpd.conf中VirtualHost的相应设置方法

php_admin_flag safe_mode On(使用安全模式)

php_admin_flag safe_mode Off(关闭安全模式)

或者:

php_admin_value safe_mode1(使用安全模式)

php_admin_value safe_mode0(关闭安全模式)

(2)safe_mode_include_dir:无需UID/GID检查的目录;

(3)open_basedir:将用户可操作的文件限制在某目录下;

a、在Apache的httpd.conf中Directory的相应设置方法:

php_admin_value open_basedir/usr/local/apache/htdocs/:/tmp/

b、在php.ini中设置open_basedir=.:/tmp/,这个设置表示允许

访问当前目录(即PHP文件所在目录)和/tmp/目录。

(4)disable_functions:设置禁用函数;

典型的安全性配置

disable_functions=shell_exec,system,exec,passthru,show_source,get_cfg_var,dl

若允许用户调试程序,则配置如下:

disable_functions=shell_exec,system,exec,passthru

(5)register_globals:禁止注册全局变量;

register_globals=On(自动注册为全局变量)

register_globals=Off(不可注册为全局变量)

(6)magic_quotes_gpc:令敏感字元转义

magic_quotes_gpc=On

magic_quotes_gpc=Off

在Apache的httpd.conf中VirtualHost的相应设置方法:

php_admin_flag magic_quotes_gpc on

或者:

php_admin_value magic_quotes_gpc1