详解php.ini中开启safe_mode安全模式的影响

 PHP   高蒙   阅读(2543)   评论(0)   2016-04-02 13:04:21    php safe_mode php.ini中开启safe_mode php 安全模式 


 近日在学习的过程中,突然遇到php安全模式的问题。如果设置了safe_mode=on的话,对于我们网站项目中会出现哪些问题。刚接触到这个的时候,把我也愣住了,于是乎,我就详细的学习了下。

当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()的文件拥有者用户名相同。

详细的解释可以查看官网:

http://www.php.net/manual/zh/ini.sect.safe-mode.php

php safe_mode影响参数

函数名             限制

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 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 

system() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 

passthru() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 

popen() 只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。 

fopen() 检查被操作的目录是否与正在执行的脚本有相同的 UID(所有者)。

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)

apache_request_headers() 在安全模式下,以“authorization”(区分大小写)开头的标头将不会被返回。 

header() 在安全模式下,如果设置了 WWW-Authenticate,当前脚本的 uid 将被添加到该标头的 realm 部分。

PHP_AUTH 变量 在安全模式下,变量 PHP_AUTH_USER、PHP_AUTH_PW 和 PHP_AUTH_TYPE 在 $_SERVER 中不可用。但无论如何,您仍然可以使用 REMOTE_USER 来获取用户名称(USER)。(注意:仅 PHP 4.3.0 以后有效)

highlight_file(), show_source() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与正在执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效) 

parse_ini_file() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与正在执行的脚本有相同的 UID(所有者)。 (注意,仅在 4.2.1 版本后有效)

set_time_limit() 在安全模式下不起作用。 

max_execution_time 在安全模式下不起作用。 

mail() 在安全模式下,第五个参数被屏蔽。




相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客