2010-09-02 117 views
0

我目前正在为我一直在研究的项目开发一个数据库类。我想知道下面的函数是否有任何漏洞或错误可以让别人使用MySQL注入。这是sql输入验证安全吗?

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

回答

5

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

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

我会建议使用PDO CLASS

另外,你应该避免在PHP中使用错误抑制@。因为这往往会抑制你可能没有想到的错误。

下面的文章是一个相当简单的introduction to PDO.