PHP代码审计——超全局变量

122 阅读2分钟

一、全局变量

全局变量就是在函数外面定义的变量,不能在函数中直接使用,因为他的作用域不会到函数内部,所以在函数内部使用的时候常常看到类似 global $a。

global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。

(1)在函数体内定义global变量,函数体内可以使用。
在这里插入图片描述
(2)在函数体外定义global变量,函数体内不可以使用,但是可以通过超全局变量$GLOBALS使用
在这里插入图片描述

二、超全局变量

$GLOBALS用于在PHP脚本中的任意位置访问全局变量(从函数或方法中均可)

超全局变量作用域在所有脚本都有效,所以,在函数可直接使用,比如 G E T 、 _GET、 G​ET、_SERVER都是超全局变量,除了 G E T 、 _GET、 G​ET、_POST、 S E R V E R 、 _SERVER、 S​ERVER、_COOKIE等之外的超全局变量保存在$GLOBALS数组中

在 G L O B A L S 数 组 中 , 每 一 个 变 量 为 一 个 元 素 , 键 名 对 应 变 量 名 , 值 对 应 变 量 的 内 容 。 GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。 GLOBALS数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。GLOBALS 之所以在全局范围内存在,是因为 G L O B A L S 是 一 个 超 全 局 变 量 。 注 意 GLOBALS 是一个超全局变量。注意 GLOBALS是一个超全局变量。注意GLOBALS 的写法,比如变量 a 1 , 写 法 为 a1,写法为 a1,写法为GLOBALS[‘a1’]。

示例:先使用global定义
在这里插入图片描述
使用$GLOBALS定义全局变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、常见超全局变量

常见超全局变量: G L O B A L S 、 GLOBALS、 GLOBALS、_REQUEST、 G E T 、 _GET、 G​ET、_ENV、 S E S S I O N 、 _SESSION、 S​ESSION、_SERVER、 P O S T 、 _POST、 P​OST、_FILES、$_COOKIE

POST(隐藏传参)
$_POST向服务器传递数据,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION 属性所指的URL地址,用户看不到这个过程

GET(URL传参)
$_GET从服务器上获取数据,把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到

R E Q U E S T p h p 中 _REQUEST php中 R​EQUESTphp中_REQUEST可以获取以POST方法和GET方法提交的数据
比较慢

尽量不要使用 R E Q U E S T , 应 该 从 _REQUEST,应该从 R​EQUEST,应该从_GET、 P O S T 、 _POST、 P​OST、_COOKIE、 E N V 、 _ENV、 E​NV、_SERVER等变量中取出需要的值

$_SERVER
参考:www.cnblogs.com/wangshuazi/…

$_FILES
$_FILES[‘file’][‘name’]:显示客户端文件的原名称
$_FILES[‘file’][‘type’]:文件的MIME类型,例如:image/gif
$_FILES[‘file’][‘size’]:已上传文件的大小,单位为字节
$_FILES[‘file’][‘tmp_name’]:储存的临时文件名,一般是系统默认
$_FILES[‘file’][‘error’]:该文件上传相关的错误代码

$_SESSION
当前脚本可用SESSION变量的数组
H T T P S E S S I O N V A R S 包 含 相 同 的 信 息 ( 4.1.0 已 废 弃 ) , 但 它 不 是 一 个 超 全 局 变 量 注 意 : HTTP_SESSION_VARS包含相同的信息(4.1.0已废弃),但它不是一个超全局变量 注意: HTTPS​ESSIONV​ARS包含相同的信息(4.1.0已废弃),但它不是一个超全局变量注意:HTTP_SESSION_VARS和$_SESSION是不同的变量,PHP处理它们的方式不同

$_COOKIE
通过HTTP Cookie方式传递给当前脚本的变量的数组
H T T P C O O K I E V A R S 包 含 相 同 的 信 息 , 但 它 不 是 一 个 超 全 局 变 量 注 意 : HTTP_COOKIE_VARS包含相同的信息,但它不是一个超全局变量 注意: HTTPC​OOKIEV​ARS包含相同的信息,但它不是一个超全局变量注意:HTTP_COOKIE_VARS和$_COOKIE是不同的变量,PHP处理它们的方式不同

$_ENV
$_ENV包含服务器端环境变量的数组,可在PHP程序的任何地方直接访问
$_ENV只是被动的接收服务器端的环境变量转换为数组元素