Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 12

Discussione: Sicurezza dati form per insert e select in database

  1. #1
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107

    Sicurezza dati form per insert e select in database

    Di discussioni come questa se ne vedono a palate per il web, ma non sono riuscito a farmi un'idea chiara.

    Nel mio small project devo neutralizzare i dati che gli utenti mandano in input dato che in internet niente è sicuro [cit. Borgo Italia ].

    Questi dati sono pochi (per ora):
    -Username
    -Password
    -Email
    -Testo dei messaggi

    Io per ora uso una cosa semplice tipo questa per il login o registrazione:
    -Tolgo gli apostrofi (sostituisco "'" con "") (li permetto solo nei messaggi)
    -controllo lunghezza min e max
    -htmlentities
    -addshashes

    E per le mail nella registrazione devo ancora aggiungere la funzione per controllare che abbia il formato valido

    Mentre per il testo dei messaggi:
    -htmlentities
    -addslashes

    Ora parto con le domande:
    1. L'addslashes nel login è inutile se tolgo gli apostrofi vero?
    2. Con un metodo del genere quanto sarei sicuro da 1 a 10?
    3. Ho visto che alcuni considerano addslashes deprecato. Molti giocano con "get_magic_quotes_gpc()": se è attivo usano stripshashes (dicono che get_magic_quotes non sia perfetto) e poi utilizzano mysql_real_escape_string; se invece è disattivo usano semplicemente mysql_real_escape_string.
    Questo ragionamento andrebbe bene dato che il mio host non mi permette di modificare php.ini

    Ragazzi è da tutto il pomeriggio che leggi post su post ma niente da fare.
    Chiedo qui perchè per altre cose mi sono chiarito bene le idee.
    Grazie in anticipo

  2. #2
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107
    un'aiutino? qualcuno può darmelo? Grazie

  3. #3
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,441
    ciao
    considera che è ferragosto e molti sono in spiagga.
    comunque cominciamo:
    più che togliere intanto io verificherei i dati immessi e se non sono adeguati li farei reinserire senza nemmeno avvicinarsi al db.
    es per verificare user e pass potresti usare una funzione di questo tipo
    Codice PHP:
    //$testo=testo da verificare, $mi lunghezza minima del testo, $ma lunghezza massima
    function ver_testo($testo,$mi,$ma){
        
    $pattern="/^[a-zA-Z0-9]{".$mi.",".$ma."}$/";//al pattern poi puoi eggiungere eventuali carratteri particolari es l'undescore
        
    if(preg_match($pattern$testo)){
            
    //testo ok
            
    return TRUE;
        }else{
            return 
    FALSE;
        }

    per l'email
    Codice PHP:
    $verifica=filter_var($emailFILTER_VALIDATE_EMAIL);//restituisce TRUE se email ok, altrimenti FALSE 
    per un testo lungo userei
    Codice PHP:
    $tag_ammessi="<br> <br /> <p>";// strip_tags toglie tutti i tag con esclusione degli ammessi se ci sono
    $testo=strip_tags($testo$tag_ammessi);//strip_tags($testo)toglie tutti i tag es <a></a> e <script></script> 
    fatto questo (ti scrivo in pseudo codice)
    se controlli == TRUE salvi (o fai quello che devi fare)
    altrimenti rimandi l'utente al form pulito per un nuovo tentativo

    ultimo per ora: la pass dovrebbe essere salvata nel db codificata, come minimo con sha1

    comunque se cerchi nel forum trovi diversi post sull'argomento
    comunque siamo qui

  4. #4
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107
    Ciao e grazie per la risposta!

    Ho alcuni dubbi:

    -Ok per la email;
    -Ok per l'username;
    -Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
    -Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
    -Non hai mai usato addslashes: lo metto sempre vero? E per il discorso di get_magic_quotes_gpc() e mysql_real_escape_string? cosa mi consiglieresti?

    Grazie mille

  5. #5
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,441
    ciao
    -Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
    dovrebbe essere sufficiente sha1, ho sentito comunque che ci sono delle lib di codifica migliori ma non le conosco, spero che alex legga questo post e ti sappia dire
    -Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
    dipende, se es fai scrivere il testo con uno dei wisi che es aggiungono lo stong, se togli tutto elimini anche lo strong, con strip_tags puoi decidere quali tag lasciare e quali eliminare
    io usa addslashes quando salvo nel db e stripslashes quando leggo e visualizzo, non uso mysql_real_escape_string, anche se so che con le pdp ci sono mezzi diversi

  6. #6
    marco_rx è offline Utente del Forum
    Data Registrazione
    Dec 2010
    Messaggi
    126
    Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
    L'ideale sarebbe criptare la password con un salt:
    Codice PHP:
    $cryptedPassword sha1(sha1($salt) . sha1($password)); 
    In alternativa se vuoi fare una cosa più semplice ma abbastanza sicura usa sha512 per criptare la password:
    Codice PHP:
    $cryptedPassword hash('sha512'$password); 

    Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
    Dipende dalle tue esigenze, se vuoi consentire l'utilizzo di alcuni tag usa strip_tags, altrimenti htmlentities può andar bene.


    on hai mai usato addslashes: lo metto sempre vero? E per il discorso di get_magic_quotes_gpc() e mysql_real_escape_string? cosa mi consiglieresti?
    Per evitare questi problemi potresti usare classi per l'astrazione come pdo, che sono soluzioni nettamente migliori.
    Altrimenti per quanto riguarda get_magic_quotes_gpc e mysql_real_escape_string fai cosi (addslashes non lo vedo necessario se utilizzi mysql_real_escape_string):
    Codice PHP:
    // verifichi se il magic quote è attivo, nel caso lo fosse elimini i backslash inseriti da php con stripslashes
    if(get_magic_quotes_gpc()) {
        
    $username stripslashes($username);
        
    $email    stripslashes($email);
        
    // eventuali altri dati
    }

    // fatto questo effettui l'escape di eventuali caratteri pericolosi con mysql_real_escape_string
    $username mysql_real_escape_string($username);
    $email    mysql_real_escape_string($email);
    // eventuali altri dati 
    Ultima modifica di marco_rx; 18-08-2012 alle 15:04

  7. #7
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107
    Citazione Originariamente Scritto da marco_rx Visualizza Messaggio
    L'ideale sarebbe criptare la password con un salt:
    Codice PHP:
    $cryptedPassword sha1(sha1($salt) . sha1($password)); 
    In alternativa se vuoi fare una cosa più semplice ma abbastanza sicura usa sha512 per criptare la password:
    Codice PHP:
    $cryptedPassword hash('sha512'$password); 


    Dipende dalle tue esigenze, se vuoi consentire l'utilizzo di alcuni tag usa strip_tags, altrimenti htmlentities può andar bene.



    Per evitare questi problemi potresti usare classi per l'astrazione come pdo, che sono soluzioni nettamente migliori.
    Altrimenti per quanto riguarda get_magic_quotes_gpc e mysql_real_escape_string fai cosi:
    Codice PHP:
    // verifichi se il magic quote è attivo, nel caso lo fosse elimini i backslash inseriti da php con stripslashes
    if(get_magic_quotes_gpc()) {
        
    $username stripslashes($username);
        
    $email    stripslashes($email);
        
    // eventuali altri dati
    }

    // fatto questo effettui l'escape di eventuali caratteri pericolosi con mysql_real_escape_string
    $username mysql_real_escape_string($username);
    $email    mysql_real_escape_string($email);
    // eventuali altri dati 

    Ok grazie a entrambi.
    Si può chiudere^^

  8. #8
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,441
    ciao
    aspetto a chiudere (può rispondere/interessare a qualcun'altro).
    comunque vorrei fare un'osservazione sulle pass.
    il criptaggio della pass può essere più o meno buono, ma se es come pass usi "123456" anche con il criptaggio migliore in 5 sec bucano il tuo db.
    analogo discorso se usi il nome del tuo gatto.
    il problema principale (in funzione del grado di sicurezza che ti serve) è la creazione di pass lunghe (12 o più caratteri) senza senzo compiuto con numeri lettere maiscole e minuscole e un pizzico di caratteri particolari (_*£)
    poi, come detto, tutto dipende dalla sicurezza che vuoi e che ti serve, se devi proteggere il conto in banca è una cosa se invece serve per diminuire lo spam è un'altra

  9. #9
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107
    Mmmm ok, grazie

  10. #10
    Malware è offline Utente del Forum
    Data Registrazione
    Jul 2012
    Messaggi
    107
    Non ho trovato il tasto edit.

    Scusate l'ignoranza ma...
    Questa è la configurazione del mio server:
    http://server47.000webhost.com/phpinfo.php

    get_magic_quotes_gpc non è attivo vero?
    Thanks

Pagina 1 di 2 12 UltimaUltima

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •