Ciao a tutti;
in giro sui vari forum ho trovato questo script per mettersi al riparo dall'sql-injection, volevo sapere se secondo voi sembra completo o se mancano ancora delle casistiche:

Codice PHP:
$username $_POST["username"];
$password $_POST["password"];

$username mysql_real_escape_string($_POST["username"], $connessione);
$password mysql_real_escape_string($_POST["password"], $connessione);

if(
strlen($username) >= MAX_USERNAME_LEN || strlen($password) >= MAX_PASSWORD_LEN)  { 
    echo 
“Hai inserito nome o password troppo lunghi!;  
    return;
    }

if(
strpbrk($username,;-+()=><@ ))  { 
    echo 
“Hai inserito caratteri non validi nel nome!
    return;
    }

if(
containsSQL($username) || containsSQL($password))  { 
    echo 
“Nome e/o password contengono keyword SQL!
    return; 
    }

function 
containsSQL($string) {
   
$keywords =  array(“SELECT”“INSERT”“CREATE”“DELETE”“FROM”“WHERE”“OR”“AND”“LIKE”“EXEC”“SP_”,       “XP_”“SQL”“ROWSET”“OPEN”“BEGIN”“END”“DECLARE”);
   
   foreach(
$keywords as $cur) {
      if(
stristr($string$cur)) return true;
   }
   return 
false;
}

$res mysql_query(“SELECT FROM users WHERE name ‘$username’ AND password ‘$password’”); 

Non sono molto pratico dell'argomento, ma se la interpreto bene fondamentalmente elimina caratteri e parole chiave "rischiosi" ed inoltre impone una lunghezza massima sui campi user e password... Quest'ultimo controllo mi sembra aleatorio visto che quei campi dovrebbero contenere almeno 15-20 caratteri... Inoltre mi chiedo come mai non fa il controllo dei caratteri particolari anche sulla password? In ogni caso, effettuando il controllo in questo modo, viene meno la necessità di utilizzare espressioni regolari?