在PHP中有可能根據PHP documentation有數組中$_GET
,$_POST
,$_COOKIE
,$_FILES
和$_REQUEST
。問題是那些來自用戶,我可能會得到他們而不是字符串。例如,請考慮下面的代碼片段。
<?php
if (isset($_GET['hello'])) {
echo 'Hello, ', htmlspecialchars($_GET['hello']), '.';
}
else {
echo '<form action="?"><input name="hello"><input type="submit"></form>';
}
看起來好嗎?那麼,只要你不工作,它的URL就能正常工作。問題是黑客可以嘗試製作$_GET['hello']
數組。如果URL字符串看起來像?hello[]=something
PHP將返回錯誤信息
Warning: htmlspecialchars() expects parameter 1 to be string, array given in FILE on line 3
OK,誰能夠在生產現場(另一件事是錯誤日誌......)HTML錯誤。但整數也是一個問題 - PHP是動態類型語言,因此它可以輕鬆接受像'2' + 2
這樣的代碼。雖然是的,你可以使用(int)
我有一些舊代碼不這樣做。如果字符串來自$_GET
或$_POST
它可能也是數組。類似array('2') + 2
會導致PHP的致命錯誤。
Fatal error: Unsupported operand types in FILE on line 3
現在這是不可接受的,因爲它會停止腳本。我不需要這些變量的數組,但他們煩我。有沒有簡單的代碼片段可以從這些特殊變量中刪除數組。如果我真的想要一個數組,我可以在運行代碼片段之前複製它。
只需在使用前驗證它們。你可以像'is_array'那樣進行額外的檢查來檢查提供的變量是否是數組,逃避它們等。 –
真相被告知,誰在乎?如果你正在驗證一個該死的價值,那麼發生的最多的事情就是你什麼都不做。 – cHao
@glitchMr的傢伙,即時通訊聊天室中的一位,我被暫停,請通過live-pin.com上的聯繫人部分與我聯繫。謝謝:( – Luis