Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48

    protezione DB e ciftratura della password

    Da un form inserisco dei dati per memorizzarli nel database, però la password non vine cifrata, ma bensi viene scritta così come la scrivo io.
    Codice PHP:
    <?php  include "db.php"?>  -->stabilisco la connessione con il database
    <?phpfunction creaDati(){
      if(isset(
    $_POST["submit"])){    
    global 
    $connessioneDB;  
    $user $_POST["username"];  
    $pass $_POST["password"];

      
    $hashPsw '$2y$10$';  
    $saltPsw 'utilizzounalungastringa23';  
    $pswSicura $hashPsw.$saltPsw;  
    $pass crypt($pass$pswSicura);

     
    // CREARE NUOVI IN TABELLA
    $stmt $connessioneDB ->prepare("INSERT INTO utenti(username , password) VALUES(?, ?)");  
    $stmt -> bind_param("ss" $_POST["username"] ,  $_POST["password"]);  
    $stmt -> execute();  
    $stmt -> close();
    }
    }
    -----------------------------------------------------------------------------------------------------------
    Invece con qust'altro codice la password me la cifra.
    Codice PHP:
    <?php include "db.php" ?> --> stabilisce connessione al database
    <?phpfunction creaDati(){
      if (isset(
    $_POST["submit"])) {  
    global 
    $connessioneDB;    
    $user $_POST["username"];    
    $pass $_POST["password"];

    $hashPsw '$2y$10$';    
    $saltPsw 'utilizzounalungastringa23';    
    $pswSicura $hashPsw.$saltPsw;    
    $pass crypt($pass$pswSicura);

    $test mysqli_query($connessioneDB"INSERT INTO utenti(username,password)VALUES('$user' , '$pass')");

    mysqli_close($connessioneDB);
    }
    }
    Perchè il primo non cifra ed il secondo si?
    Ultima modifica di phelps; 06-02-2018 a 16:33

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    basta che vedi cosa inserisci nel db nel primo caso ($_POST['pasword'], ovvero in chiaro) e nel secondo ($pass, ovvero quella criptata)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48
    non ho capito.

    La prima parte di codice è identica per tutti e due quello che cambia è solo questo:
    $stmt = $connessioneDB ->prepare("INSERT INTO utenti(username , password) VALUES(?, ?)");
    $stmt -> bind_param("ss" , $_POST["username"] , $_POST["password"]);
    $stmt -> execute();
    $stmt -> close();

    e invece nell altro c'è la forma senza la pretezione del DB
    $test = mysqli_query($connessioneDB, "INSERT INTO utenti(username,password)VALUES('$user' , '$pass')");



  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Allora:
    $_POST['password'] contiene la password in chiaro (es pippo)

    $pass, dopo aver fatto la funzione crypt() conterrà la password criptata:
    Codice PHP:
    $hashPsw '$2y$10$';
    $saltPsw 'utilizzounalungastringa23';
    $pswSicura $hashPsw.$saltPsw;
    $pass crypt($pass$pswSicura); 
    ok fin qui?


    Nel primo caso, utilizzando i prepared statements, metti nel database $_POST['password'] (ovvero pippo)
    Codice PHP:
    $stmt $connessioneDB ->prepare("INSERT INTO utenti(username , password) VALUES(?, ?)");
     
    $stmt -> bind_param("ss" $_POST["username"] , $_POST["password"]);  // noti $_POST['password'] ? 
    Nel secondo invece ci metti $pass, che come ti ho detto è la password "pippo" criptata
    Codice PHP:
    $test mysqli_query($connessioneDB"INSERT INTO utenti(username,password)VALUES('$user' , '$pass')"); 
    PS: Se devi prendere l'input del utente e operare sul db è sempre meglio usare i prepared statements

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48
    Quote Originariamente inviata da boots Visualizza il messaggio
    Allora:
    $_POST['password'] contiene la password in chiaro (es pippo)

    $pass, dopo aver fatto la funzione crypt() conterrà la password criptata:
    Codice PHP:
    $hashPsw '$2y$10$';
    $saltPsw 'utilizzounalungastringa23';
    $pswSicura $hashPsw.$saltPsw;
    $pass crypt($pass$pswSicura); 
    ok fin qui?


    Nel primo caso, utilizzando i prepared statements, metti nel database $_POST['password'] (ovvero pippo)
    Codice PHP:
    $stmt $connessioneDB ->prepare("INSERT INTO utenti(username , password) VALUES(?, ?)");
     
    $stmt -> bind_param("ss" $_POST["username"] , $_POST["password"]);  // noti $_POST['password'] ? 
    Nel secondo invece ci metti $pass, che come ti ho detto è la password "pippo" criptata
    Codice PHP:
    $test mysqli_query($connessioneDB"INSERT INTO utenti(username,password)VALUES('$user' , '$pass')"); 
    PS: Se devi prendere l'input del utente e operare sul db è sempre meglio usare i prepared statements
    ok si. Ho capito. Scusa ma sto imparando.
    Allora per proteggere un database è meglio utilizzare il caso uno con gli statement?

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se i dati da inserire vengono "dall'esterno", tipo form, allora è raccomandatissimo. In questo caso eviti attacchi di tipo sql injection.
    Se invece sei sicuro della loro provenienza (esempio, li generi nello script tu), allora puoi farne a meno
    Ultima modifica di boots; 07-02-2018 a 13:04

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48
    Quote Originariamente inviata da boots Visualizza il messaggio
    Se i dati da inserire vengono "dall'esterno", tipo form, allora è raccomandatissimo. In questo caso eviti attacchi di tipo sql injection.
    Se invece sei sicuro della loro provenienza (esempio, li generi nello script tu), allora puoi farne a meno
    Ok.. compreso.
    Invece la criptazione della password per quali eventi può essere utile ?

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    principalmente per evitare che se qualche malintenzionato riesca a leggere il database, non possa cmq ottenere l'accesso al sito

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48
    Ciao
    il mysqli_real_escape_string che imposto sulle due variabili che raccolgono le super globale post dei campi username e password di un form, possono sostituire gli statement??

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 © 2024 vBulletin Solutions, Inc. All rights reserved.