1、PHP核心配置详解

  代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用;也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏洞利用代码。

  然而,在不同的PHP版本中配置指令也有不一样的地方,新版可能会增加或者删除部分指令,改变指令默认设置或者固定设置指令,才能高效地挖掘到高质量的漏洞。


PHP_IN_*常量的定义

常量 含义
PHP_IN_USER  该配置选项可在用户的PHP脚本或windows注册表中设置
PHP_IN_PERDIR  该配置选项可在php.ini. .htaccess或httpd.conf中设置
PHP_IN_SYSTEM  该配置选项可在php.ini或httpd.conf中设置
PHP_IN_ALL  该配置选项可在任何地方设置
php.in only  该配置选项可仅在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中移除了该选项。

 


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

  这个配置指令对PHP安全的影响不可小觑。在该配置为on的情况下,它可以直接包含远程文件,当存在include($var)且$var可控的情况下,可以直接控制$var的变量来执行PHP代码。allow_url_include在PHP5.2.0后默认设置为off。配置范围为PHP_IN_ALL。


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

  magic_quotes_gpc在安全方面做了很大贡献,只要它被开启,在不存在编码或者其他特殊绕过的情况下,可以使得很多漏洞无法被利用。当该选项设置为on时,会自动在GET、POST、COOKIE变量中的单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\),但是在PHP 5中magic_quotes_gpc并不会过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用。在PHP 5.3之后的不推荐使用magic_quotes_gpc。

  PHP 5.4之后就取消这个选项了。在PHP版本小于4.2.3时,配置范围是PHP_INI_ALL;在PHP版本大于4.2.3时,是PHP_INI_PERDIR。


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

  magic_quotes_runtime也是自动在单引号(')、双引号(")、反斜杠(\)及控字符(NULL)的前面加上反斜杠(\)。它跟magic_quotes_gpc的区别是,处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤,它的作用也非常大,因为很多程序员只对外部输入的数据进行过滤,却没有想过从数据库获取的数据同样也会有特殊字符存在,所以攻击者的做法是先将攻击代码写入数据库,在程序读取、使用到被污染的数据后即可触发攻击。

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

  只有部分函数受它影响,所以在某些情况下这个配置是可以绕过的。受影响的列表包括:

  get_meta_tags()、file_get_contents()、file()、fgets()、fwrite()、fread()、fputcsv()、stream_socket_recvfrom()、exec()、system()、passthru()、stream_get_contents()、bzread()、gzfile()、gzgets()、gzwrite()、gzread()、exif_read_data()、dba_insert()、dba_replace()、dba_fetch()、ibase_fetch_row()、ibase_fetch_assoc()、ibase_fetch_object()、mssql_fetch_row()、mssql_fetch_object()、mssql_fetch_array()、mssql_fetch_assoc()、mysqli_fetch_row()、mysqli_fetch_assoc()、pg_fetch_array()、pg_fetch_object()、pg_fetch_all()、pg_select()、sybase_fetch_object()、sybase_fetch_array()、sybase_fetch_assoc()、SplFileObject::fgets()、SplFileObject::fgetcsv()、SplFileObject::fwrite()。


5、magic_quote_sybase(魔术引号自动过滤)

  magic_quotes_sybase指令用户自动过滤特殊字符,当设置为on时,它会覆盖掉magic_quote_pgc=on的配置,也就是说,即使配置了gpc=on也是没有效果的。这个指令与gpc的共同点时处理的对象一致,即都对GET、POST、Cookie进行处理。而它们之前的区别在于处理方式不一样,magic_quotes_sybase仅仅是转义了空字符和把单引号(')变为双引号(")。与gpc相比,这个指令使用得更少,它的配置范围是PHP_INI_ALL,在PHP 5.4.0中移除了该选项。


6、safe_mode(安全模式)

  安全模式是PHP内嵌的一种安全机制,当safe_mode=on时,联动可以配置的指令有safe_mode_include_dir、safe_mode_exec_dir、safe_mode_allowed_env_vars、safe_mode_protected_env_vars。safe_mode指令的配置范围为PHP_INI_SYSTEM,PHP 5.4之后被撤销了。


7、open_basedir PHP可访问目录

  open_basedir指令用来显示PHP只能访问哪些目录,通常我们只需要设置Web文件目录即可,如果需要加载外部脚本,也需要把脚本所在目录路径加入到open_basedir指令中,多个目录以分号(;)分割。使用open_dabasedir需要注意一点是,指定的限制实际上是前缀,而不是,目录名。例如,如果配置open_basedir=/www/a,那么目录/www/a和/www/b都可以访问的。所以如果要将访问限制在指定目录内,请用斜线结束路径名。例如设置成:open_basedir=/www/a。

  当open_basedir配置目录后,执行脚本访问其他文件都需要验证文件路径,因此在执行效率上面也会有一定影响的。该指令的配置范围在PHP版本小于5.2.3时是PHP_INI_SYSTEM。在PHP版本大于等于5.2.3是PHP_INI_ALL。


8、disable_functions(禁用函数)

  在正式的生产环境中,为了更安全地运行PHP,也可以使用disable_function指令来禁止一些敏感函数的使用。当你想用本指令禁止一些危险函数时,切记要把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。


PHP的核心配置详解的更多相关文章

  1. Nginx 核心配置详解

    目录 Nginx 核心配置详解 Nginx 四层访问控制: Nginx账户认证功能: 自定义错误页面: 自定义访问日志: 检测文件是否存在: 长连接配置: 作为下载服务器配置: 作为上传服务器: 其他 ...

  2. 写给大忙人的nginx核心配置详解

    由于当前很多应该都是前后端分离了,同时大量的基于http的分布式和微服务架构,使得很多时候应用和不同项目组之间的系统相互来回调用,关系复杂.如果使用传统的做法,都在应用中进行各种处理和判断,不仅维护复 ...

  3. 从Spring到SpringBoot构建WEB MVC核心配置详解

    目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...

  4. IntelliJ IDEA 2017版 SpringBoot的核心配置详解

    Spring Boot的核心   (1)Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法.  (2)@Spri ...

  5. PHP核心配置详解

    基本配置-语法 1:大小写敏感 directive = value 2:运算符 | & ~ ! 3:空值的表达方式 foo = ; foo = none; foo = "none&q ...

  6. 2017.3.31 spring mvc教程(二)核心流程及配置详解

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  7. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  8. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  9. Maven使用笔记(四)pom.xml配置详解

    pom.xml文件配置详解 --声明规范 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

随机推荐

  1. PHP函数memory_get_usage获取PHP内存清耗量

    (PHP 4 >= 4.3.2, PHP 5, PHP 7) memory_get_usage — 返回分配给 PHP 的内存量 说明 int memory_get_usage ([ bool ...

  2. Yii2 如何输出 sql 语句?

    可以用 $model->find()->createCommand()->getRawSql(); 不能带 all(). find() 它的 返回值类型是 yii\db\Active ...

  3. WIndows下将文件夹映射为磁盘

    subst 盘符 文件夹路径 [/d] 映射 将e:\work映射为z:盘,使用subst z: e:\work 取消映射 取消z盘映射,使用subst z: /d 参考资料:http://mp.we ...

  4. APP reset.css

    html { box-sizing: border-box; } * { user-select: none; -webkit-tap-highlight-color: rgba(255,255,25 ...

  5. 系统API执行没效果,可以检查一下是否与 360安全卫士 有关?!

    今天在写一个工具软件,使用到一个系统API: mouse_event() 代码如下: mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,  x2, ...

  6. TCHAR和CHAR类型的互转,string 转lpcwstr

    https://www.cnblogs.com/yuguangyuan/p/5955959.html 没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时 ...

  7. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  8. Day11--Python--函数名,闭包,迭代器

    通过 lst.__iter__()拿到lst.的迭代器 1.函数名第一类对象 函数名就是变量名 1.函数名可以像变量一样互相赋值. 2.可以作为函数的参数,进行传递 3.可以作为返回值返回 4.可以作 ...

  9. post请求中data参数的应用

    一.data为参数,json是自动的把参数转换成了json格式,一般建议用json ,url是请求地址. 二,以一个网站来做解释,看登陆的请求 抓包看一下: 用在代码里面看一下: 如果不转的话,那么用 ...

  10. Luogu P2468 [SDOI2010]粟粟的书架

    一道二合一的题目.两部分思维难度都不太高,但是也都很巧妙.尤其是主席树的\(50\)分,由于本人初学主席树,所以没有见过主席树上二分的套路,就被小小的卡了一下.. \(n <= 200\) \( ...