register_globals,是php.ini文件里面的一个配置选项,接下来,我们可以通过例程来分析一下,当register_globals = on 与 register_globals = off 的时候,对php语言的一些安全影响。

测试源代码如下:

index.html 源代码:

<form method="post" action="index.php">

<table>

<tr>

<td>用户名:</td>

<td><input name="username" type="text"></td>

</tr>

<tr>

<td>密 码:</td>

<td><input name="password" type="password"></td>

</tr>

</table>

<input type="submit" name="submit" value="登录" class="button">

</form>

index.php 源代码:

<?php

//包含配置文件

require_once ('config.inc.php');

//如果用户已经登录提交

if($_POST['submit'])

{

//用户名

$username=ClearSpecialChars($_POST['username']);

//密码,需要进行MD5或者sha1加密

$password=md5($_POST['password']);

//$password=sha1($_POST['password']);

//从数据库中检索用户名,密码是否匹配

$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";

$result = @mysql_query($sql);

$num_rows = @mysql_num_rows($result);

if($num_rows == 1)

{

//获得用户名

$row = mysql_fetch_assoc($result);

//将用户名存入SESSION中

$_SESSION['username'] = $row['username'];

//跳转到用户权限页面

header("Location: main.php");

}

else

{

ExitMessage("用户名或者密码错误!");

}

}

?>

1-1:

当设置register_globals = off 的时候,index.php源代码可以正常执行(注意:修改php.ini文件之后需要我们重新启动Apache修改方能生效),如图:

输入正确的用户名与密码之后,执行效果如下:

1-2:

当设置register_globals = on 的时候,index.php源代码修改成这样子也可以正常执行(注意:修改php.ini文件之后需要我们重新启动Apache修改方能生效),如图:

修改后的php.ini文件如图:

修改后的index.php源代码,执行效果如图:

修改之后的index.php源代码如下:

<?php

//包含配置文件

require_once ('config.inc.php');

//如果用户已经登录提交

if($_POST['submit'])

{

//用户名

//$username=ClearSpecialChars($_POST['username']);

$username=ClearSpecialChars($username);

//密码,需要进行MD5或者sha1加密

//$password=md5($_POST['password']);

$password=md5($password);

//$password=sha1($_POST['password']);

//从数据库中检索用户名,密码是否匹配

$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";

$result = @mysql_query($sql);

$num_rows = @mysql_num_rows($result);

if($num_rows == 1)

{

//获得用户名

$row = mysql_fetch_assoc($result);

//将用户名存入SESSION中

$_SESSION['username'] = $row['username'];

//跳转到用户权限页面

header("Location: main.php");

}

else

{

ExitMessage("用户名或者密码错误!");

}

}

?>

总结:

有关于php版本与register_globals的历史

php从>=4.20版本开始,php.ini中register_globals = Off了,php之前的版本register_globals = On 的。

php从>=4.20版本开始,使用register_globals = Off 的原因

当 register_globals = On,即register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代。但 PHP 社区还是决定默认关闭此选项。当打开时,人们使用变量时确实不知道变量是哪里来的,所以,php社区还是决定选择register_globals = Off的情况,这样,php语言写出来的代码会更安全些。

register_globals(全局变量注册开关)的更多相关文章

  1. PHP安全编程:register_globals的安全性 全局变量注册(转)

    如果你还能记起早期Web应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会.当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立.它 ...

  2. PHP的核心配置详解

    1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...

  3. PHP代码审计基础-初级篇

    对于php代码审计我也是从0开始学的,对学习过程进行整理输出沉淀如有不足欢迎提出共勉.对学习能力有较高要求,整个系列主要是在工作中快速精通php代码审计,整个学习周期5天 ,建议花一天时间熟悉php语 ...

  4. PHP审计基础

    php核心配置 register_globals 全局变量注册开关 设置为on时,把GET/POST的变量注册成全局变量 PHP 5.4.0中移除 allow_url_include 包含远程文件 设 ...

  5. PHP安全设置

    1.register_globals(全局变量注册开关) 2.magic_quotes_gpc(魔术引号开关) 3.magic_quotes_runtime(魔术引号开关) 4.magic_quote ...

  6. php代码审计1(php.ini配置)

    1.php.ini基本配置-语法 大小写敏感directive = value(指令=值)foo=bar 不等于 FOO=bar 运算符| & - ! 空值的表达方法foo =     ;fo ...

  7. PHP代码审计基础

    php核心配置 php.ini 基本配置 语法 大小写敏感 运算符 空值的表达式 安全模式 安全模式 safe_mode = off 用来限制文档的存取,限制环境变量的存取,控制外部程序的执行.PHP ...

  8. Lua5.3 注册表 _G _ENV

    Lua5.3 注册表 _G _ENV 来源:http://blog.csdn.net/murisly/article/details/46518551 注册表的描述,借用PIL中的一段话: regis ...

  9. Webpack+vue2.0如何注册全局组件 (01)

    Part 1, 问题: webpack + vue2.0框架中,如何在入口js中注册组件? 就是在一个月以前,匆匆闯入vuejs这个社群,基本了解了vuejs的一些基础特性和语法.笔者兴致勃勃地开始想 ...

随机推荐

  1. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  2. python的random函数

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  3. 解决cocos2d-X 2.0版本后创建的Android项目提示org.cocos2dx.lib.Cocos2dxActivity找不到问题

    原地址: http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/ 解决方法:    复制 ***\co ...

  4. 不同框架实现的WebService的服务端获取HttpServletRequest的方法

    一. 基于xfire实现的WebService HttpServletRequest request = XFireServletController.getRequest(); 二. 基于axis实 ...

  5. IPV6 实现

    看代码实现前,请先保证了解ipv6的概念,可以先看ipv6介绍一文.code extract . 在文件 net/ipv6/af_inet6.c 中包含了ipv6协议初始化的主函数. static i ...

  6. MySQL5.6 基于db的并行复制

    slave的几个类结构:      Master_info:用于IO线程的参数,包括连接master实例的信息.      Relay_log_info:用于sql线程,表示relay log相关的信 ...

  7. WPA Supplicant 用法

    本文译至:https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 ...

  8. 基础算法(二分,贪心):NOIP 2012 疫情控制

    题目大意 给出一棵n个节点的树,根是1,要在除根节点以外的点建立检查点,使得从每条根到叶子的路径上都至少存在一个检查点.检查点由军队来建立.初始军队的位置是给定的,移动军队走一条边需要花费这条边的权值 ...

  9. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  10. sql server 自定义函数

    create function 函数名 (@pno int) returns int as begin declare @a int if not exists(select * from perso ...