3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
沒有DB連接就無法安全地轉(zhuǎn)義字符串。mysql_real_escape_string()
并且準(zhǔn)備好的語句需要連接到數(shù)據(jù)庫,以便它們可以使用適當(dāng)?shù)淖址D(zhuǎn)義字符串-否則,使用多字節(jié)字符仍然可能發(fā)生SQL注入攻擊。
如果僅測試,那么您可能還可以使用mysql_escape_string()
,它不能100%保證不會受到SQL注入攻擊,但是如果沒有數(shù)據(jù)庫連接就無法構(gòu)建任何更安全的東西。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
好吧,根據(jù)mysql_real_escape_string函數(shù)參考頁:“ mysql_real_escape_string()調(diào)用MySQL的庫函數(shù)mysql_real_escape_string,它轉(zhuǎn)義了以下字符:\ x00,\ n,\ r,\,',“和\ x1a?!?/p>
考慮到這一點(diǎn),那么您發(fā)布的第二個(gè)鏈接中給出的功能應(yīng)該完全滿足您的需求:
function mres($value)
{
$search = array("\\", "\x00", "\n", "\r", "'", '"', "\x1a");
$replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");
return str_replace($search, $replace, $value);
}

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
與我的其他答案完全相反,即使使用多字節(jié)字符,此后續(xù)功能也可能是安全的。
// replace any non-ascii character with its hex code.
function escape($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
我希望比我自己更有知識的人可以告訴我為什么上面的代碼行不通...
添加回答
舉報(bào)