HacKerQWQ的博客空间

PHP代码审计学习(一)PHP配置分析

Word count: 894Reading time: 3 min
2020/07/01 Share

PHP_INI_*常量的定义

常量 含义
PHP_INI_USER 可在用户的PHP脚本或Windows注册表中设置
PHP_INI_PERDIR 可在php.ini .htaccess或httpd.confg中设置
PHP_INI_SYSTEM 可在php.ini或httpd.conf中设置
PHP_INI_ALL 可在任何地方设置
php.ini only 仅可在php.ini中设置

PHP核心配置详解

register_globals

  • 介绍:当选项开启为on时,将GET、POST等方式提交上来的参数注册成全局变量
  • 存在:PHP5.3.0起被废弃,PHP5.4.0移除选项

allow_url_include

  • 介绍:是否允许包含远程文件
  • 存在:PHP5.2.0后默认为off

magic_quotes_gpc

  • 介绍:魔术引号自动过滤GET、POST、COOKIE变量中的如单引号(‘),双引号(“),反斜杠(\),空字符(NULL)**前自动上反斜杠(\)**
    20210426190359
  • 存在:PHP5.4.0之后被取消

magic_quotes_runtime

  • 介绍:魔术引号自动过滤,同magic_quotes_gpc但是作用不同,magic_quotes_runtime作用于从数据库文件中获取的数据,因此二次注入比较常见
  • 存在:PHP5.4之后被取消
  • 受影响函数
    20210426191015

magic_quotes_sybase

  • 介绍:大体和magic_quotes_sybase相同,但是会覆盖掉magic_quotes_gpc,且仅仅转义空字符和把单引号(‘)**变成了双引号(“),因此用处没有magic_quotes_gpc**广
  • 存在时间:PHP5.4.0后被移除

safe_mode

  • 介绍:是PHP内置的安全机制,开启后,可以联动的指令有safe_mode_include_dirsafe_mode_exec_dirsafe_mode_allowed_env_varssafe_mode_protected_env_vars
  • 存在时间:PHP5.4.0之后移除

safe_mode_exec_dir

  • 介绍:当开启后,执行popen、system、exec等执行命令的函数时需要在特定的目录
    20210426193238
    受影响函数:
    20210426193312

open_basedir

  • 介绍:用于限制PHP有权限访问的目录,设定成D:\phpstudy_pro\WWW\test的时候WWW目录下的文件都可访问到,设定成D:\phpstudy_pro\WWW\test\时,只能访问test目录下的文件
  • 存在时间:目前依然在用,目前是PHP_INI_ALL,在PHP < 5.2.3 时是 PHP_INI_SYSTEM。

当设置成open_basedir=D:\phpstudy_pro\WWW\test\时,test目录下有flag.txt文件20210426194304
20210426194127

disable_functions

  • 介绍:禁用函数,使用逗号分割,例如:disable_functions=phpinfo,eval
  • 存在时间:目前在用,配置范围为php.ini only

display_errors和error_reporting

  • 介绍:用于错误显示,display_errors应在网站发布之后关闭以下是error_reporting的常量格式
    20210426194734
    特别的,error_reporting(0)关闭错误显示
  • 存在时间:依然在用,配置范围PHP_INI_ALL

常用指令以及说明

20210426195118

php.ini的安全设置

safe_mode= On(用来限制文档的存取、限制环境变量的存取,控制外部程序的执行,PHP5.4.0以上被移除)

safe_model_allowed_env_vars = string,限制环境变量的存取,即PHP程序能改变环境变量的前缀,当选项值为空时,PHP可以改变任何环境变量

safe_mode_exec_dir=”E:\Phpstudy\WWW”,控制外部程序的执行

disable_functions,禁用函数,禁止一些敏感函数,要禁止dl函数,攻击者可以利用dl()函数加载自定义的php扩展来突破disable_function

com.allow_dcom= false,com组件,PHP设置在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统组件来执行任意命令

register_globals= Off,全局变量注册开关,PHP5.4.0移除

magic_quotes_gpc= On,相当于addslashes,PHP5.4移除

allow_url_include= Off,包含远程文件,注意变量是否可控, 从 PHP 7.4.0 开始被废弃。

allow_url_fopen= Off,允许本地PHP文件通过调用URL重写来打开和关闭写权限

expose_php= Off,防止通过http头部泄露的php版本信息

upload_tmp_dir = “E:\Phpstudy\WWW\temp\upload”,上传文件临时保存的目录

open_basedir= “E:\Phpstudy\WWW”,控制PHP脚本只能访问指定的目录

display_errors= Off,网站发布后建议关闭

error_reporting= 0,方便排错

CATALOG
  1. 1. PHP_INI_*常量的定义
  2. 2. PHP核心配置详解
    1. 2.1. register_globals
    2. 2.2. allow_url_include
    3. 2.3. magic_quotes_gpc
    4. 2.4. magic_quotes_runtime
    5. 2.5. magic_quotes_sybase
    6. 2.6. safe_mode
      1. 2.6.1. safe_mode_exec_dir
    7. 2.7. open_basedir
    8. 2.8. disable_functions
    9. 2.9. display_errors和error_reporting
    10. 2.10. 常用指令以及说明
  3. 3. php.ini的安全设置