2010-09-02 54 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.