这个sql输入验证安全吗?

发布于 2024-09-16 23:39:51 字数 665 浏览 8 评论 0原文

我目前正在为我一直在从事的项目开发数据库类。我想知道以下函数是否存在任何漏洞或错误,从而允许有人使用 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);
}

I'm currently developing a database class for a project I've been working on. I would like to know if the following function has any holes or errors in it that would allow for someone to use MySQL injection.

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

Here's the function sql_escape which is called for strings.

private function sql_escape($string)
{
    if (!$this->db_connection)
    {
        return @mysql_real_escape_string($string);
    }

    return @mysql_real_escape_string($string, $this->db_connection);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情话难免假 2024-09-23 23:39:51

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

但是,我可以建议一个替代方案吗?当有几个数据库类使用更安全的方法 - 准备好的语句时,为什么要创建一个数据库类。简而言之,它们的工作原理是将 SQL 逻辑与用户输入的数据分开。

我建议使用 PDO CLASS

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

以下文章是相当简单的 PDO 简介。

mysql_real_escape_string uses whatever escaping mode is best, therefore it is fairly secure.

However, may I suggest an alternative. Why create a database class when there are several out there which utilize a much more secure method - Prepared statements. In a nutshell these work by separating SQL logic from user inputted data.

I would suggest using the PDO CLASS.

Also, you should really avoid using error suppression @ in PHP. As this tends to suppress errors which you might not even expect.

The following article is a fairly straightforward introduction to PDO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文