PHP代码审计学习_day2
0x01 代码调试及Xdebug的配置使用
(1)echo:最简单的输出数据调试方法,一般用来输出变量值或者不确定执行到哪个分支。
(2)print_r、var_dump、debug_zval_dump:主要是输出变量的数据值。debug的输出结果和var_dump类似,唯一增加的一个值是refcount,记录一个变量被引用了多少次。
(3)debug_print_backtrace:查看输出的调用栈信息。
(4)exit():停止程序,无法运行后面代码。
Xdebug的安装:https://www.cnblogs.com/linqingvoe/p/10907672.html
Xdebug介绍
Xdebug是一个开源的PHP程序调试工具,可以使用它来调试、跟踪及分析程序运行状态。Xdebug需要结合PHP的编辑工具来打断点、跟踪、调试及分析。
Xdebug的配置
指定Xdebug扩展文件的绝对路径
zend_extension = "C:\XXX\php\php-版本号\ext\php_xdebug.dll"
启用性能检测分析
xdebug.profiler_enable = on
启用代码自动追踪
xdebug.auto_trace = on
允许收集传递给函数的参数变量
xdebug.collect_params = on
允许收集函数调用的返回值
xdebug.collect_return = on
指定堆栈跟踪文件的存放目录
xdebug.trace_output_dir = "C:\XXX\tmp\xdebug"
指定性能分析文件的存放目录
xdebug.profiler_output_dir = "C:\XXX\tmp\xdebug"
连接和监听主机和端口的调试客户端
xdebug.remote_enable = on
启动调试器协议dbgp
xdebug.remote_handler = dbgp
客户端的主机
xdebug.remote_host = localhost
客户端的端口
xdebug.remote_port = 9000
指定DBGP调试器处理程序
xdebug.idekey = PHPSTORM
注:以上的配置均在php.ini中
0x02 审计中涉及的超全局变量
全局变量
在函数外面定义的变量,不能在函数中直接使用,因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;
超全局变量
作用域在所有脚本都有效。所以,在函数可以直接使用。除了$_GET,$_POST,$_COOKIE等之外的超全局变量保存在$GLOBALS数组中。
global
作用是定义全局变量,只应用于当前网页(包括include和require的所有文件)而不是整个网站。
$GLOBALS
用于在PHP脚本中的任意位置访问全局变量(从函数或方法中均可)
POST(隐藏传参)
GET(URL传参)
$_REQUEST
能从POST和GET中获取提交的数据,但是速度比较慢。尽量不要使用request。
$_ENV
包含服务器端环境变量的数组,可在PHP程序的任何地方直接访问。
只是被动的接受服务器端的环境变量转换为数组元素。