我正在为我一直在研究的项目开发一个数据库类。我想知道以下函数是否有任何漏洞或错误,允许有人使用MySQL注入。
public function sql_validate($var)
{
if (is_null($var))
{
return NULL;
}
else if (is_string($var))
{
return "'" . $this->sql_escape($var) . "'";
}
else if (is_bool($var))
{
return intval($var);
}
else
{
return $var;
}
}
这是为字符串调用的函数sql_escape。
private function sql_escape($string)
{
if (!$this->db_connection)
{
return @mysql_real_escape_string($string);
}
return @mysql_real_escape_string($string, $this->db_connection);
}
答案 0 :(得分:5)
mysql_real_escape_string
使用最好的转义模式,因此它非常安全。
但是,我可以建议一个替代方案。为什么在有多个数据库类使用更安全的方法时创建数据库类 - 预备语句。简而言之,这些工作通过将SQL逻辑与用户输入的数据分开。
我建议使用PDO CLASS。
此外,您应该避免在PHP中使用错误抑制@
。因为这可能会抑制你甚至可能没想到的错误。
以下文章相当简单introduction to PDO.
答案 1 :(得分:2)
看起来您正在使用动态查询。
请考虑使用prepared statements。
另见What are prepared statements? How are they different from dynamic sql?