Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [sicurezza] login con sessioni

    Buonasera a tutti.

    Sto usando uno script di login già pronto questo, che sembra -a me che sono ignorante- relativamente sicuro, per quanto può esserlo un sito senza SSL: cripta le password in md5 e usa le sessioni per tenere traccia della navigazione dell'utente.

    Per quanto posso apprezzare, ha un unico difetto: per proteggere le pagine fa così:

    Codice PHP:
    <? include('classe.php');
    $page_protect = new Access_user;
    $page_protect->access_page();
    ?>
    <html>
    <body>


    Contenuto protetto solo per utenti loggati</p>
    </body>
    Cioè in pratica la funzione access_page() verifica che l'utente sia loggato e se non lo è fa un redirect 302 alla pagina di login.

    Dato che ho esigenza di evitare di mandare codici 302 in homepage (sapete, per via dei motori di ricerca), ho pensato a una soluzione:

    Codice PHP:
    if (isset($_SESSION['user']) && isset($_SESSION['pw'])) {

        include(
    $_SERVER['DOCUMENT_ROOT']."/classes/access_user/access_user_class.php"); 
        
    $query3 "SELECT * FROM users WHERE login = '".$_SESSION['user']."'";
        
    $controllo2 = (mysql_query($query3$db));

        while (
    $dato2=mysql_fetch_array($controllo2)) {
            echo 
    "<h2>Hello ".$dato2['real_name']."!</h2>";
            echo 
    "

    Sei loggato come utente [b]"
    .$dato2['login']."[/b]!!</p>";
        }

    } else {
    echo 
    "<a href=\"http://127.0.0.1/login/login.php\">Login</a>";

    Ora vorrei sapere: sto facendo una fagianata?
    Leggere il dato $_SESSION['user'] per sapere se un utente è loggato e con che username, è un metodo come un altro oppure aumenta di parecchio le possibilità di intrusione?

    Se faccio print_r($_SESSION) ottengo:
    Array ( [referer] => [user] => provaa [pw] => provaa )

    però mi sembra di capire che dall'esterno non si possono vedere questi dati. Ah, ho letto che dallo stesso hosting si potrebbe... non è il mio caso: avrò un server tutto mio

    Non dovrò trattare dati importanti degli utenti (beh insomma! username, pass ed e-mail, più i dati di utilizzo del sito), però una intrusione non sarebbe comunque simpatica.


    Che dite, quel "if (isset($_SESSION['user']))" ci può stare o è una str... galattica?

  2. #2

  3. #3

  4. #4

    up

    dai, non dev'essere poi un concetto così complicato...

    Codice PHP:
    if (isset($_SESSION['user']) && isset($_SESSION['pw'])) { 
    $logged TRUE;
    } else 
    $logged FALSE
    è (relativamente) sicuro?

  5. #5

  6. #6
    in sé quel controllo non ha niente di insicuro.
    Basta che tu faccia le cose a modo quando ce li metti, i dati dentro quella sessione.

    Ad esempio, buttandola così a caso senza conoscere lo script di login che usi, se la sessione viene creata a prescindere con quei campi vuoti, riempiendoli solo al momento del login (una porcheria, insomma), in quel modo il tuo controllo salterebbe, perchè isset() controlla solo l'esistenza della variabile, ma nulla circa il suo contenuto.

  7. #7
    Originariamente inviato da skidx
    in sé quel controllo non ha niente di insicuro.
    Basta che tu faccia le cose a modo quando ce li metti, i dati dentro quella sessione.

    Ad esempio, buttandola così a caso senza conoscere lo script di login che usi, se la sessione viene creata a prescindere con quei campi vuoti, riempiendoli solo al momento del login (una porcheria, insomma), in quel modo il tuo controllo salterebbe, perchè isset() controlla solo l'esistenza della variabile, ma nulla circa il suo contenuto.
    Bene, quindi se lo script fa le cose a modo e crea la sessione soltanto SE E QUANDO l'utente porta a termine con successo il login (è così, ho controllato)
    allora controllare se la sessione è settata e prendere i dati da $_SESSION['user'] e associarli con il resto dei dati del db è un metodo che non implica ulteriore insicurezza.

    Questo volevo sapere, grazie mille!

  8. #8
    l'array SESSION, a differenza di GET e POST, non riceve direttamente dati dall'input dell'utente, quindi la possibile vulnerabilità sta solo nello script in cui TU ci metti le mani dentro volontariamente.

    (questo sorvolando tutta la questione sicurezza su dove il PHP salvi effettivamente i dati delle sessioni)

  9. #9
    Originariamente inviato da skidx
    (questo sorvolando tutta la questione sicurezza su dove il PHP salvi effettivamente i dati delle sessioni)
    Si, leggevo qualcosa in merito... pare che se hai uno spazio sullo stesso hosting, in determinati casi è possibile accedere comunque alle sessioni. E' così o mi sbaglio?

    Se è così, con un server dedicato non esiste il problema, giusto?

  10. #10
    Originariamente inviato da Petro_suse91
    Si, leggevo qualcosa in merito... pare che se hai uno spazio sullo stesso hosting, in determinati casi è possibile accedere comunque alle sessioni. E' così o mi sbaglio?
    Sì, è così nei casi in cui la sessione viene salvata su file nella cartella /tmp del sistema, dove tutti gli utenti (quindi anche gli script degli altri siti) hanno accesso in lettura/scrittura.

    Col server dedicato, salvandole su file devi solo stare attento a che utenti (anche utenti software) dai i permessi di accesso nella cartella dove salvi, ma lo puoi settare come ti pare, diciamo che il problema non sussiste a meno di amministratori incapaci (ma quel problema è trasversale e c'è ovunque).

    Io salvo le sessioni sempre su DB, così non sbaglio.

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.