Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    127

    Controllo passwd da file txt

    Ciao a tutti,
    nel mio sito devo inserire unapagina accessibile solo tramite autenticazione. Siccome non ho voglia di utilizzare un db, ho pensato di inserire tutti i codici di accesso in un file txt residente nel dominio.

    Cio che ho realizzato è questo:
    [CODE]
    if (isset($_POST['codice'])){
    $righe=file('txt/codici.txt');
    if(in_array($_POST['codice'],$righe)){
    $_SESSION["userGestione"]=true;
    header("location: paginaprotetta/index.php");
    } else {
    ?>
    <table width="251" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td align="center">Il codice inserito non &egrave; corretto!!</td>
    </tr>
    </table>



    <?php
    }
    }
    ?>
    CODE]

    Il file contenente i codici è il seguente:
    alima
    123pw52
    annaelisa


    Il problema è questo... se inserisco l'ultimo codice (in questo caso annaelisa) mi fa entrare senza problemi, se uso gli altri no.
    Ho provato anche a spostare di posizione i codici... accetta sempre e solo l'ultimo

    Qualcuno mi sa spiegare come mai?

    Grazie mille a tutti

    Ciao
    Anna Elisa

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Il problema è che nelle righe precedenti l'ultima c'è il carattere di newline in fondo, per cui non ti riconosce l'uguaglianza coi codici inseriti.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    127
    mmmm ho capito... come faccio a eliminare il newline?

    Grazie ancora
    Anna

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Devi fare qualcosa tipo

    $riga = substr($riga,0,-1)

    su tutte le righe esclusa l'ultima.
    O meglio, testare prima se in fondo c'è il newline, e poi toglierlo.
    C'è da tener presente che se hai scritto il file di testo in ambito Windows avrai probabilmente due caratteri in fondo ("\n\r") e non uno solo. In questo caso dovrai evidentemente eliminarli entrambi.

    Provo a buttar giù un esempio

    codice:
    foreach ($righe as $k => $riga) {
        while (substr($righe[$k],-1) == "\n" || substr($righe[$k],-1) == "\r") {
            $righe[$k] = substr($righe[$k],0,-1);
        }
    }
    Scritto in fretta senza test, quindi non garantisco contro fagianate

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Devi fare qualcosa tipo

    $riga = substr($riga,0,-1)

    su tutte le righe esclusa l'ultima.
    O meglio, testare prima se in fondo c'è il newline, e poi toglierlo.
    C'è da tener presente che se hai scritto il file di testo in ambito Windows avrai probabilmente due caratteri in fondo ("\n\r") e non uno solo. In questo caso dovrai evidentemente eliminarli entrambi.

    Provo a buttar giù un esempio

    codice:
    foreach ($righe as $k => $riga) {
        while (substr($righe[$k],-1) == "\n" || substr($righe[$k],-1) == "\r") {
    
        }
    }

  6. #6
    ma ti conviene memorizzare password nei file di testo?
    è rischiosissimo..

  7. #7
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    infatti...usa un sistema di autenticazione come questo:

    passwords.php:

    <?php die("Non puoi visualizzare il file!!!"); ?>
    utente|md5password \n(a capo)
    utente2|md5password2
    utente3|md5password3
    utente4|md5password4

    bene questo sistema quando uno tenterà di visualizzare le password vedrà un messaggio di accesso negato e in caso riuscisse ad aprire il file vedrà le password md5 quindi...niente da fare.

    adesso la pagina di login

    <?php
    function check_user($user, $password) {
    $result = FALSE;
    $users_file = file("passwords.php");
    unset($users_file[0]); //elimina il messaggio di errore e procede con la verifica della password
    $md5password = md5($password); /*
    criptiamo la password e la confrontiamo direttamente con l'altra passowrd criptata*/
    foreach($users_file as $line) {
    $user_db = explode(/*separatore*/"[B]|[/]", $line);
    if(($user_db[0] == $user) && ($user_db[1] == $md5password)) {
    $result = TRUE;
    break;
    }
    }
    return $result;
    }
    if(!isset($_POST['mod'])) {
    echo //pagina di login
    }else{
    if(check_user($_POST['username'], $_POST['password'])) {
    echo "username e password giusti";
    }else{
    echo "username e/o password errati";
    }
    }
    ?>

    questo è un sistema che uso sempre perchè io uso altervista e con i db poi si bloccano, poi non sono disponibili, poi non funzionano...insomma così cripti anche le password e in pratica più sicuro di così senza db...non credo ci siano altri metodi.



  8. #8
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    va bene?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    127
    Scusate, ma sono arrivata da poco... ho provato lo script di php_34... avevo lo steso problema, ma aggiungendo lo script di luca200 funziona tutto....

    Grazie mille... non solo mi avete aiutato a risolvere il problema, ma addirittura avete migliorato il mio script.

    Ciao
    Anna

  10. #10
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    così è anche più sicuro


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.