深入了解 register_globals (附register_globals=off 网站打不开的解决方法)


Posted in PHP onJune 27, 2012

深入了解 register_globals

dedecms 里强制限制了register_globals

由于register_globals设置控制PHP变量访问范围,如果开启会引起不必要的安全问题,所以这里对其进行了强制关闭,如果站长的空间不支持,可以采用以下几种办法进行修改,供广大站长参考:

*如果是独立服务器的用户可以修改php配置文件中的php.ini,将register_globals=On改为register_globals=Off,然后重启Apache.

*如果是虚拟主机的用户,尽可能的通知空间商让其对配置进行修改,或者可以尝试ini_set('register_globals',0)来.

*自己在网站目录下新建一个.htaccess文件,加上php_flag register_globals off 就行了,如果已有.htaccess文件,直接再最后另起一行添加即可;

*如果实在不行,那只有采用最后的办法直接去include/common.inc.php中将以下代码删除即可(不建议).

//开启register_globals会有诸多不安全可能性,因此强制要求关闭register_globalsif(ini_get('register_globals')){ exit('<a href="http://docs.dedecms.com/doku.php?id=register_globals">php.ini register_globals must is Off! </a>'); } 从 PHP4.2.0版本开始,php.ini中的设置选项 register_globals 默认值变成了 off。所以,最好从现在就开始用Off的风格开始编程!
register_globals的值可以设置为:On或者Off,我们举一段代码来分别描述它们的不同。

代码:

<form name="frmTest" id="frmTest" action="URL"> 
<input type="text" name="user_name" id="user_name"> 
<input type="password" name="user_pass" id="user_pass"> 
<input type="submit" value="login"> 
</form>

当register_globals=Off的时候,下一个程序接收的时候应该用$_GET['user_name']和$_GET['user_pass']来接受传递过来的值。(注:当<form>的method属性为post的时候应该用$_POST['user_name']和$_POST['user_pass'])

当register_globals=On的时候,下一个程序可以直接使用$user_name和$user_pass来接受值。

顾名思义,register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的朋友应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini) 下面来看看这里有什么错误?

看看下面的这段PHP脚本,它用来在输入的用户名及口令正确时授权访问一个Web页面:

<?php 
// 检查用户名及口令 
if ($username == 'kevin' and $password == 'secret') 
$authorized = true; 
?> 
<?php if (!$authorized): ?> 
<!-- 未授权的用户将在这里给予提示 --> 
<p>Please enter your username and password:</p> 
<form action="<?=$PHP_SELF?>" method="POST"> 
<p>Username: <input type="text" name="username" /><br /> 
Password: <input type="password" name="password" /><br /> 
<input type="submit" /></p> 
</form> 
<?php else: ?> 
<!-- 有安全要求的HTML内容 --> 
<?php endif; ?>

上面的代码中存在的问题是你可以很容易地获得访问的权力,而不需要提供正确的用户名和口令。只在要你的浏览器的地址栏的最后添加?authorized=1。因为PHP会自动地为每一个提交的值创建一个变量 -- 不论是来自动一个提交的表单、URL查询字符串还是一个cookie -- 这会将$authorized设置为1,这样一个未授权的用户也可以突破安全限制。

register_globals=off 网站打不开的解决方法

register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数,顾名思义,register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的朋友应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini)

register_globals=off的目的主要是为安全考虑,同时大多数程序要求将该值设为off,以前用On风格写的大量脚本怎么办? 如果你以前的脚本规划得好,有个公共包含文件,比如config.inc.php一类的文件,在这个文件里加上以下的代码来模拟一下(这个代码不保证100%可以解决你的问题,因为我没有大量测试,但是我觉得效果不错)。

代码:

<?php 
if ( !ini_get("register_globals") ) 
{ 
extract($_POST); 
extract($_GET); 
extract($_SERVER); 
extract($_FILES); 
extract($_ENV); 
extract($_COOKIE); if ( isset($_SESSION) ) 
{ 
extract($_SESSION); 
} 
} 
?>

php Undefined index和Undefined variable的解决方法

$act=$_POST['act'];

用以上代码总是提示
Notice: Undefined index: act in F:\windsflybook\post.php on line 18

另外,有时还会出现

引用内容
Notice: Undefined variable: Submit ......

等一些这样的提示

原因:由于变量未定义引起的

解决方法:
1) error_reporting设置:
找到error_reporting = E_ALL
修改为error_reporting = E_ALL & ~E_NOTICE

2) register_globals设置:
找到register_globals = Off
修改为register_globals = On

Notice: Undefined variable: email in D:\PHP5\ENOTE\ADDNOTE.PHP on line 9

Notice: Undefined variable: subject in D:\PHP5\ENOTE\ADDNOTE.PHP on line 9

Notice: Undefined variable: comment in D:\PHP5\ENOTE\ADDNOTE.PHP on line 9
........

本来php是不需要定义变量的,但是出现这种情况应该怎么办呢?

只要在C:\WINDOWS找出php.ini的

在php.ini中的302行 error_reporting = E_ALL

修改成

error_reporting = E_ALL & ~E_NOTICE再重启apache2.2就行了

解决方法:修改php.ini

将: error_reporting = E_ALL

修改为:error_reporting = E_ALL & ~E_NOTICE

如果什么错误都不想让显示,直接修改:

display_errors = Off

如果你没有php.ini的修改权限,可在php头部加入

ini_set("error_reporting","E_ALL & ~E_NOTICE");

即可

PHP 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
phpnow php探针环境检测代码
Nov 04 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
smarty的section嵌套循环用法示例
May 28 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
基于PHP实现发微博动态代码实例
Dec 11 PHP
PHP控制循环操作的时间
Apr 01 PHP
php数组中删除元素的实现代码
Jun 22 #PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 #PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
Jun 21 #PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 #PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 #PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 #PHP
php后退一页表单内容保存实现方法
Jun 17 #PHP
You might like
漂亮但不安全的CTB
2006/10/09 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php实现aes加密类分享
2014/02/16 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
党员对照检查剖析材料
2014/10/13 职场文书
个人收入证明格式
2015/06/24 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
礼仪培训心得体会
2016/01/22 职场文书
利用Java连接Hadoop进行编程
2022/06/28 Java/Android