源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-08-26 19:57 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
深入了解 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,我们举一段代码来分别描述它们的不同。 代码:
[u]复制代码[/u] 代码如下:
<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页面:
[u]复制代码[/u] 代码如下:
<?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,这样一个未授权的用户也可以突破安全限制。 [b]register_globals=off 网站打不开的解决方法[/b] register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数,顾名思义,register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的朋友应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini) register_globals=off的目的主要是为安全考虑,同时大多数程序要求将该值设为off,以前用On风格写的大量脚本怎么办? 如果你以前的脚本规划得好,有个公共包含文件,比如config.inc.php一类的文件,在这个文件里加上以下的代码来模拟一下(这个代码不保证100%可以解决你的问题,因为我没有大量测试,但是我觉得效果不错)。 代码:
[u]复制代码[/u] 代码如下:
<?php if ( !ini_get("register_globals") ) { extract($_POST); extract($_GET); extract($_SERVER); extract($_FILES); extract($_ENV); extract($_COOKIE); if ( isset($_SESSION) ) { extract($_SESSION); } } ?>
[b]php Undefined index和Undefined variable的解决方法 [/b]$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");   即可
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部