php全局变量有哪些(php的安装和配置教程)

php全局变量有哪些(php的安装和配置教程)

代码在不同环境下执行的结果大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用;也可能你已经找到的一个漏洞就因为你的配置有问题,导致你测试很久都无法构造有效的 exp,因此我们在做安全渗透或者代码审计的时候都要非常熟悉 PHP 各个版本中配置文件的核心指令,这样就能更高效的挖掘到高质量漏洞。

1.1 PHP 配置可被设定范围

PHP 的配置文件为 PHP.ini,里面的配置指令多达数百项。这些模式决定着一个 PHP的指令在何时何地,是否能够被设定。手册中的每个指令都有其所属的模式。例如有些指令可以 PHP 脚本中用 ini_set()来设定,而有些则只能在 php.ini 或 httpd.conf 中去修改。

例如output_buffering指令是属于PHP_INI_PERDIR,因而就不能用ini_set()来设定。但但是 display_errors 指令是属于 PHP_INI_ALL 因而就可以在任何地方被设定,包括ini_set()。

下表是PHP_ini_*模式的定义

模式

定义

PHP_INI_USER

该配置选项可在用户的 PHP 脚本或 Windows 注册表中设置

PHP_INI_PERDIR

该配置选项可在 php.ini,.htaccess 或 httpd.conf 中设置

PHP_INI_SYSTEM

该配置选项可在 php.ini 或 httpd.conf 中设置

PHP_INI_ALL

该配置选项可在任何地方设置

php.ini only

该配置选项仅能在 php.ini 中设置

从表中可以看到,ini_set()的应用范围只能用于 PHP_INI_USER 和 PHP_INI_ALL 这两

种模式的配置。

PHP 配置项太多,我们不会全部说明,只会把跟安全有关的配置列出来讲解。

1.2 register_globals(全局变量注册开关)

配置解释:

当该配置设置为 on 时,会直接把用户 GET、POST 等方式提交上来的参数注册成全局变量并初

始化值为参数对应的值,使得参数可以直接在脚本中使用。

配置模式:

PHP_INI_ALL

默认配置:

register_globals = Off

该配置在PHP5.4.0 已经被移除,所以受影响的只有 5.4.0 之前的版本。

1.3 allow_url_include(是否允许包含远程文件)

配置解释:

在该配置为 on 的时,它可以直接包含远程文件。

配置模式:

PHP_INI_SYSTEM

默认配置:

从 PHP5.2.0 起,allow_url_include = Off

该配置造成安全问题在于,当包含文件 include($var)时,如果$var 可控,那么攻击者可以利用来远程执行代码。具体细节请参见“文件包含漏洞”的章节。

1.4 magic_quotes_gpc(魔术引号自动过滤)

配置解释:

当该选项配置为 on 时,会自动在 GET、POST、COOKIE 变量中的单引号(‘)、双引号(“)、反

斜杠(\)及空字符(NULL)的前面加上反斜杠(\)转义。

配置模式:

PHP_INI_PERDIR

默认配置:

magic_quotes_gpc = On

magic_quotes_gpc 在安全方面做了很大共享,只要它被开启,在不存在特殊编码或者

其他特殊绕过的情况下,可以使得很多漏洞无法被利用,这也正是让很多渗透测试人员头疼

的东西。它也有缺陷,就是不会过滤$_SERVER 变量,导致很多 client-ip,referer 一类的漏洞能够被利用。

来看简单的例子:

当配置为 off 时,输入的特殊符号被当成正常的输入,当配置为 on 时:

可以看到单引号被加了反斜杠做转义。

魔术引号自动过滤的配置有 3 个,它们分别是:

1.magic_quotes_gpc;

2.magic_quotes_runtime;

3.magic_quotes_sybase

这三个配置开启为 on 的时候都会过滤特殊字符,但是在 PHP5.4 之后的版本中(包括

5.4)被移除了。原因在于这些配置在实际运用中会把很多正常的符号过滤,对用户来说实

在不太友好。PHP 推荐开发人员使用其他过滤函数而不是利用配置文件进行过滤。

1.5 open_basedir PHP(PHP 可访问目录)

配置解释:

该配置将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。

配置模式:

PHP 版本<5.2.3: PHP_INI_SYSTEM

PHP 版本>=5.2.3:PHP_INI_ALL

默认配置:

open_basedir = NULL

使用该配置时,多个目录以分号;分割。值得注意的是,open_basedir 限制的是前缀,而不是目录名,比如 open_basedir=/www/a,那么目录/www/a 和目录/www/ab 都是可以访问的,所以如果要限定在指定的目录内,需要精确指定结束路径,比如设置成open_basedir =/www/a/。当该配置运行后,执行脚本访问其他文件都需要验证文件路径,因此对效率有

影响。

1.6 disable_functions(禁用函数)

配置解释:

本指令允许用户基于安全原因禁止某些函数。接受逗号分隔的函数名列表作为参数。

配置模式:

php.ini only

默认配置:

disable_functions = “”

当用户进制一些危险函数时,切记要把 dl()函数加到禁止列表,因为攻击者可以利用

dl()函数加载自定义的 PHP 扩展以突破 disable_functions 的限制。

配置禁用函数举例:disable_functions=phpinfo,eval,assert,system,passthru。

1.7 display_errors 和 error_reporting(报错显示)

配置解释:

该配置为 on 时,会把错误信息作为输出的一部分显示在屏幕上。

配置模式:

PHP_INI_ALL

默认配置:

display_errors = On

该配置对于开发过程中的调试非常有用。但是在实际使用环境中,建议关闭,以避免攻

击者通过报错内容搜集到有用的信息。当display_error=on时,还可以使error_reporting 来配置错误显示的级别。

error_reporting 也可以使用 error_reporting() 函数来设置当设置error_reporting(0)时,及时 display_error=on,也不会显示任何错误信息。

1.8 auto_prepend_file和auto_append_file(自动包含)

配置解释:

auto_prepend_file 设置在任何 PHP 文档之前自动包含的文件。

auto_apppend_file 设置在任何 PHP 文档之后自动包含的文件

配置模式:

PHP_INI_PERDIR

默认配置:

auto_prepend_file = “”

ato_append_file = “”

当设置 auto_prepend_file = ‘/www/1.php’时候,那么 1.php 都将被同路径下其他

PHP 文件运行之前包含。这项配置从安全上可用于网页监控。当出现黑客入侵时,运维人员

也要检查这类敏感配置,查看是否被黑客植入自动运行的木马。

你可能喜欢的文章

pwnhub公开赛WEB题解题思路pwnhub公开赛WEB题解题思路F5 BIG-IP CVE-2020-5902远程代码执行漏洞复现及修复方法SQL二次注入原理分析PHP反序列化字符逃逸详解Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)

发表评论

登录后才能评论