我發現這段代碼在這裏: http://php.net/manual/de/reserved.variables.get.php
想用它來使我的代碼更安全。我在我的項目中使用了很多$ _GET var。
請,如果可能的話,我希望你的專業人士看看,看看這段代碼是否可以增強或有任何問題。
還有就是要防止惡意注入和選項$ _GET輸入插入默認值一個聰明的辦法:
<?php
// Smart GET function
public function GET($name=NULL, $value=false, $option="default")
{
$option=false; // Old version depricated part
$content=(!empty($_GET[$name]) ? trim($_GET[$name]) (!empty($value) && !is_array($value) ? trim($value) : false));
if(is_numeric($content))
return preg_replace("@([^0-9])@Ui", "", $content);
else if(is_bool($content))
return ($content?true:false);
else if(is_float($content))
return preg_replace("@([^0-9\,\.\+\-])@Ui", "", $content);
else if(is_string($content))
{
if(filter_var ($content, FILTER_VALIDATE_URL))
return $content;
else if(filter_var ($content, FILTER_VALIDATE_EMAIL))
return $content;
else if(filter_var ($content, FILTER_VALIDATE_IP))
return $content;
else if(filter_var ($content, FILTER_VALIDATE_FLOAT))
return $content;
else
return preg_replace("@([^a-zA-Z0-9\+\-\_\*\@\$\!\;\.\?\#\:\=\%\/\ ]+)@Ui", "", $content);
}
else false;
}
/*
DEFAULT: $_GET['page'];
SMART: GET('page'); // return value or false if is null or bad input
*/
?>
來源:http://php.net/manual/de/reserved.variables.get.php
有沒有這樣的事情,「一個字符串安全」的單一代碼,因爲這一切都取決於你正在使用的變量*爲*:你是把數據庫,回聲在HTML中,或也許都是,或者完全是其他的東西?逃避應該總是針對特定的數據片段,在特定的使用環境中進行;它不能在整個用戶輸入中一般地完成。 – IMSoP
這個函數也有bug,例如,is_bool和is_float永遠不會返回true,因爲$ _GET中的所有內容都是一個字符串,正如從trim()返回的所有內容一樣。這些函數不會查看字符串的內容,只是變量的類型。它會返回null,而不是false,因爲'else false'並不意味着什麼(我很驚訝它不是語法錯誤)。 – IMSoP
可能重複[如何防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – vascowhite