【发布时间】:2011-04-15 20:23:52
【问题描述】:
我将一个变量传递给一个执行查询的函数
MySQL 连接只发生在函数内部,并在函数内部关闭
我希望能够在将字符串发送到函数之前安全地转义字符串
我不能使用 mysql_real_escape_string,因为它需要 MySQL 连接(仅在函数内部进行)
我知道简单的答案是在函数内转义字符串,但我不能这样做,因为我需要发送一些转义的字符串和一些非转义的字符串部分
例如,我需要像这样运行函数:
myquery("'" . escape_me("My string") . "'");
请注意,我发送了两个撇号——未转义,内部带有转义字符串。出于这个原因,我不能对 myquery 函数内部的参数执行一揽子 mysql_real_escape_string。
我找到了下面的代码,建议我可以用它来替代mysql_real_escape_string:
// escape characters
function escape_me($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;
}
我不知道这个函数是否可以免受多字节攻击,但我想我每次查询时也需要撤消该函数
例如,输入: 测试3的“OK”在数据库中变成了Testing 3x27s x22OKx22
所以我的主要问题是: 你知道我是否可以使用另一个函数来替代 mysql_real_escape_string 来安全地转义字符?
【问题讨论】:
-
有未转义内容的示例吗?