这个sql输入验证是否安全?

Goa*_*uy6 0 php mysql sql-injection

我正在为我一直在研究的项目开发一个数据库类.我想知道以下函数是否有任何漏洞或错误,允许有人使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是为字符串调用的函数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);
}
Run Code Online (Sandbox Code Playgroud)

Rus*_*ias 5

mysql_real_escape_string 使用任何逃逸模式是最好的,因此它是相当安全的.

但是,我可以建议一个替代方案.为什么在有多个数据库类使用更安全的方法时创建数据库类 - 预备语句.简而言之,这些工作通过将SQL逻辑与用户输入的数据分开.

我建议使用PDO CLASS.

此外,您应该避免@在PHP中使用错误抑制.因为这会抑制你甚至可能没想到的错误.

以下文章是对PDO的一个相当简单的介绍.