深入了解 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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php的hash算法介绍
Feb 13 PHP
php使用类继承解决代码重复的问题
Feb 11 PHP
PHP文件上传操作实例详解
Sep 27 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
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
PHP语法速查表
2006/12/06 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
软件售后服务方案
2014/05/29 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
计算机实训心得体会
2016/01/14 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
python flask开发的简单基金查询工具
2021/06/02 Python
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL