在PHP開發(fā)中,經(jīng)常會用到$_REQUEST這個超全局變量。它可以同時獲取get和post請求參數(shù),極大的方便了開發(fā)者。然而,這個方便的功能也會給代碼帶來安全隱患,如果惡意用戶在參數(shù)中植入惡意代碼,則會導(dǎo)致安全問題。因此,在一些環(huán)境下,我們需要禁用$_REQUEST,采取更加安全的方式獲取請求參數(shù)。
以一個簡單的網(wǎng)站為例,假如這個網(wǎng)站有一個登錄功能,前端代碼如下:在login.php中,我們可以使用$_REQUEST來獲取參數(shù):
$username = $_REQUEST['username']; $password = $_REQUEST['password'];這種方式很方便,但是很容易受到參數(shù)污染攻擊。比如,如果我們在用戶名中加入一些html標(biāo)簽:那么這段代碼就會在服務(wù)器端執(zhí)行,造成安全問題。因此,我們需要禁止使用$_REQUEST,改用更加安全的方式獲取請求參數(shù)。 一種更加安全的方式是使用$_POST和$_GET分別獲取post和get請求參數(shù)。比如,在login.php中,我們可以改用如下方式獲取參數(shù):
$username = $_POST['username']; $password = $_POST['password'];這種方式會確保只獲取post請求的參數(shù),避免了參數(shù)污染攻擊的安全問題。當(dāng)然,如果需要獲取get請求的參數(shù),同樣可以使用$_GET來實現(xiàn)。 另一種更加安全的方式是使用filter_input函數(shù)來過濾請求參數(shù)。filter_input函數(shù)會根據(jù)指定的過濾器對輸入內(nèi)容進行過濾,確保輸入內(nèi)容安全合法。比如,在login.php中,我們可以使用如下方式來獲取參數(shù):
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);這種方式使用了過濾器FILTER_SANITIZE_STRING,確保輸入的用戶名和密碼只包含合法的字符串字符,避免了一些特殊字符的安全問題。 在使用禁用$_REQUEST的方法獲取請求參數(shù)時,需要注意一些細節(jié)問題。比如,在使用filter_input函數(shù)時,需要確保過濾器的使用正確,否則可能會產(chǎn)生錯誤結(jié)果。而在使用$_POST和$_GET來獲取請求參數(shù)時,需要確保只獲取正確的請求類型的參數(shù),否則也會導(dǎo)致安全問題。 綜上所述,禁用$_REQUEST是保證PHP代碼安全的一種重要措施。當(dāng)然,在具體實現(xiàn)中,我們需要根據(jù)具體的情況來選擇不同的方法來獲取請求參數(shù),確保代碼的安全性。
上一篇php $_sercer
下一篇css360兼容模式