深入了解 register_globals (附register_globals=off 網(wǎng)站打不開的解決方法)
更新時間:2012年06月27日 10:08:07 作者:
由于register_globals設(shè)置控制PHP變量訪問范圍,如果開啟會引起不必要的安全問題,所以這里對其進(jìn)行了強(qiáng)制關(guān)閉,如果站長的空間不支持,可以采用以下幾種辦法進(jìn)行修改,供廣大站長參考
深入了解 register_globals
dedecms 里強(qiáng)制限制了register_globals
由于register_globals設(shè)置控制PHP變量訪問范圍,如果開啟會引起不必要的安全問題,所以這里對其進(jìn)行了強(qiáng)制關(guān)閉,如果站長的空間不支持,可以采用以下幾種辦法進(jìn)行修改,供廣大站長參考:
*如果是獨(dú)立服務(wù)器的用戶可以修改php配置文件中的php.ini,將register_globals=On改為register_globals=Off,然后重啟Apache.
*如果是虛擬主機(jī)的用戶,盡可能的通知空間商讓其對配置進(jìn)行修改,或者可以嘗試ini_set('register_globals',0)來.
*自己在網(wǎng)站目錄下新建一個.htaccess文件,加上php_flag register_globals off 就行了,如果已有.htaccess文件,直接再最后另起一行添加即可;
*如果實(shí)在不行,那只有采用最后的辦法直接去include/common.inc.php中將以下代碼刪除即可(不建議).
//開啟register_globals會有諸多不安全可能性,因此強(qiáng)制要求關(guān)閉register_globalsif(ini_get('register_globals')){ exit('<a >php.ini register_globals must is Off! </a>'); } 從 PHP4.2.0版本開始,php.ini中的設(shè)置選項(xiàng) register_globals 默認(rèn)值變成了 off。所以,最好從現(xiàn)在就開始用Off的風(fēng)格開始編程!
register_globals的值可以設(shè)置為: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>
當(dāng)register_globals=Off的時候,下一個程序接收的時候應(yīng)該用$_GET['user_name']和$_GET['user_pass']來接受傳遞過來的值。(注:當(dāng)<form>的method屬性為post的時候應(yīng)該用$_POST['user_name']和$_POST['user_pass'])
當(dāng)register_globals=On的時候,下一個程序可以直接使用$user_name和$user_pass來接受值。
顧名思義,register_globals的意思就是注冊為全局變量,所以當(dāng)On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而Off的時候,我們需要到特定的數(shù)組里去得到它。所以,碰到上邊那些無法得到值的問題的朋友應(yīng)該首先檢查一下你的register_globals的設(shè)置和你獲取值的方法是否匹配。(查看可以用phpinfo()函數(shù)或者直接查看php.ini) 下面來看看這里有什么錯誤?
看看下面的這段PHP腳本,它用來在輸入的用戶名及口令正確時授權(quán)訪問一個Web頁面:
<?php
// 檢查用戶名及口令
if ($username == 'kevin' and $password == 'secret')
$authorized = true;
?>
<?php if (!$authorized): ?>
<!-- 未授權(quán)的用戶將在這里給予提示 -->
<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內(nèi)容 -->
<?php endif; ?>
上面的代碼中存在的問題是你可以很容易地獲得訪問的權(quán)力,而不需要提供正確的用戶名和口令。只在要你的瀏覽器的地址欄的最后添加?authorized=1。因?yàn)镻HP會自動地為每一個提交的值創(chuàng)建一個變量 -- 不論是來自動一個提交的表單、URL查詢字符串還是一個cookie -- 這會將$authorized設(shè)置為1,這樣一個未授權(quán)的用戶也可以突破安全限制。
register_globals=off 網(wǎng)站打不開的解決方法
register_globals是php.ini里的一個配置,這個配置影響到php如何接收傳遞過來的參數(shù),顧名思義,register_globals的意思就是注冊為全局變量,所以當(dāng)On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而Off的時候,我們需要到特定的數(shù)組里去得到它。所以,碰到上邊那些無法得到值的問題的朋友應(yīng)該首先檢查一下你的register_globals的設(shè)置和你獲取值的方法是否匹配。(查看可以用phpinfo()函數(shù)或者直接查看php.ini)
register_globals=off的目的主要是為安全考慮,同時大多數(shù)程序要求將該值設(shè)為off,以前用On風(fēng)格寫的大量腳本怎么辦? 如果你以前的腳本規(guī)劃得好,有個公共包含文件,比如config.inc.php一類的文件,在這個文件里加上以下的代碼來模擬一下(這個代碼不保證100%可以解決你的問題,因?yàn)槲覜]有大量測試,但是我覺得效果不錯)。
代碼:
<?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
另外,有時還會出現(xiàn)
引用內(nèi)容
Notice: Undefined variable: Submit ......
等一些這樣的提示
原因:由于變量未定義引起的
解決方法:
1) error_reporting設(shè)置:
找到error_reporting = E_ALL
修改為error_reporting = E_ALL & ~E_NOTICE
2) register_globals設(shè)置:
找到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是不需要定義變量的,但是出現(xiàn)這種情況應(yīng)該怎么辦呢?
只要在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的修改權(quán)限,可在php頭部加入
ini_set("error_reporting","E_ALL & ~E_NOTICE");
即可
dedecms 里強(qiáng)制限制了register_globals
由于register_globals設(shè)置控制PHP變量訪問范圍,如果開啟會引起不必要的安全問題,所以這里對其進(jìn)行了強(qiáng)制關(guān)閉,如果站長的空間不支持,可以采用以下幾種辦法進(jìn)行修改,供廣大站長參考:
*如果是獨(dú)立服務(wù)器的用戶可以修改php配置文件中的php.ini,將register_globals=On改為register_globals=Off,然后重啟Apache.
*如果是虛擬主機(jī)的用戶,盡可能的通知空間商讓其對配置進(jìn)行修改,或者可以嘗試ini_set('register_globals',0)來.
*自己在網(wǎng)站目錄下新建一個.htaccess文件,加上php_flag register_globals off 就行了,如果已有.htaccess文件,直接再最后另起一行添加即可;
*如果實(shí)在不行,那只有采用最后的辦法直接去include/common.inc.php中將以下代碼刪除即可(不建議).
//開啟register_globals會有諸多不安全可能性,因此強(qiáng)制要求關(guān)閉register_globalsif(ini_get('register_globals')){ exit('<a >php.ini register_globals must is Off! </a>'); } 從 PHP4.2.0版本開始,php.ini中的設(shè)置選項(xiàng) register_globals 默認(rèn)值變成了 off。所以,最好從現(xiàn)在就開始用Off的風(fēng)格開始編程!
register_globals的值可以設(shè)置為:On或者Off,我們舉一段代碼來分別描述它們的不同。
代碼:
復(fù)制代碼 代碼如下:
<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>
當(dāng)register_globals=Off的時候,下一個程序接收的時候應(yīng)該用$_GET['user_name']和$_GET['user_pass']來接受傳遞過來的值。(注:當(dāng)<form>的method屬性為post的時候應(yīng)該用$_POST['user_name']和$_POST['user_pass'])
當(dāng)register_globals=On的時候,下一個程序可以直接使用$user_name和$user_pass來接受值。
顧名思義,register_globals的意思就是注冊為全局變量,所以當(dāng)On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而Off的時候,我們需要到特定的數(shù)組里去得到它。所以,碰到上邊那些無法得到值的問題的朋友應(yīng)該首先檢查一下你的register_globals的設(shè)置和你獲取值的方法是否匹配。(查看可以用phpinfo()函數(shù)或者直接查看php.ini) 下面來看看這里有什么錯誤?
看看下面的這段PHP腳本,它用來在輸入的用戶名及口令正確時授權(quán)訪問一個Web頁面:
復(fù)制代碼 代碼如下:
<?php
// 檢查用戶名及口令
if ($username == 'kevin' and $password == 'secret')
$authorized = true;
?>
<?php if (!$authorized): ?>
<!-- 未授權(quán)的用戶將在這里給予提示 -->
<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內(nèi)容 -->
<?php endif; ?>
上面的代碼中存在的問題是你可以很容易地獲得訪問的權(quán)力,而不需要提供正確的用戶名和口令。只在要你的瀏覽器的地址欄的最后添加?authorized=1。因?yàn)镻HP會自動地為每一個提交的值創(chuàng)建一個變量 -- 不論是來自動一個提交的表單、URL查詢字符串還是一個cookie -- 這會將$authorized設(shè)置為1,這樣一個未授權(quán)的用戶也可以突破安全限制。
register_globals=off 網(wǎng)站打不開的解決方法
register_globals是php.ini里的一個配置,這個配置影響到php如何接收傳遞過來的參數(shù),顧名思義,register_globals的意思就是注冊為全局變量,所以當(dāng)On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而Off的時候,我們需要到特定的數(shù)組里去得到它。所以,碰到上邊那些無法得到值的問題的朋友應(yīng)該首先檢查一下你的register_globals的設(shè)置和你獲取值的方法是否匹配。(查看可以用phpinfo()函數(shù)或者直接查看php.ini)
register_globals=off的目的主要是為安全考慮,同時大多數(shù)程序要求將該值設(shè)為off,以前用On風(fēng)格寫的大量腳本怎么辦? 如果你以前的腳本規(guī)劃得好,有個公共包含文件,比如config.inc.php一類的文件,在這個文件里加上以下的代碼來模擬一下(這個代碼不保證100%可以解決你的問題,因?yàn)槲覜]有大量測試,但是我覺得效果不錯)。
代碼:
復(fù)制代碼 代碼如下:
<?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
另外,有時還會出現(xiàn)
引用內(nèi)容
Notice: Undefined variable: Submit ......
等一些這樣的提示
原因:由于變量未定義引起的
解決方法:
1) error_reporting設(shè)置:
找到error_reporting = E_ALL
修改為error_reporting = E_ALL & ~E_NOTICE
2) register_globals設(shè)置:
找到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是不需要定義變量的,但是出現(xiàn)這種情況應(yīng)該怎么辦呢?
只要在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的修改權(quán)限,可在php頭部加入
ini_set("error_reporting","E_ALL & ~E_NOTICE");
即可
相關(guān)文章
PHP基于PDO調(diào)用sqlserver存儲過程通用方法【基于Yii框架】
這篇文章主要介紹了PHP基于PDO調(diào)用sqlserver存儲過程通用方法,結(jié)合實(shí)例形式分析了基于Yii框架采用pdo調(diào)用sqlserver存儲過程的相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-10-10PHP文字轉(zhuǎn)圖片功能原理與實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP文字轉(zhuǎn)圖片功能原理與實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了php基于gd2擴(kuò)展庫生成圖片的相關(guān)配置及使用方法,需要的朋友可以參考下2017-08-08提示Trying to clone an uncloneable object of class Imagic的解決
使用網(wǎng)上流傳的一個程序?qū)崿F(xiàn)pdf截圖為png,需要使用Imagic擴(kuò)展,安裝后出現(xiàn)Trying to clone an uncloneable object of class Imagic提示,下面是具體的解決方法分享。2011-10-10PHP fopen()和 file_get_contents()應(yīng)用與差異介紹
這篇文章主要介紹了PHP fopen()和 file_get_contents()應(yīng)用與差異,需要的朋友可以參考下2014-03-03PHP后期靜態(tài)綁定之self::限制實(shí)例分析
這篇文章主要介紹了PHP后期靜態(tài)綁定之self::限制,結(jié)合實(shí)例形式分析了php后期靜態(tài)綁定self::與static相關(guān)使用技巧,需要的朋友可以參考下2018-12-12