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的一些基础特性和语法.笔者兴致勃勃地开始想 ...
随机推荐
- Android软件开发之发送短信与系统短信库解析
今天我和同学们讨论一下Android平台下如何调用系统方法发送短信.接收短信.系统的短信库相关的问题.进入正题,我们先使用Eclipse工具模拟给自己的模拟器发送一条短信.在Eclipse下打开DDM ...
- 启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
E:\redis>redis-server.exe redis.windows.conf [8564] 10 Oct 20:00:36.745 # Creating Server TCP lis ...
- sort merge join导致temp被爆菊
SQL_ID cqsz37256v36j, child number 1 ------------------------------------- INSERT /*+append*/ INTO T ...
- bzoj1202
很久以前写的,忘补解题报告了首先似乎dfs就可以了吧?但还有更高大上的做法其实这东西就是告诉sum[y]-sum[x-1]=z然后给出一堆看成不成立可以用并查集,维护每个点到father点的差即可 . ...
- Android之sqlite 命令
1.数据库.表的建立,记录的添加.查询.修改和删除 F:">sqlite3 database.dbsqlite> create table admin(username text ...
- Delphi-idHttp-JSON用法
从国外网站抄来的代码 Delphi source: http := TIdHttp.Create(nil);http.HandleRedirects := True;//允许头转向http.ReadT ...
- 论SOA架构的几种主要开发方式【转】
面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系 ...
- "The Same Game": A Simple Game from Start to Finish
文档视图结构 文档/视图体系结构是一个神奇的架构,通过这个架构,我们可以分离应用程序的数据和显示.文档包含了全部的数据,视图从文档获取数据并且显示给用户.针对这个游戏例子,我们得数据是游戏板和有颜色的 ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- linux 命令拾遗
man ascii 这个命令会打印出八进制.十六进制和十进制的ASCII码表. xxd xxd可以生成所给与文件的十六进制拷贝,也可以将编辑好的十六进制拷贝还原成二进制格式.它也可以将十六进制拷贝输出 ...