国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

深入了解 register_globals (附register_globals=off 網站打不開的解決方法)

2024-05-04 23:14:50
字體:
來源:轉載
供稿:網友
深入了解 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 >php.ini register_globals must is Off! </a>'); } 從 PHP4.2.0版本開始,php.ini中的設置選項 register_globals 默認值變成了 off。所以,最好從現在就開始用Off的風格開始編程!
register_globals的值可以設置為:On或者Off,我們舉一段代碼來分別描述它們的不同。

代碼:

復制代碼 代碼如下:


<form action="URL">
<input type="text">
<input type="password">
<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" /><br />
Password: <input type="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");
  即可
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘肃省| 潮州市| 璧山县| 定西市| 镇坪县| 绥化市| 贺州市| 大田县| 来宾市| 东海县| 万宁市| 四子王旗| 茶陵县| 墨脱县| 梁河县| 东丽区| 花莲县| 宾阳县| 明水县| 和政县| 土默特右旗| 老河口市| 合川市| 郁南县| 壤塘县| 富源县| 昌黎县| 睢宁县| 龙游县| 东城区| 太仆寺旗| 大厂| 界首市| 阿拉尔市| 湛江市| 额敏县| 玉树县| 达州市| 安远县| 绥棱县| 靖西县|