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?