Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    SQL injection - verifica script

    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?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Direi che alcuni controlli sono alquanto esagerati, specie quelli della funzione containsSQL()

    Stando così le cose se come username voglio mettere ORLANDO, ho violato 2 delle regole, c'è un OR e un AND, quindi non mi fa registrare.

    Ti basta non permettere gli spazi nella username e nella password per stare a posto, perché al massimo uno potrebbe mettere del codice SQL, ma senza spazi va in errore, ad esempio

    SELECT*FROMtablella

    e questo non funziona.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Uhm...uhm...uhnm... in effetti hai ragione!
    Quindi passo i campi in real_escape, controllo per sicurezza che in user e password non ci siano caratteri pericolosi ed elimino eventuali spazi con str_replace o c'è una funzione più specifica?
    Non è il mio caso, ma se avessi anche un campo "indirizzo" o qualunque campo che deve permettere anche spazi, come dovrei validarlo?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    No, non li devi rimuovere, se ci sono non fai registrare l'utente, perché se io come username metto "pinco pallino" e tu mi fai registrare, ma senza che io lo sappia mi togli lo spazio, quando tenterò il login scriverò "pinco pallino", ma non potrò accedere perché tu nel db hai salvato "pincopallino".

    Ti basta mysql_real_escape_string() e un'espressione regolare per vedere se ci sono caratteri che non vuoi che si usino.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    in realtà mi sono accorto che nell'elenco dei caratteri non validi della funzione strpbrk alla fine c'è anche lo spazio bianco e facendo delle prove già così nn accetta stringhe con spazi... a questo punto direi che basta così o ti viene in mente altro?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.