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. how to develop mobile web

    http://blog.templatemonster.com/2010/05/11/how-make-mobile-website-6-easy-tips/ http://mobile.smashi ...

  2. UCS-2和UTF8的四个新知识点和新的疑问

    最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符.显然,这样要表示各种语言中所有的字符是远远不够的.Unicode4.0规范考虑到了这种情况 ...

  3. 使用Spring AOP预处理Controller的参数

    实际编程中,可能会有这样一种情况,前台传过来的参数,我们需要一定的处理才能使用,比如有这样一个Controller @Controller public class MatchOddsControll ...

  4. [笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的

    走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的 保持专注. 不断更新优先级. 对产品有主人翁意识. (觉得做好产品是自己的职责, 不是应付工作) 你的用户如 ...

  5. 17.1.2 Replication Formats

    17.1.2 Replication Formats 复制格式 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Bas ...

  6. 利用if else 求已发奖金总数

    class Program    {        static void Main(string[] args)        {            while (true)           ...

  7. Entity Framework系列文章导航

    转自:http://www.cnblogs.com/xray2005/archive/2011/10/11/2206746.html Entity Framework4.0系列文章 需要说明的是,以下 ...

  8. HDOJ --- 2577

    How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  9. [MarsZ]ThinkPHP项目实战总结

    本文原word格式百度云盘下载地址: http://pan.baidu.com/s/1qYqZFkg 综述 2 需求 2 作者 2 系统一览 2 Unity3d客户端 2 PHP后台 4 准备 6 X ...

  10. leetcode 二分查找

    https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ...