Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654

    login permette l'accesso in area riservata

    Come molti già sapranno dalle mie decine di post ( ) la mia login accede a diverse aree riservate: si seleziona l'area da un menu a tendina e si digita semplicemente la login; se è esatta si viene reindirizzati alla pagina opportuna.
    Tutto funziona a meraviglia, tranne quest'area qua sotto. Il problema è che permette di accedere a un'area diversa, Segreteria, immettendo la dovuta login (che si trova però su una tabella diversa da InsegnantiLogin). Perchè succede questo? :master:

    Codice PHP:
    if($scelta=='doc'){

                        
    $q "SELECT * FROM InsegnantiLogin WHERE InsegnantiLogin_Login='$login'";
                        
    $query mysql_query($q) or die(mysql_error());
                        
    $num=mysql_num_rows($query);
                        
                      if(
    $num>0){
                        while(
    $row=mysql_fetch_assoc($query)){
                          
    $password=$row["InsegnantiLogin_Password"];
                          
    $nome=$row["InsegnantiLogin_Nome"];
                          
    $cognome=$row["InsegnantiLogin_Cognome"];
                          
    $utente="$nome $cognome";
                          
    $login="$cognome.$nome";
                        }

                          if(
    $pwd==$password){
                            
    header("Location: Docenti/docenti.php");
                          }
                          else{
                            
    //ripeti login
                          
    }

                      }
                      else{
                        
    //ripeti login
                      
    }


  2. #2
    ripropni ancora lo stesso problema con lo stesso script????

    e' un login con poco senso. Dura a dirtelo ma ancora piu' dura tu a non capirlo.

    cos'e $login????
    codice:
    "SELECT * FROM InsegnantiLogin WHERE InsegnantiLogin_Login='$login'
    Poi... quante righe ti aspetti visto che usi il while e num righe > 0 ?

    Ammesso che siano piu' righe ti verrebbero tutte sovrascritte e valida sarebbe solo l'ultima tupla estratta (ultima di che?)

    La password e' molto meglio confrontarla nel db e non dai dati estratti.
    in ogni caso... perche' estrai tutti quei dati se poi usi solo la password????

    questo ed altro impediscono di darti una risposta "valida".

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Innanzitutto grazie per avermi risposto, nonostante il tono scortese
    Se ho riaperto il topic è per due motivi, non lo faccio a caso.
    1. Ho modificato in parte il codice e riguardato il database (da cui ho tolto un record che non doveva essere lì e che dava ulteriori problemi). Il problema però rimane.
    2. L'altro volta non ho avuto un cenno di risposta. So bene che per regola non si aprono due volte topic uguali, quindi vedi punto 1

    A ogni modo $login mi sembrava intuitivo, per questo non l'ho scritto: è la login per accedere all'area.
    Il controllo di $num>0 mi serve per controllare che abbia trovato almeno un record nel database, altrimenti ovviamente lo manda in errore e gli fa ripetere l'inserimento della login.

    La password e' molto meglio confrontarla nel db e non dai dati estratti.
    Ma è quello che ho fatto, o no? Estraggo la password dell'utente dal database e la confronto con quella inserita ($pwd) :master:

    in ogni caso... perche' estrai tutti quei dati se poi usi solo la password????
    Quei dati mi servono per essere richiamati come variabili di sessioni nelle pagine seguenti, per questo li estraggo.

    Sul while invece ti dò pienamente ragione: non serve a niente, visto che al massimo estrae un record. Lo tolgo subito.

    Comunque a me interessava solo sapere se qualcuno trovava l'errore, visto che ci sono dietro da due giorni, non la struttura del login (che dalla tua risposta mi sembra che giudichi per niente ottimale).

  4. #4
    quello che c'e' in $login puo' essere intuitivo per chi sa cosa viene messo li dentro. $username e' intuitivo, $login molto meno.

    Non sono scortese, ma gia' ti e' stato detto che il login cosi' non va. Per confrontare la password sul db ... la si deve confrontare con la query e non con lo script php.

    Le password poi dovrebbero essere almeno trattate con un hash (md5 o sha1 vedi tu) e non cosi' in chiaro.

    i dati che estrai li metti in una variabile. ma poi fai un header location senza utilizzarle.

    la password la dovresti controllare con:
    codice:
    SELECT * 
    FROM InsegnantiLogin 
    WHERE InsegnantiLogin_Login = '$login'  -- AMMESSO SIA USERNAME
    AND password = '$pwd'
    ...
    
    if($num == 1)  {

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Ok, fatto. Solo una cosa: come si fa a criptare la password con md5? E' la prima volta che lo sento, suppongo sia una funzione di php o di mysql...

    Grazie per l'aiuto

  6. #6
    Originariamente inviato da Horus-Ra
    Ok, fatto. Solo una cosa: come si fa a criptare la password con md5? E' la prima volta che lo sento, suppongo sia una funzione di php o di mysql...

    Grazie per l'aiuto
    trovi molti esempi qui

    http://forum.html.it/forum/search.ph...by=&sortorder=

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    azz mi sa che non hai ben chiaro come funziona l'interazione con php eh?

    guardati qualche guida

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Grazie

    azz mi sa che non hai ben chiaro come funziona l'interazione con php eh?
    No, qualcosa so, ma siccome ho dovuto fare autodidatta e impararmi tutto in un mese a volte mi sfuggono delle cose (anche se elemantari). Per esempio questa cosa della criptazione mi era ancora oscura

  9. #9
    si deve hashare (e non cryptare, sono due cose diverse) una password per evitare che chi ha diritto e/o capacita' di accedere ad un database (capacita' intendo anche le sql injection) possa leggere "in chiaro" le password abbinate al singolo user.

    Gia' poi il fatto di leggere l'hash permette con sistemi di database (password memorizzate) oppure con programmi di brute force di risalire alla password od ad una sua collisione (hash che risponde allo stesso modo a due stringhe differenti, caso rarissimo), ma quantomeno si creano difficolta' agli invasori. Oltre tutto la legge sulla privacy "esclude" che si possano detenere dati personali facilmente accessibili. (qui sul come e cosa fare la materia e' complessa forse perche' il legislatore non aveva idee chiarissime).

    morale della favola:

    il campo su db che contiene la password dovrebbe essere un varchar(32) oppure varchar(40) a seconda del tipo di hash (128 bit MD5() - 160 bit SHA1() ).

    la password verra' immessa togliendo come minimo spazi iniziali e/o finali

    $password = trim($_POST['pwd']);
    Insert into tabella (bla, bla, password) values ('bla', 'bla', MD5($password) )

    ed il confronto avverra' allo stesso modo:

    $password = trim($_POST['pwd'];
    select count(*) from tabella where user = $user and password = MD5($password);

    se ti servono altre informazioni da estrarre invece di count() estrarrai solo quelle informazioni lasciando a riposo nel db user e pwd che "GIA' HAI".

    questo e' un elmentare modo, si puo' fare di piu' e meglio, mai limite al meglio, ma questo e' proprio il minimo. Se lo user "perde" la password, ti organizzi a cambiarla per esempio assegnando lo username come password e "sospendi" l'account fino a ricezione conferma e sostituzione della stessa con altra a scelta dello user. il tutto via mail registrata.

    ripeto per chi piace puntualizzare tutto. Si puo' fare di piu' e meglio. Questo lo ritengo il minimo. IMHO...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Visto che l'argomento è fondamentale direi che devo guardarmi delle guide approfondite a proposito...
    Solo una cosa: io le password le ho inserite manualmente nel database (lo so che non è professionale, ma questi sono gli ordini e io non discuto ). In questo caso c'è modo per hasharli, per esempio con md5? Oppure è necessario creare una Insert per farlo?

    Grazie per tutte le spiegazioni

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.