background image

php

 

     安全模式

 

     safe_mode

 

     介绍

 

 

PHP 的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在
的 PHP 开放的 Web 服务器上它会比较知性脚本 UID(用户 ID)和脚本尝试
访问的文件的 UID,以此作为限制机制的基础。如果 UID 相同,则知性脚本;
否则,脚本失败。由于启用了安全模式后,由于会对比文件的拥有者和文件的
执行者是否是一个人,所以会减慢执行效率。

当 safe_mode=On 时,会出现下面限制:
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_gid=on|off
次指令会修改安全模式的行为,即从执行前验证 UID 改为验证组 ID。例如,
如果 Mary 和 John 处于相同的用户组,则 Mary 的脚本可以对 John 的文件调
用 fopen()。
safe_mode_include_dir=string
可以使用指令 safe_mode_include_dir 指示多个路径,启用安全模式时在这
些路径中将忽略安全模式。例如,你可以使用此函数指定一个包含不同模板的
目录,致谢模板可能会继成到一些用户网站。可以指定多个目录,在基于
UNIX 的系统各目录用冒号分隔,在 Windows 中用分号分隔。