Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Realizzazione area riservata con sessione

    Salve a tutti, avrei una cosetta da sottoporre alla vostra attenzione perchè avrei bisogno di un consiglio.
    Dovrei realizzare una sorta di area riservata per gestire il pannello di controllo di un sito in php.
    Attualmente (un progetto universitario) ho realizzato un login utilizzando le sessioni...solo che non credo sia "molto sicuro". Vi mostro il codice:

    codice:
    <title>Accedi</title>
    ACCESSO AMMINISTRATORI
    
    
    
    
    <form name="login" action="funzioni/controlla.php" method="POST">
    <table width="200" border="0">
    <tr>
        <td>Username</td>
        <td><input type="text" name="username" value="">
    </td>
      </tr>
      <tr>
        <td>Password</td>
        <td><input type="password" name="password" value="">
    </td>
      </tr>
    </table>  
    <input type="submit" value="Login">
    </form>
    Questo è il form per l'accesso.

    Codice PHP:
    // Collegamento al database.
    mysql_connect("$host""$username""$password")or die("Errore di connessione"); 
    mysql_select_db("$db_name")or die("Non posso selezionare il database");


    $user=$_POST['username']; 
    $pass=$_POST['password'];

    $sql="SELECT * FROM amministratori WHERE username='$user' and password='$pass'";
    $result=mysql_query($sql);

    // Mysql_num_row effettua il conteggio dei record
    $count=mysql_num_rows($result);


    if(
    $count==1){



        
    session_start();   //apro la sessione di amministratore
        
    $_SESSION['login_admin'] = "ok";
        
    header("location: ../index.php");
        
    } else { 
    //se il login non va a buon fine torno alla pagina di accesso amministratore

        
    header("Location: ../form.htm");
        echo 
    "Riprova";
    }

    ?> 
    Questo il codice della pagina di controllo...dopo aver fatto la connessione al db controlla nella tabella amministratori se il record corrispondente esiste ed è unico, a quel punto fa partire una sessione login_admin e setta su di essa il valore "ok".

    Ogni pagina da proteggere sarà poi fornita di un'incluzione di questo codice:
    Codice PHP:
    <? //pagina che verifica la presenza della sessione aperta

    session_start();
    if (
    $_SESSION['login_admin'] != "ok") {

        
    header("Location: form.htm"); //se la sessione di admin non è stata aperta mi reindirizza automaticamente al form di collegamento
    }

    ?>
    A questo punto sorge la mia curiosità.
    In questo caso la sessione viene aperta e su di essa settato un valore "ok", ogni pagina controlla se il valore della sessione è "ok" (ma potrebbe essere anche "carolina" o qualsiasi altra cosa) e permette la navigazione nell'area riservata.

    Ma...se volessi che questa sessione mantenesse su di se un valore random che cambia ad ogni accesso?
    Oppure...avevo pensato di settare la variabile di sessione con una stringa criptata (magari md5) contenente $user+$password in modo da criptarne il valore...
    Voi cosa ne pensate?
    Come potrei implementare una sorta di login "sicuro"?
    A me la soluzione che ho utilizzato per il progetto didattico onestamente non mi piace moltissimo...secondo me sarebbe molto semplice da bypassare...

    Qualche consiglio!?

    Grazie mille!!

  2. #2
    Beh, la cosa da fare sempre, a mio avviso, è quella di criptare il contenuto della sessione (così come quella dei cookie) magari con un base64.
    In secondo luogo ti consiglio di settare due sessioni, una con l'autorizzazione e una con l'id dell'utente (anche quello criptato e magari aggiungici qualche numero o moltiplicalo qualche volta).
    Dopodiché sconsiglio di usare nomi facili da capire, come: Accesso, id_utente o permessi.
    Usa nomi assurdi, tipo: _temp, fuso_orario o messaggio_di_benvenuto.
    Fatto ciò puoi farti un doppio controllo: se l'utente è loggato e se l'id esiste nel database e ha i privilegi per poter vedere quell'area riservata, allora può navigare, altrimenti viene rimandato alla pagina form.htm.
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Così com'è adesso non è per niente sicuro... chiunque potrebbe cancellarti l'intero database con una sql injection. Per risolvere basta che evadi tutti i caratteri pericolosi con mysql_real_string_escape() sia su $user che su $pass. Per il resto va abbastanza bene, ma si può migliorare... per esempio $_SESSION['login_admin'] potrebbe assumere un valore sempre diverso per ogni user che si connette

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.