博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
register_globals(全局变量注册开关)
阅读量:4639 次
发布时间:2019-06-09

本文共 2438 字,大约阅读时间需要 8 分钟。

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语言写出来的代码会更安全些。

转载于:https://www.cnblogs.com/windclouds/p/5412844.html

你可能感兴趣的文章
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>
MyBatis启动:MapperStatement创建
查看>>
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
Java Web项目结构
查看>>
lambda表达式树
查看>>
OpenCV YUV 与 RGB的互转(草稿)
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
儿子和女儿——解释器和编译器的区别与联系
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>