PHP代码审计——超全局变量
一、全局变量
全局变量就是在函数外面定义的变量,不能在函数中直接使用,因为他的作用域不会到函数内部,所以在函数内部使用的时候常常看到类似 global $a。
global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。
(1)在函数体内定义global变量,函数体内可以使用。
(2)在函数体外定义global变量,函数体内不可以使用,但是可以通过超全局变量$GLOBALS使用
二、超全局变量
$GLOBALS用于在PHP脚本中的任意位置访问全局变量(从函数或方法中均可)
超全局变量作用域在所有脚本都有效,所以,在函数可直接使用,比如_SERVER都是超全局变量,除了_POST、_COOKIE等之外的超全局变量保存在$GLOBALS数组中
在 GLOBALS 之所以在全局范围内存在,是因为 GLOBALS 的写法,比如变量GLOBALS[‘a1’]。
示例:先使用global定义
使用$GLOBALS定义全局变量
三、常见超全局变量
常见超全局变量:_REQUEST、_ENV、_SERVER、_FILES、$_COOKIE
POST(隐藏传参)
$_POST向服务器传递数据,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION 属性所指的URL地址,用户看不到这个过程
GET(URL传参)
$_GET从服务器上获取数据,把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到
_REQUEST可以获取以POST方法和GET方法提交的数据
比较慢
尽量不要使用_GET、_COOKIE、_SERVER等变量中取出需要的值
$_SERVER
参考:https://www.cnblogs.com/wangshuazi/p/9765012.html
$_FILES
$_FILES[‘file’][‘name’]:显示客户端文件的原名称
$_FILES[‘file’][‘type’]:文件的MIME类型,例如:image/gif
$_FILES[‘file’][‘size’]:已上传文件的大小,单位为字节
$_FILES[‘file’][‘tmp_name’]:储存的临时文件名,一般是系统默认
$_FILES[‘file’][‘error’]:该文件上传相关的错误代码
$_SESSION
当前脚本可用SESSION变量的数组
HTTP_SESSION_VARS和$_SESSION是不同的变量,PHP处理它们的方式不同
$_COOKIE
通过HTTP Cookie方式传递给当前脚本的变量的数组
HTTP_COOKIE_VARS和$_COOKIE是不同的变量,PHP处理它们的方式不同
$_ENV
$_ENV包含服务器端环境变量的数组,可在PHP程序的任何地方直接访问
$_ENV只是被动的接收服务器端的环境变量转换为数组元素