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. Android 网络请求详解

    我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient ...

  2. 【POJ 1988】 Cube Stacking (带权并查集)

    Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...

  3. eclipse提交本地项目到github

    1.在https://github.com   new repository 2.在eclipse中new project  比如:Test项目 3.右击"Test"->Te ...

  4. Eclipse怎样导入github上的项目

    国外有些比较好的源代码网站,经常需要从这些网站上导入项目到eclipse中,我最近就发现github.com这个网站上有很多开源项目.这里就以从github网站上导入项目到eclipse中为例来详细的 ...

  5. 在TMemo上画一条线

    var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...

  6. Android Training精要(七)内存管理

    在2.3.3及以下版本: 通過定義兩個整形變量來檢測bitmap是否display過或者已經在緩存中 下面的代碼當bitmap滿足兩個條件就被回收掉: 1. 兩個整形變量都變為0 2. bitmap不 ...

  7. 【HDOJ】2853 Assignment

    最小费用最大流可解最优解.至于dif如何解,可以把w扩大100倍,如果mission编号和排列P相等则对w+1,然后建立网络流.对结果取模100可以得到没有改变mission的company数目,用c ...

  8. 【转】Android 4.2蓝牙介绍

    原文网址:http://blog.csdn.net/innost/article/details/9187199 Tieto公司某蓝牙大牛写得<程序员>投稿文章 Android 4.2蓝牙 ...

  9. 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. ...

  10. Linux下安装搜狗输入法

    目前的搜狗输入法 for Linux 是Linux Deepin 社区版的测试版,基于Fcitx 框架. 话不多说,直接上. 准备工作:卸载Ubuntu默认的ibus输入法: sudo apt-get ...