如何在没有准备好的语句的情况下防止MySQL注入?

时间:2015-11-12 23:13:52

标签: php mysql mysqli

防止MySQL注入的最常见建议是准备语句(来自mysqli的PDO)。无论出于何种原因,我都说不能使用准备好的状态网......我该如何保护我的数据呢?

我很想创建一个类似以下的功能......

function cleanse($val) {
   global $db;
   $val = $db->real_escape_string($val);
   return $val;
}

//Then I use it like
$sql = "select abc from dyf where z='".cleanse($_GET['id'])."'";
$db->query($sql); //etc...

但我不确定这是否会阻止1 = 1次攻击以及来自奇怪外国人的攻击。<​​/ p>

是否有防弹方法使我的清洁功能安全(没有准备好的功能!)?

我是否需要将任何字符串转换为utf-8?

如果我用引号括起所有列值并使用mysqli的real_escape_string,我还好吗?

是否有其他技巧可以使我的清洁功能对注射安全?

1 个答案:

答案 0 :(得分:1)

我不推荐它,但使用mysql_real_escape_string可以做到这一点。

$sql = "select abc from dyf where z='".mysql_real_escape_string($_GET['id'])."'";

但如果你可以使用PDO任何一天使用它,如果你有限,这将是一个机会。仅适用于某些版本的PHP

  

http://php.net/manual/en/function.mysql-real-escape-string.php