分享下PHP register_globals 值為on與off的理解
register_globals的值可以設(shè)置為:On或者Off,我們舉一段代碼來(lái)分別描述它們的不同。
代碼:
<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的時(shí)候,下一個(gè)程序接收的時(shí)候應(yīng)該用$_GET['user_name']和$_GET['user_pass']來(lái)接受傳遞過(guò)來(lái)的值。(注:當(dāng)<form>的method屬性為post的時(shí)候應(yīng)該用$_POST['user_name']和$_POST['user_pass'])
當(dāng)register_globals=On的時(shí)候,下一個(gè)程序可以直接使用$user_name和$user_pass來(lái)接受值。
顧名思義,register_globals的意思就是注冊(cè)為全局變量,所以當(dāng)On的時(shí)候,傳遞過(guò)來(lái)的值會(huì)被直接的注冊(cè)為全局變量直接使用,而Off的時(shí)候,我們需要到特定的數(shù)組里去得到它。所以,碰到上邊那些無(wú)法得到值的問(wèn)題的朋友應(yīng)該首先檢查一下你的register_globals的設(shè)置和你獲取值的方法是否匹配。(查看可以用phpinfo()函數(shù)或者直接查看php.ini)
下面來(lái)看看這里有什么錯(cuò)誤?
看看下面的這段PHP腳本,它用來(lái)在輸入的用戶名及口令正確時(shí)授權(quán)訪問(wèn)一個(gè)Web頁(yè)面:
<?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; ?>
上面的代碼中存在的問(wèn)題是你可以很容易地獲得訪問(wèn)的權(quán)力,而不需要提供正確的用戶名和口令。只在要你的瀏覽器的地址欄的最后添加?authorized=1。因?yàn)镻HP會(huì)自動(dòng)地為每一個(gè)提交的值創(chuàng)建一個(gè)變量 -- 不論是來(lái)自動(dòng)一個(gè)提交的表單、URL查詢字符串還是一個(gè)cookie -- 這會(huì)將$authorized設(shè)置為1,這樣一個(gè)未授權(quán)的用戶也可以突破安全限制。
相關(guān)文章
一個(gè)簡(jiǎn)單的自動(dòng)發(fā)送郵件系統(tǒng)(二)
一個(gè)簡(jiǎn)單的自動(dòng)發(fā)送郵件系統(tǒng)(二)...2006-10-10