Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Problema login

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    92

    Problema login

    Ragazzi ho delle password nel database criptate con md5; la mia pagina di login è questa:

    Codice PHP:
    <?php

    include_once("connessione.php");
    $password $_POST['password_usr'];

    if(isset(
    $password))
    {
        
    $query mysql_query("SELECT * FROM password WHERE PASSWORD = '$password'") or die(mysql_error());

        while(
    $row mysql_fetch_array($query))
        {  
           
    $tabella $row['TABLENAME'];
           
    $dbpassword $row['PASSWORD'];
        }
        if(
    md5($password) == $dbpassword)
        {
           
    $_GET['lista_nozze'] = $tabella;
           echo 
    '<div class="risp">Login effettuato con successo. [url="index.php?pag=liste&lista_nozze='.$tabella.'"]Controlla la tua lista[/url]</div>';
           
    $_SESSION['login'] = 1;
        }
        else
        {
           echo 
    '<div class="risp">Password non corretta</div>';
        }
    }
    else
    {
       die (
    '<div class="risp">Per favore inserisci la password.</div>');
    }
    ?>
    mi dice password errata come mai?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Ci sono delle cose che non capisco

    1. quando cicli i risultati della query, ad ogni iterazione sovrascrivi i valori di table e password, perciò che cicli a fare?

    2. la query non mi torna, cioè se piu righe hanno la stessa password che fai le tiri fuori tutte?

    3. la tabella si chiama password, sei sicuro?

    Postaci anche la struttura della tabella cosi capiamo meglio

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Io intanto non farei cosi'.

    io farei :
    1- Imposta la tabella utenti con login(univoco) e pwd.
    2- A tempo di login query sul campo login
    3- Se la query mi risponde il risultato deve essere 1 tupla altrimenti errore
    4- passo a md4 la pwd inserita dall'utente
    5- controllo la pwd del db con quella passata ad md5 al punto 4
    6- se coincidono accedi altrimenti esci.



    Si fa cosi' perche mdh soffre di collisioni e 2 pwd diverse hanno una probabilita, molto bassa ma c'e', di risultate uguali.
    Poi la query viene eseguita sul nome utente che e' unico e se non trovo solo 1 riga gia' trovo il primo errore.
    Poi le pwd le controllo da codice evitando injections e altro.

    Ovviamente il nome utente deve essere opportunamento controllato prima di essere concatenato con la query.

  4. #4
    Originariamente inviato da Virus_101
    Io intanto non farei cosi'.

    io farei :
    1- Imposta la tabella utenti con login(univoco) e pwd.
    2- A tempo di login query sul campo login
    3- Se la query mi risponde il risultato deve essere 1 tupla altrimenti errore
    4- passo a md4 la pwd inserita dall'utente
    5- controllo la pwd del db con quella passata ad md5 al punto 4
    6- se coincidono accedi altrimenti esci.
    Perche' complicarsi la vita? Basta una query:

    Codice PHP:
    <?php
    require_once 'connessione.php';

    if ( !isset(
    $_POST['user']) OR !isset($_POST['pass']) ) {
        
    // messaggio di errore per campi non compilati
    }
    $user mysql_real_escape_string(stripslashes($_POST['user']));
    $pass mysql_real_escape_string(stripslashes($_POST['pass']));

    $sql "SELECT * FROM tabella_utenti
            WHERE user = '
    $user'
            AND pass = MD5('
    $pass')";
    $result mysql_query($sql);

    if ( 
    mysql_num_rows($result) ) {
        
    // login OK
    } else {
        
    // login errato
    }
    ovviamente nome della tabella e dei campi sono solo indicativi.

    Originariamente inviato da Virus_101
    Si fa cosi' perche mdh soffre di collisioni e 2 pwd diverse hanno una probabilita, molto bassa ma c'e', di risultate uguali.
    Il problema non sono le collisioni casuali, ma il fatto che un campo password non e' unico, visto che due persone possono scegliere la stessa password.
    Originariamente inviato da Virus_101
    Poi la query viene eseguita sul nome utente che e' unico e se non trovo solo 1 riga gia' trovo il primo errore.
    Non c'e' motivo per non controllare sia user che pass nella stessa query
    Originariamente inviato da Virus_101
    Poi le pwd le controllo da codice evitando injections e altro.
    Se puoi (e devi) rendere sicuro l'user perche' non farlo anche con la password?

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Si vero ma io prefersisco sempre controllare la pwd da codice, alla fine non cambia molto solo bisogna porre attenzione alle injections. Quindi controllare sempre le magic quotes sono attive. Se cosi' non fosse potrei mettere user ' or 1 drop table users --

  6. #6
    Originariamente inviato da Virus_101
    Si vero ma io prefersisco sempre controllare la pwd da codice, alla fine non cambia molto solo bisogna porre attenzione alle injections. Quindi controllare sempre le magic quotes sono attive. Se cosi' non fosse potrei mettere user ' or 1 drop table users --
    Scusami ma non capisco perche' la password ti sembra vulnerabile mentre il nome utente no. Il mio pezzetto di codice quota correttamente i valori che ci siano o meno le magic quotes attive. Non che sia il modo migliore per fare le query, ma purtroppo nessun tutorial parla mai di prepared statements o di PDO.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    92
    Ok ora funziona, grazie, mi puoi dire a che serve
    $pass = mysql_real_escape_string(stripslashes($_POST['pass'])); ??

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    x kb nn ho mai detto una cosa del genere io ho solo detto che io prefisco operare cosi' quindi passare solamente lo user opportunamente controllato alla query e controllare la pwd in seguito via codice.

    Tutto la.

  9. #9
    Originariamente inviato da Virus_101
    x kb nn ho mai detto una cosa del genere io ho solo detto che io prefisco operare cosi' quindi passare solamente lo user opportunamente controllato alla query e controllare la pwd in seguito via codice.

    Tutto la.
    Chiaramente tu puoi fare come preferisci, ma quando dai consigli a chi chiede aiuto dovresti usare motivazioni tecniche e non preferenze personali che non hanno una ragione fondata. Senno' poi uno si domanda "ma perche' user si e password no?"

  10. #10
    Originariamente inviato da Sampei89
    Ok ora funziona, grazie, mi puoi dire a che serve
    $pass = mysql_real_escape_string(stripslashes($_POST['pass'])); ??
    Dunque:

    - stripslashes() serve per eliminare tutti i backslash che PHP mette automaticamente davanti ad alcuni caratteri se la direttiva magic quotes e' attiva. Riferimento: http://php.net/manual/en/security.magicquotes.php

    - mysql_real_escape_string() e' una funzione specifica per MySQL che serve a codificare correttamente le stringhe da usare nelle query per evitare problemi di sicurezza

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.