您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

php中的安全模式

添加时间:2014-7-23 17:07:15  添加: 思海网络 
被安全模式限制或屏蔽的函数 
PHP 的安全模式是为了试图解决共享服务器(shared-server)安全问题而设立的。在结构上,试图在 PHP 层上解决这个问题是不合理的,但修改 WEB 服务器层和操作系统层显得非常不现实。因此许多人,特别是 ISP,目前使用安全模式。 


表格 24-1. 控制安全模式的设置选项有: 

设置选项 默认值 
safe_mode Off 
safe_mode_gid 0 
safe_mode_include_dir "" 
safe_mode_exec_dir 1 
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-- 1 rasmus rasmus 33 Jul 1 19:20 .php 
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd 

运行 .php <?php 
readfile('/etc/passwd'); 
?> 

如果安全模式被激活,则将会导致以下错误: Warning: SAFE MODE Restriction in effect. The whose uid is 500 is not 
allowed to access /etc/passwd owned by uid 0 in /docroot/.php on line 2 



同时,或许会存在这样的环境,在该环境下,宽松的 GID 检查已经足够,但严格的 UID 检查反而是不适合的。您可以用 safe_mode_gid 选项来控制这种检查。如果设置为 On 则进行宽松的 GID 检查;设置为 Off(默认值)则进行 UID 检查。 

除了 safe_mode 以外,如果您设置了 open_basedir 选项,则所有的文件操作将被限制在您指定的目录下。例如: <Directory /docroot> 
php_admin_value open_basedir /docroot 
</Directory> 

如果您在设置了 open_basedir 选项后运行同样的 .php,则其结果会是: Warning: open_basedir restriction in effect. File is in wrong directory in 
/docroot/.php on line 2 



您也可以单独地屏蔽某些函数。请注意 disable_functions 选项不能在 php.ini 文件外部使用,也就是说您无法在 httpd.conf 文件的按不同虚拟主机或不同目录的方式来屏蔽函数。 如果我们将如下内容加入到 php.ini 文件: disable_functions readfile,system 

则我们会得到如下的输出: Warning: readfile() has been disabled for security reasons in 
/docroot/.php on line 2 



被安全模式限制或屏蔽的函数 
以下安全模式列表可能不完整或不正确。 

表格 24-2. 安全模式限制函数 

函数名 限制 
dbmopen() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
dbase_open() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
filepro() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
filepro_rowcount() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
filepro_retrieve() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
ifx_*() sql_safe_mode 限制, (!= safe mode) 
ingres_*() sql_safe_mode 限制, (!= safe mode) 
mysql_*() sql_safe_mode 限制, (!= safe mode) 
pg_loimport() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
posix_mkfifo() 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
putenv() 遵循 ini 设置的 safe_mode_protected_env_vars 和 safe_mode_allowed_env_vars 选项。请参考 putenv() 函数的有关文档。 
move_uploaded_file() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
chdir() 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
dl() 该函数在安全模式中已被屏蔽。 
backtick operator 该函数在安全模式中已被屏蔽。 
shell_exec()(在功能上和 backticks 函数相同) 该函数在安全模式中已被屏蔽。 
exec() 您只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。 
system() 您只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。 
passthru() 您只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。 
popen() 您只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。 
mkdir() 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
rmdir() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
rename() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
unlink() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
copy() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 (on source and target) 
chgrp() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
chown() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 
chmod() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 另外,您不能设置 SUID、SGID 和 sticky bits 
touch() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 
symlink() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 (注意:仅测试 target) 
link() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 (注意:仅测试 target) 
getallheaders() 在安全模式下,以“authorization”(区分大小写)开头的头信息将不会被返回。警告:getallheaders() 无法在 aol-server 下实现! 
header() 在安全模式下,如果您设置了 WWW-Authenticate,当前脚本的 uid 将被添加到该头信息的 realm 部分。 
highlight_file(), show_source() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 (注意,仅在 4.2.1 版本后有效) 
parse_ini_file() 将检查您将要操作的文件/目录与正在执行的脚本是否有相同的 UID。 将检查您将要操作的目录和正在执行的脚本是否有相同的 UID。 (注意,仅在 4.2.1 版本后有效) 

任何使用 php4/main/fopen_wrappers.c 的函数 。

关键字:安全模式、php、服务器

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站