返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >代码审计之PHP核心配置详解
  • 342
分享到

代码审计之PHP核心配置详解

php开发语言服务器 2023-10-09 12:10:08 342人浏览 独家记忆
摘要

代码审计之PHP核心配置详解 1.register_globals(全局变量注册开关)2.allow_url_include(是否允许包含远程文件)3.magic_quotes_gpc(魔术引

代码审计之PHP核心配置详解

php_INI_*常量的定义

在这里插入图片描述

1.reGISter_globals(全局变量注册开关)

该选项在设置为on的情况下,会直接把用户GET、POST等方式提交上来的参数注册成全局变量并初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。

register_globals在 PHP版本小于等于4.2.3时设置为PHP_INI_ALL,从 PHP 5.3.0起被废弃,不推荐使用,在PHP 5.4.0中移除了该选项

register_globals设置为on且PHP版本低于5.4.0时,如下代码输出结果为true:

?phpif($user=='admin') {echo 'true';//do something}

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

在该配置为on的情况下,它可以直接包含远程文件,当存在include ($var)$var可控的情况下,可以直接控制$var变量来执行PHP代码

allow_url_include在PHP5.2.0后默认设置为off,配置范围是PHP_INI_ALL。与之类似的配置有allow_url_fopen,配置是否允许打开远程文件**

配置allow_url_include为on,可以直接包含远程文件。测试代码如下:

?phpinclude $_GET['a'];

在这里插入图片描述


3.magic_quotes_gpc(魔术引号自动过滤)

当该选项设置为on时,会自动在GET、POST、COOKIE变量中的单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\),但是在PHP 5中magic_quotes_gpc并不会过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用

在PHP 5.3之后的不推荐使用magic_quotes_gpc,PHP5.4之后干脆被取消。在PHP版本小于4.2.3时,配置范围是PHP_INI_ALL;在PHP版本大于4.2.3时,是PHP_INI_PERDIR

?phpecho $_GET['seay'];

在这里插入图片描述


4.magic_quotes_runtime(魔术引号自动过滤)

magic_quotes_runtime也是自动在单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\)。它跟magic_quotes_gpc的区别是,处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤

很多程序员只对外部输入的数据进行过滤,却没有想过从数据库获取的数据同样也会有特殊字符存在,所以攻击者的做法是先将攻击代码写入数据库,在程序读取、使用到被污染的数据后即可触发攻击

magic_quotes_runtime在PHP 5.4之后也被取消,配置范围是PHP_INI_ALL

#文件1.txt1'2"3\4#文件1.php<?phpini_set("magic_quotes_runtime", "1");echo file_get_contents("1.txt");

在这里插入图片描述


5.magic_quotes_sybase(魔术引号自动过滤)

magic_quotes_sybase指令用于自动过滤特殊字符,当设置为on时,它会覆盖掉magic_quotes_gpc=on的配置,也就是说,即使配置了gpc=on也是没有效果的。这个指令与gpc的共同点是处理的对象一致,即都对GET、POST、Cookie进行处理。而它们之前的区别在于处理方式不一样,magic_quotes_sybase仅仅是转义了空字符和把单引号(‘)变成了双引号(’')

它的配置范围是PHP_INI_ALL,在PHP 5.4.0中移除了该选项

?phpecho $_GET['a'];?

在这里插入图片描述


6.safe_mode(安全模式)

安全模式是PHP内嵌的一种安全机制

safe_mode指令的配置范围为PHP_INI_SYSTEM,PHP 5.4之后被取消

这个配置会出现下面限制:

所有文件操作函数(例如unlink()、file()和include())等都会受到限制。例如,文件a.php和文件c.txt的文件所有者是用户a,文件b.txt的所有者是用户b并且与文件a.php不在属于同一个用户的文件夹中,当启用了安全模式时,使用a用户执行a.php,删除文件c.txt可成功删除,但是删除文件b.php会失败。对文件操作的include等函数也一样,如果有一些脚本文件放在非WEB服务启动用户所有的目录下,需要利用include等函数来加载一些类或函数,可以使用safe_mode_include_dir指令来配置可以包含的路径

通过函数popen()、system()以及exec()等函数执行命令或程序会提示错误。如果我们需要使用一些外部脚本,可以把它们集中放在一个目录下,然后使用safe_mode_exec_dir指令指向脚本的目录


7.open_basedir PHP可访问目录

open_basedir指令用来限制PHP只能访问哪些目录,通常我们只需要设置Web文件目录即可

如果需要加载外部脚本,也需要把脚本所在目录路径加入到open_basedir指令中,多个目录以分号()分割。

使用open_basedir需要注意的一点是,指定的限制实际上是前缀,而不是目录名。例如,如果配置open_basedir=/www/a,那么目录/www/a/www/ab都是可以访问的。所以如果要将访问仅限制在指定的目录内,请用斜线结束路径名。例如设置成:open_basedir=/www/a/

该指令的配置范围在 PHP版本小于5.2.3时是PHP_INI_SYSTEM,在PHP版本大于等于5.2.3是PHP_INI_ALL


8.disable_functions(禁用函数)

在正式的生产环境中,为了更安全地运行PHP,也可以使用disable_functions指令来禁止一些敏感函数的使用。当你想用本指令禁止一些危险函数时,切记要把dl()函数也加到禁止列表,因为攻击者可以利用dl()函数来加载自定义的PHP扩展以突破disable_functions指令的限制

本指令配置范围为php.ini only。配置禁用函数时使用逗号分割函数名,例如:disable_functions=phpinfo,eval,passthru,exec,system


9.display_errors和error_reporting错误显示

display_errors表明是否显示PHP脚本内部错误的选项,在调试PHP的时候,通常都把PHP错误显示打开,但是在生产环境中,建议关闭PHP错误回显,即设置display_errors=off,以避免带来一些安全隐患

在设置display_errors=on时,还可以配置的一个指令是error_reporting,这个选项用来配置错误显示的级别,可使用数字也可使用内置常量配置

在这里插入图片描述

这两个指令的配置范围都是PHP_INI_ALL

来源地址:https://blog.csdn.net/Gherbirthday0916/article/details/130173968

--结束END--

本文标题: 代码审计之PHP核心配置详解

本文链接: https://lsjlt.com/news/426282.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作