register_globals(全局变量注册开关)
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(全局变量注册开关)的更多相关文章
- PHP安全编程:register_globals的安全性 全局变量注册(转)
如果你还能记起早期Web应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会.当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立.它 ...
- PHP的核心配置详解
1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...
- PHP代码审计基础-初级篇
对于php代码审计我也是从0开始学的,对学习过程进行整理输出沉淀如有不足欢迎提出共勉.对学习能力有较高要求,整个系列主要是在工作中快速精通php代码审计,整个学习周期5天 ,建议花一天时间熟悉php语 ...
- PHP审计基础
php核心配置 register_globals 全局变量注册开关 设置为on时,把GET/POST的变量注册成全局变量 PHP 5.4.0中移除 allow_url_include 包含远程文件 设 ...
- PHP安全设置
1.register_globals(全局变量注册开关) 2.magic_quotes_gpc(魔术引号开关) 3.magic_quotes_runtime(魔术引号开关) 4.magic_quote ...
- php代码审计1(php.ini配置)
1.php.ini基本配置-语法 大小写敏感directive = value(指令=值)foo=bar 不等于 FOO=bar 运算符| & - ! 空值的表达方法foo = ;fo ...
- PHP代码审计基础
php核心配置 php.ini 基本配置 语法 大小写敏感 运算符 空值的表达式 安全模式 安全模式 safe_mode = off 用来限制文档的存取,限制环境变量的存取,控制外部程序的执行.PHP ...
- Lua5.3 注册表 _G _ENV
Lua5.3 注册表 _G _ENV 来源:http://blog.csdn.net/murisly/article/details/46518551 注册表的描述,借用PIL中的一段话: regis ...
- Webpack+vue2.0如何注册全局组件 (01)
Part 1, 问题: webpack + vue2.0框架中,如何在入口js中注册组件? 就是在一个月以前,匆匆闯入vuejs这个社群,基本了解了vuejs的一些基础特性和语法.笔者兴致勃勃地开始想 ...
随机推荐
- python多线程threading.Lock锁用法实例
本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...
- python的random函数
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- 解决cocos2d-X 2.0版本后创建的Android项目提示org.cocos2dx.lib.Cocos2dxActivity找不到问题
原地址: http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/ 解决方法: 复制 ***\co ...
- 不同框架实现的WebService的服务端获取HttpServletRequest的方法
一. 基于xfire实现的WebService HttpServletRequest request = XFireServletController.getRequest(); 二. 基于axis实 ...
- IPV6 实现
看代码实现前,请先保证了解ipv6的概念,可以先看ipv6介绍一文.code extract . 在文件 net/ipv6/af_inet6.c 中包含了ipv6协议初始化的主函数. static i ...
- MySQL5.6 基于db的并行复制
slave的几个类结构: Master_info:用于IO线程的参数,包括连接master实例的信息. Relay_log_info:用于sql线程,表示relay log相关的信 ...
- WPA Supplicant 用法
本文译至:https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 ...
- 基础算法(二分,贪心):NOIP 2012 疫情控制
题目大意 给出一棵n个节点的树,根是1,要在除根节点以外的点建立检查点,使得从每条根到叶子的路径上都至少存在一个检查点.检查点由军队来建立.初始军队的位置是给定的,移动军队走一条边需要花费这条边的权值 ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- sql server 自定义函数
create function 函数名 (@pno int) returns int as begin declare @a int if not exists(select * from perso ...