3 回答
TA贡献1831条经验 获得超10个赞
没有DB连接就无法安全地转义字符串。mysql_real_escape_string()
并且准备好的语句需要连接到数据库,以便它们可以使用适当的字符集转义字符串-否则,使用多字节字符仍然可能发生SQL注入攻击。
如果仅测试,那么您可能还可以使用mysql_escape_string()
,它不能100%保证不会受到SQL注入攻击,但是如果没有数据库连接就无法构建任何更安全的东西。
TA贡献1828条经验 获得超3个赞
好吧,根据mysql_real_escape_string函数参考页:“ mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它转义了以下字符:\ x00,\ n,\ r,\,',“和\ x1a。”
考虑到这一点,那么您发布的第二个链接中给出的功能应该完全满足您的需求:
function mres($value)
{
$search = array("\\", "\x00", "\n", "\r", "'", '"', "\x1a");
$replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");
return str_replace($search, $replace, $value);
}
TA贡献1847条经验 获得超11个赞
与我的其他答案完全相反,即使使用多字节字符,此后续功能也可能是安全的。
// 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;
}
我希望比我自己更有知识的人可以告诉我为什么上面的代码行不通...
添加回答
举报