这个sql输入验证安全吗?
我目前正在为我一直在从事的项目开发数据库类。我想知道以下函数是否存在任何漏洞或错误,从而允许有人使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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.