雖然用戶輸入消毒/驗證是一個老生常談的話題,但我在特定情況下發布了一個說明。
的一段代碼包含
$haystack=$_GET['user'];
$輸入從不用於「迴響」或「打印」或以任何SQL查詢或任何這樣的事情。用戶輸入($ haystack)的唯一用途是檢查字符串是否包含預定義的$針。
if (preg_match($needle,$haystack)) {
$result="A";
} else {
$result="B";
}
我的擔心是惡意代碼的執行,而不是它在用戶輸入中的存在。
所以問題是,如果用戶輸入僅用於上面提到的上下文(在回聲,打印,SQL等沒有用處),是否仍然有可能在用戶輸入執行惡意代碼。
我想添加上下文所需的安全措施,而不是過度使用它。
我認爲沒有問題,但是最大的問題是如果你忘記了哪個變量被消毒了。或者如果其他程序員認爲它已經過消毒。我知道這是一種很好的工作方式(忘記沒有檢查,但可能發生),更好地做一個功能來消毒,你可以很容易地將其應用於任何輸入。或者把你的清理過的變量放在明確標記的變量名稱中,例如$ clean_xxx –
可能重複[在PHP中直接使用超級全局變量是好還是壞?](http://stackoverflow.com/questions/3498207/is-using-superglobals-directly -good-or-bad-in-php) – vaxquis