php - 这个sql输入验证安全吗?

标签 php mysql sql-injection

我目前正在为我一直从事的项目开发数据库类。我想知道以下函数是否有任何漏洞或错误,从而允许有人使用 MySQL 注入(inject)。

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);
}

最佳答案

mysql_real_escape_string 使用最好的转义模式,因此它相当安全。

但是,我可以建议一个替代方案。为什么要创建一个数据库类,因为有几个数据库类使用更安全的方法——准备好的语句。简而言之,它们通过将 SQL 逻辑与用户输入的数据分离来工作。

我建议使用 PDO CLASS .

此外,您应该真正避免在 PHP 中使用错误抑制 @。因为这往往会抑制您可能意想不到的错误。

下面的文章相当直白introduction to PDO.

关于php - 这个sql输入验证安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623756/

相关文章:

php - 使用键名但空值初始化关联数组

php - 将数组从 php 发送到 javascript

sql-server - MS SQL 查询这安全吗?

mysql - SQL注入(inject)方法帖子

php - 根据 ID 从 MySQL 中删除一行

php - 在登录系统中执行 OOP 风格

php - 如何将文本字符串批量转换为具有 MySQL 关系的唯一 ID

java - 如何将输入数据添加到SQL值中?

php - PDO使用数组更新表

java - Hibernate Criteria Api 是否完全防止 SQL 注入(inject)