介绍safe_mode
safe_mode是PHP中一种保护模式,在此模式中PHP有一些限制,比如只允许打开一些指定目录下的文件、只允许执行特定的系统命令等。这可以大大降低恶意用户利用PHP脚本进行攻击。
然而,safe_mode不是绝对安全的,有时会给用户带来一些不便。比如在合法的目录外读取文件会失败,许多扩展会受限制等等。
PHP为了让用户更细致地控制safe_mode,提供了许多配置项,可以在php.ini文件中进行设置。这些配置项可以使safe_mode更灵活(不过相应的也会增加复杂度)。
影响PHP系统函数
safe_mode能够影响到一些PHP系统函数,下面依次来介绍这些影响。
1. system、exec、shell_exec、passthru、popen、proc_open等命令执行函数
在safe_mode中,这些命令执行函数的使用受到严格限制。比如,只允许执行指定的命令、只允许指定目录下的命令等。
这是为了防止恶意用户通过这些函数执行一些危险操作,比如删除系统文件等。
2. file_put_contents、file_get_contents、unlink等文件操作函数
在safe_mode中,这些文件操作函数的使用也受到限制。只允许操作指定目录下的文件、只允许写入指定目录、只允许删除指定的文件等等。
这是为了防止恶意用户通过这些函数对系统文件进行修改或者删除。
3. chdir、mkdir、rename、rmdir等目录操作函数
在safe_mode中,这些目录操作函数的使用也受到限制。只允许操作指定目录、只允许创建指定的目录或者文件夹等。
这是为了防止恶意用户通过这些函数访问未授权的目录或者创建恶意目录,从而破坏系统文件结构。
4. set_time_limit、ini_set等设置函数
在safe_mode中,这些设置函数的使用也受到限制。只允许设置指定的参数、只允许在指定目录下运行等等。
这是为了防止恶意用户通过这些函数设置恶意参数,从而影响系统运行效率。
5. all
除了以上几个类型的函数被影响外,safe_mode还会影响一些与系统安全有关的函数。如PHP内嵌web服务器(PHP 5.4中引入的)、MySQL扩展中的mysql_connect等等。
这些函数被safe_mode影响的方式,既有可能是不允许其工作(如内嵌web服务器无法运行),也有可能是限制其工作(如mysql_connect只允许连接特定的数据库和地址)。
safe_mode对PHP系统函数的影响是为了保护系统安全,降低被攻击的风险。但是在某些情况下,safe_mode会给用户带来一些不便。因此,用户需要根据自己的需求来决定是否开启safe_mode。