2010-09-02 3 views
0

Je développe actuellement une classe de base de données pour un projet sur lequel j'ai travaillé. Je voudrais savoir si la fonction suivante a des trous ou des erreurs qui permettraient à quelqu'un d'utiliser l'injection MySQL.Cette validation d'entrée sql est-elle sécurisée?

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

Voici la fonction sql_escape qui est appelée pour les chaînes.

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

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

Répondre

5

mysql_real_escape_string utilise tout le mode est le mieux Escaping, il est donc assez sûr.

Cependant, je peux suggérer une alternative. Pourquoi créer une classe de base de données quand il y en a plusieurs qui utilisent une méthode beaucoup plus sûre - Les instructions préparées. En un mot, cela fonctionne en séparant la logique SQL des données entrées par l'utilisateur.

Je suggère d'utiliser le PDO CLASS.

En outre, vous devriez vraiment éviter d'utiliser la suppression d'erreur @ en PHP. Comme cela tend à supprimer les erreurs que vous ne pourriez même pas attendre.

L'article suivant est une introduction to PDO. assez simple