代码审计之PHP语言特性

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中配置

关键选项

register_global

  • 功能:将用户通过GET,POST等方式提交的变量注册为全局变量。

  • 历史:

    version变化
    <= 4.2.3此值配置范围PHP_INI_ALL
    5.3.0 =< > 5.4.0被废弃,不推荐使用
    5.4.0 <=被移除
    • 具有类似功能的函数:extract
<?php
$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>

allow_url_include

  • 功能:此设置为on时允许包含远程文件
  • 历史:
version变化
5.2.0 <=此值配置范围为PHP_INI_ALL,默认设置为off

magic_quotes_gpc

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

  • 历史:

    version变化
    < 4.2.3此值配置范围为PHP_INI_ALL
    4.2.3 =<此值配置范围为PHP_INI_PERDIR
    5.3 <=不推荐使用
    5.4 <=被取消

magic_quotes_runtime

  • 功能:和magic_quotes_gpc类似,差别在于此配置处理对从数据库或者文件中获取的数据进行过滤。攻击者可以先将攻击代码放入数据库然后在数据库中读出使用到被污染的数据后触发漏洞.

  • 历史:

    version变化
    5.4 <=此值配置范围为PHP_INI_ALL,被取消
  • 影响函数:

get_meta_tags()fread()dba_replace()dba_fetch()
file_get_contents()fputcsv()ibase_fetch_row()ibase_fetch_assoc()
file()stream_socket_recvfrom()ibase_fetch_object()mssql_fetch_row()
fwrite()exec()mssql_fetch_object()mssql_fetch_array()
system()passthru()mssql_fetch_assoc()mysqli_fetch_row()
stram_get_contents()bzread()mysqli_fetch_assoc()mysqli_fetch_object()
gzfile()gzgets()pg_fetch_row()pg_fetch_assoc()
exif_read_data()dba_insert()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()

magic_quotes_sybase

  • 功能:当设置为on时会覆盖gpc配置的功能,它们的共同点是处理对象相同,不同点是它们的处理方式不同,此配置仅会转义空子符和把单引号变双引号。
  • 历史:
version变化
5.4 <=此值配置范围为PHP_INI_ALL,被取消

safe_mode

  • 功能:此配置设置为on时,联动的可以配置safe_mode_include_dir、safe_mode_exec_dir、safe_mode_allowed_env_vars、safe_mode_protected_env_vars。
  1. 所有文件操作函数(unlink()、file()、include())等会受到限制,这些函数不能操作根目录用户之外其他用户的文件。如果需要的话则需要使用safe_mode_include_dir配置来包含路径。
  2. 通过函数popen()、system()、exec()等执行命令或程序会提示错误。可以把需要使用的一些外部脚本放在一个目录下,然后使用safe_mode_exec_dir指令来指向此目录。
  • 历史
version变化
5.4 <=此值配置范围为PHP_INI_SYSTEM,被取消
  • 影响函数
apache_request_headers()ackticks()hdir()hgrp()
chmode()chown()copy()dbase_open()
dbmopen()dl()exec()filepro()
filepro_retrieve()ilepro_rowcount()fopen()header()
highlight_file()ifx_*ingres_*link()
mail()max_execution_time()mkdir()move_uploaded_file()
mysql_*parse_ini_file()passthru()pg_lo_import()
popen()posix_mkfifo()putenv()rename()
zmdir()set_time_limit()shell_exec()show_source()
symlink()system()touch()

open_basedir

  • 功能: 限制PHP访问目录。在指定目录时多个目录通过‘;’分开,且这些值是路径前缀而不是完整的路径,比如“/www/a”不仅可以允许访问“/www/a”目录还允许访问“/www/ab”目录。由于通过对访问路径进行检查来实现此功能为此会托慢执行效率。
  • 历史:
version变化
< 5.2.3此值配置范围为PHP_INI_SYSTEM
>= 5.2.3此值配置范围为PHP_INI_ALL

disable_functions

  • 功能:禁用指定函数。在使用此配置时一定要将dl()函数添加到禁用函数列表,否则攻击者可以使用此函数来加载自定义的PHP扩展从而绕过此配置的限制。此配置的配置范围是 php.in only ,各函数使用‘,’分割。

display_errors 和 error_reporting

  • 功能:表明是否显示PHP脚本内部错误。当设置为on时还可以联动的设置error_reporting指令来配置错误显示级别。这两条指令的配置范围均是PHP_INI_ALL。
数字格式常量格式数字格式常量格式
1E_ERROR128E_COMPILE_WARNING
2E_WARNING256E_USER_ERROR
4E_PARSE512E_USER_WARNING
8E_NOTICE1024E_USER_NOTICE
16E_CORE_ERROR2047E_ALL
32E_CORE_WARNING2048E_STRICT
64E_COMPILE_ERROR

常用指令说明

指令可配置范围说明
safe_mode_gidPHP_INI_SYSTEM以安全模式打开文件时默认使用UID来比对;设置本指令为on时使用GID做宽松的比对
expose_phpphp.ini only是否在服务器返回信息HTTP头部显示PHP版本
max_execution_timePHP_INI_ALL每个脚本最多执行的秒数
memory_limitPHP_INI_ALL每个脚本能够使用的最大内存数量
log_errorsPHP_INI_ALL将错误输入到日志文件
log_errors_max_lenPHP_INI_ALL设定log_errors的最大长度
variables_orderPHP_INI_PERDIR此指令描述了PHP注册GET、POST、Cookie、环境和内置变量的顺序,注册使用从左往右的顺序,新的值会覆盖旧的值
post_max_sizePHP_INI_PERDIRPHP可以接受的最大的POST数据大小
auto_prepend_filePHP_INI_PERDIR在任何PHP文档之前自动包含的文件
auto_append_filePHP_INI_PERDIR在任何PHP文档之后自动包含的文件
extension_dirPHP_INI_SYSTEM可加载的扩展(模块)所在的位置
file_uploadsPHP_INI_SYSTEM是否允许HTTP文件上传
upload_tmp_dirPHP_INI_SYSTEM对于HTTP上传文件的临时文件目录
upload_max_filesizePHP_INI_SYSTEM允许上传的最大文件大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值