我有獲取要求的任何其他腳本,這是我寫的消毒用戶輸入一個「走出去」的劇本:PHP/MySQL的:消毒用戶輸入 - 這是一個壞主意?
foreach ($_REQUEST as $key => $value){
if (get_magic_quotes_gpc())
$_REQUEST[$key] = mysql_real_escape_string(stripslashes($value));
else
$_REQUEST[$key] = mysql_real_escape_string($value);
}
我還沒有看到任何人使用這種方法。有什麼理由不這樣做?
編輯 - 修訂了爲數組工作:
function mysql_escape($thing) {
if (is_array($thing)) {
$escaped = array();
foreach ($thing as $key => $value) {
$escaped[$key] = mysql_escape($value);
}
return $escaped;
}
// else
if (get_magic_quotes_gpc()) $thing = stripslashes($thing);
return mysql_real_escape_string($thing);
}
foreach ($_REQUEST as $key => $value){
$_REQUEST[$key] = mysql_escape($value);
}
不幸的是,我的字符集是UTF-8,而不是僅限於拉丁字符。我已經把它解決了,這樣所有的東西都可以正確地轉義出來,但是我想我只是太偏執了,我會留下一些開放的SQL注入。 – Greg 2009-11-28 07:02:12
mysql_real_escape_characters是清理進入數據庫的用戶輸入的更好選項。 – Residuum 2009-11-28 07:45:04
@Residuum:我似乎無法在手冊中找到。 – Greg 2009-11-28 07:58:05