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

深入了解 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");
  即可

时间: 2024-10-01 10:46:29

深入了解 register_globals (附register_globals=off 网站打不开的解决方法)_php技巧的相关文章

PHP基于cookie与session统计网站访问量并输出显示的方法_php技巧

本文实例讲述了PHP基于cookie与session统计网站访问量并输出显示的方法.分享给大家供大家参考,具体如下: <?php $f_open = fopen("count.txt","r+"); //打开指定的文件 $count = fgets($f_open); //读取文件中的数据 if(empty($_COOKIE['cookie_name'])){ //判断COOKIE的是否存在 setcookie("cookie_name",

PHP实现批量检测网站是否能够正常打开的方法_php技巧

本文实例讲述了PHP实现批量检测网站是否能够正常打开的方法.分享给大家供大家参考,具体如下: curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用户可操作的行为. <?php //设置最大执行时间是 120秒 ini_set('max_execution_time',120); function httpcode($url){ $ch = curl_init(); $timeout = 3; curl_setopt($ch,CURLOPT_

php抓取网站图片并保存的实现方法_php技巧

php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享给大家,代码如下: 以上就是为大家分享的php抓取网站图片并保存的实现方法,希望对大家的学习有所帮助.

网站用php实现paypal整合方法_php技巧

所以今天我就来讲讲如何将你的网站和paypal进行整合. 首先,去paypal申请一个号吧,资料都补充完整之后,我们就可以开始行动乐,对了,申请paypal时,要申请那种可以接受别人付款的帐号. 接下来,我们就真正开始paypal与网站的整合了. 其实,paypal有提供傻瓜式的付款按钮创建方式,但一般情况下我们不用,因为我们要根据自己网站的实际情况来写customized的付款按钮.先来一段代码: 复制代码 代码如下: <form action="https://www.sandbox.

php漏洞之跨网站请求伪造与防止伪造方法_php技巧

伪造跨站请求介绍伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等.这种攻击常见的表现形式有: 伪造链接,引诱用户点击,或是让用户在不知情的情况下访问 伪造表单,引诱用户提交.表单可以是隐藏的,用图片或链接的形式伪装. 比较常见而且也很廉价的防范手段是在所有可能涉及用户写操作的表单中加入一个随机且变换频繁的字符串,然后在处理表单的时候对这个字符串进行检查.这个随机字符串如果和当前用户身份相关联的话,那么攻击者伪造请求会比较麻烦.如果攻击者以隐藏的方

destoon后台网站设置变成空白的解决方法_php实例

很多朋友destoon升级后前后台变成空白,原因通常是文件的写权限有问题,大多是cache或者file,测试没考虑安全问题,把所有文件设置为可写就解决了. 因此建议升级包升级时和安装文件一样判断下文件权限,否则会遇见稀奇古怪的问题.chmod -R 777 /public_html界面能出来了,但是这时发现进后台提示,license.txt不可修改或删除,请检查,对于这个问题,修改FTP软件的传输模式为二进制,将license.txt上传即可. 而对于初次安装后台出现打不开,一片空白的情况来说,

中小企业网站优化中常见问题及解决方法

青岛SEO从事网站运营与SEO优化也有两年多时间了,经手优化的网站也有不少了,其中不乏一些企业站.应该说企业站的优化相对来说简单一些,很容易就获得不错的排名,甚至不需要刻意去进行网站优化也能获得排名,但是很多中小企业还是对自己的网站觉得无从下手,久久看不到网站排名,主要原因还是缺乏一些最基础的SEO知识,今天就跟一些新手或者说搞企业站的朋友聊聊关于企业站的优化,谈谈我所经历过的多数企业站在优化过程中的一些常见问题及解决方法. 1.不懂网站的标题.描述的设置.这是很多企业站都常犯的一个错误.一个网

我的SEO经验谈之网站降权原因与解决方法

当站长发现自已的网站快照不更新,或是百度不在收录网站内容页面,以及本来排名靠前的关键词突然下降的话,那么这个时候的站长就要注意了,因为会出现这种状况的原因是你的网站很可能被百度降权了,那到底是什么原因才导致了网站被百度降权呢?针对这个问题本人总结出四个比较常见的原因以及相关解决方法,各位站长不妨参考参考! 原因1)网站近期遭改动,可能是改动网站关键词,又或者是模板! 只有细心点的站长肯定留意到一个现像,那就是相比较谷歌或者国内其他一些搜索引擎,百度对于网站的改动更为敏感,比如网站随便改了个网站关

网站备案突然被注销解决方法及要注意的地方

我的网站是在2009年时备案,不知道为什么一个月前备案突然注销了,刚开始还以为是空间又出现什么问题了呢,因为之前也经常出现过这样的事,之前也一直也想换一个独立IP空间,但是换空间商是要重新备案的,期间网站要在关闭情况下才能备案的,所以一直都没有下定决心换空间.这次备案突然注销到也好,可以换个空间了,可是我在备案期间我做了很多错事,现在给大分享一下,也希望大家在出现我这种情况时一定不要和我一样做. 当网站打不开时我很着急,我本想买一个国外空间用着的但是太贵,备案也就半个月吧,后来一个朋友说让我做D