首先,要了解几个定义值,即PHP_INI_*常量的定义
常量 | 含义 |
---|---|
PHP_INI_USER | 该配置选项可在用户的PHP脚本或Windows注册表中设置 |
PHP_INI_PERDIR | 该配置选项可在用户的PHP.htaccess或httpd.conf中设置 |
PHP_INI_SYSYTEM | 该配置选项可在php.ini或hpptd.conf中设置 |
PHP_INI_ALL | 该配置选项可在任何地方中设置 |
php.ini only | 该配置选项仅可在php.ini中设置 |
然后,有几个会影响PHP脚本安全的配置列表以及核心配置选项。
1.register_globals(全局变量注册开关)
该选项值为on时,会直接把用户GET\POST等方式提交上来的参数注册成全局变量并初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。
从PHP 5.3.0起废弃,PHP5.4.0中移除了该选项。
2.allow_url_include(是否包含远程文件)
了这个配置指令对PHP安全的影响不可小觑。该配置选项为ON的情况下,它可以直接包含远程文件。
3.magic_quotes_gpc(魔术引号自动过滤)
只要它被开启,在不存在编码或者其他特殊绕过的情况下,可以使很多漏洞无法被利用。
当该选项为on时,会自动在GET\POST\COOKIE变量中的单引号、双引号、反斜杠(\)以及空字符前加上反斜杠。
4.magic_quotes_runtime(魔术引号自动过滤)
它也是自动在单引号、双引号、反斜杠以及空字符前加上反斜杠。它跟magic_quotes_gpc的区别是,处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤。
5.magic_quotes_sybase(魔术引号自动过滤)
该指令用于过滤特殊字符,当设置为on时,它会覆盖掉magic_quotes_gpc的配置。这个指令与gpc的共同点是处理的对象一致,即都对GET\POST\COOKIE进行处理。而它们的区别在于处理的方式不一样。magic_quotes_sybase仅仅是**转义了空字符和把单引号变成双引号。**与gpc相比,这个指令使用的更少。
6.safe_mode(安全模式)
安全模式是PHP内嵌的一种安全机制,当为on时,联动可以配置的指令有safe_mode_include_dir,safe_mode_exec_dir,safe_mode_allowed_env_vars,safe_mode_protected_env_vars.指令的配置范围是PHP_INI_SYSTEM.
这个配置会出现下面限制:
(1)所有文件操作函数(例如unlink(),file(),include())等都会受到限制。
(2)通过函数popen(),system(),exec()等函数执行命令或程序会提示错误。