转自php官方文档

举例

<?php
// 当用户合法的时候,赋值 $authorized = true
if (authenticated_user()) {$authorized = true;
}// 由于并没有事先把 $authorized 初始化为 false,
// 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值
// 所以任何人都可以绕过身份验证
if ($authorized) {include "/highly/sensitive/data.php";
}
?>

如果没有提前定义authorized变量,并且register_globals配置已经是打开的状态,这个安全认证可以被任意绕过。

解决方案

在代码开始前,定义

$authorized = false;

这样就可以避免此类问题。

Warning 本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。

关于register_globals

当 register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。

简单理解下。
在你的代码中存在一个变量$test,这个变量并没有赋值,然后以其他的方式(比如get请求,session,header等)提前给这个变量赋值。
如果这个开关开启,即允许全局初始化变量,赋值操作成功;
如果这个开关关闭,即不允许全局初始化变量,赋值操作失败。

基本见解,详情见php官方文档

php为什么要提前定义变量相关推荐

  1. python定义变量_Python基础 变量的基本使用

    变量的基本使用 程序就是用来处理数据的,而变量就是用来存储数据的 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 ...

  2. linux shell脚本 定义变量,Shell脚本应用 - 编制shell脚本、shell变量

    随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要.在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分.作为Linux系统 ...

  3. 【Vue3】 2.1声名式渲染 VS 定义变量

    闲话 不得不佩服前端大神们的整词儿能力.同一个概念能取到五花八门的名字.后端程序员的概念都能比较统一,多少年才出一个新概念,不管是C系列 Java系列 PHP 或者是 数据库 服务器等等这些领域,其基 ...

  4. python定义变量长度_超详细的Python变量的基本使用

    这里是一段防爬虫文本,请读者忽略. 本文原创首发于CSDN,作者IDYS 博客首页:https://blog.csdn.net/weixin_41633902/ 本文链接:https://blog.c ...

  5. js中定义变量之②var let const的区别

    var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...

  6. c语言lang变量,02-GoLang定义变量

    变量的常规定义 1.1定义一个变量,先定义再初始化 var num int num = 666 fmt.Printf("%d\n",num) 1.2定义的同时初始化 var num ...

  7. php7 定义变量,基于PHP7的PHP扩展开发之七(定义变量)

    目的:熟悉在PHP扩展里面如何定义变量 要实现的PHP代码如下: class lostphp{} $lng = 2; $str = "abc"; $arr = array(1,'a ...

  8. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  9. 定义变量时无引号,单引号,双引号区别与特点:

    a=192 a=192-$a b='192-$a' c="192-$a" echo "a=$a" echo "b=$b" echo &quo ...

最新文章

  1. libopencv_core.so.2.4: cannot open shared object file: Depends: libopencv-photo2.4v5
  2. 学以致用一:得到数组的最后一个元素。
  3. xp 无线连接 服务器,NPS配置无线策略XP能正常连接,WIN连接不成功
  4. c++ 预处理命令 #if, #ifdef, #ifndef, #else, #elif, #endif用法
  5. 掉电引起的ORA-1172错误解决过程(二)
  6. PyTorch框架学习四——计算图与动态图机制
  7. LeetCode 15. 三数之和(3Sum)
  8. mysql 比较一个字符串_比较MySQL中的两个字符串?
  9. 了解SQL Server审核
  10. 读书笔记∣元数据:用数据的数据管理你的世界 Ch.5-8
  11. HTML5新增input表单(HTML5)
  12. iOS 使用ZipArchive压缩文件
  13. 王通:网络营销人才必备的10种技能
  14. [2]Selenium学习系列---- FirePath的安装和使用
  15. 周立功USBCAN资料分享
  16. 安卓html 750px,移动端750px页面适配
  17. oracle 英文 简历,简历表英文模板
  18. 142. 环形链表 II AND 633. 平方数之和
  19. Python—猫眼电影票房爬虫实战 轻松弄懂字体反爬!
  20. 小猪短租网requests库使用

热门文章

  1. 练习-前程无忧数据爬取
  2. 机器学习——Day 3 多元线性回归
  3. LeetCode 910. Smallest Range II
  4. MyEclipseWeb项目配置
  5. Visual Studio 2017 正式版各版本比较:企业版最强大
  6. JavaWeb之tomcat安装、配置与使用(一)
  7. 磁盘阵列——RAID0制作方法
  8. Las Vegas拉斯维加斯(赌城)游记
  9. TypeScript 基础类型 1
  10. 谷歌浏览器实现直接打印效果