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 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient ...
- 【POJ 1988】 Cube Stacking (带权并查集)
Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...
- eclipse提交本地项目到github
1.在https://github.com new repository 2.在eclipse中new project 比如:Test项目 3.右击"Test"->Te ...
- Eclipse怎样导入github上的项目
国外有些比较好的源代码网站,经常需要从这些网站上导入项目到eclipse中,我最近就发现github.com这个网站上有很多开源项目.这里就以从github网站上导入项目到eclipse中为例来详细的 ...
- 在TMemo上画一条线
var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...
- Android Training精要(七)内存管理
在2.3.3及以下版本: 通過定義兩個整形變量來檢測bitmap是否display過或者已經在緩存中 下面的代碼當bitmap滿足兩個條件就被回收掉: 1. 兩個整形變量都變為0 2. bitmap不 ...
- 【HDOJ】2853 Assignment
最小费用最大流可解最优解.至于dif如何解,可以把w扩大100倍,如果mission编号和排列P相等则对w+1,然后建立网络流.对结果取模100可以得到没有改变mission的company数目,用c ...
- 【转】Android 4.2蓝牙介绍
原文网址:http://blog.csdn.net/innost/article/details/9187199 Tieto公司某蓝牙大牛写得<程序员>投稿文章 Android 4.2蓝牙 ...
- Reason: Server is in single user mode. Only one administrator can connect at this time
单击Start→All Programs→Microsoft SQL Server 2008→Configuration Tools→SQL Server Configuration Manager. ...
- Linux下安装搜狗输入法
目前的搜狗输入法 for Linux 是Linux Deepin 社区版的测试版,基于Fcitx 框架. 话不多说,直接上. 准备工作:卸载Ubuntu默认的ibus输入法: sudo apt-get ...