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

    Come non permettere un backpage al pannello amministratore

    Ciao a tutti, sono da poco sul forum e da qualche mese sto impastando le mani nel php, e vorrei risolvere questo problema che proprio non mi va giù...

    In pratica ho realizzato un pannello amministratore per un sito, con pagine:

    login.php
    admin.php
    NOTA: utilizzando le sessioni

    Nella pagina 'admin.php' ovviamente ho messo il pulsante di logout che se premuto indirizza a 'login.php' inviando "logout=1" tramite metodo GET.

    Nella pagina 'login.php' ce questa porzione di codice:
    Codice PHP:
    if(isset($_GET['logout'])) {
         
    $_SESSION = array();
         
    $_COOKIE = array();
         
    session_destroy();
         } 
    Dunque premendo il pulsante Logout vengo mandato nella pagina di login, e fin qui tutto ok.
    Il mio problema è questo: se con il browser clicco 'indietro' (supponiamo che ho cambiato idea e voglio riaccedere al pannello), compare una finestra dove mi chiede di "ritrasmettere" le informazioni. Clicco su "Ritrasmetti", e magicamente rientro nel pannello senza dover inserire nè user ne password.
    Dunque posso dedurre che, per ritrasmettere queste informazioni, il browser tiene memorizzati i dati della sessione da qualche parte nella cache!
    A mio avviso questa cosa è molto pericolosa e voglio impedirla!

    In conclusione vorrei fare in modo che una volta fatto il logout non si possa più riaccedere, se non inserendo nuovamente user e pass! (credo che debba distruggere qualche cookie lato client, ma non so come fare).

    Spero di essere stato chiaro, ringrazio in anticipo.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Io tutti i logout che faccio li faccio così

    session_unset();
    session_destroy();

    se poi clicco "indietro" dopo aver effettuato il logout vedo l'ultima pagina visitata dall'admin, ma da lì non si può fare niente perché qualsiasi operazione si tenti di fare c'è il controllo per vedere se si è loggati e non essendolo si viene reindirizzati ad una pagina "access denied".

  3. #3
    Ho provato ad inserire "session_unset()" ma non cambia nulla.. se torno indietro mi ritrovo nel pannello e posso fare tutto!

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Evidentemente non fai nessun controllo quando viene richiesta un'operazione.

    Tanto per cominciare: hai messo su ogni pagina del pannello amministrativo una cosa di questo tipo?
    Codice PHP:
    if ( $_SESSION['loggato'] == TRUE && $_SESSION['access_level'] == 'admin' )
    {
        
    //mostra il contenuto della pagina
    }
    else
    {
        
    //redirect ad una pagina "access denied"

    Ovviamente il valore admin è un esempio, ma sarebbe meglio metterci un codice che per te vuol dire "admin".

  5. #5
    Si nella pagina da proteggere (admin.php) ho inserito il codice: (se non è settata la sessione[autorizzato], allora ti butto fuori e vai a fare il login)
    Codice PHP:
    if(!isset($_SESSION['autorizzato'])) {
        
    header("Location: login.php?login=fail");
        } 
    Il fatto è che quando premo il pulsante Logout (che sta in admin.php), vengo rimandato a login.php?logout=1, dove ce questo codice:
    Codice PHP:
    if(isset($_GET['logout'])) {
        
    $_SESSION = array();
        
    $_COOKIE = array();
        
    session_destroy();
        } 
    quindi in teoria sul server la sessione dell'utente collegato dovrebbe essere distrutta, impedendo un qualsiasi accesso!

    Ora ho scoperto che questo accesso backpage-after-logout è dato da un cookie memorizzato nella cache per quel sito, dunque sta proprio nel pc locale dell'utente!

    Infatti eliminando i cookie dal browser (manualmente), e poi aggiornando la pagina nel pannello amministratore, vengo buttato fuori perche $_SESSION[autorizzato] non risulta più settata... e quindi mi manda a login.php (come è indicato sopra)...

    Dunque posso dedurre che il server confronta la sua sessione con un cookie sul mio pc, e se non lo trova fa logout...
    Il problema è che questo file non viene cancellato e quindi la sessione sul server viene ricreata, non riesco a capire con quale criterio, dato che l'ID sessione dovrebbe essere univoco e casuale...

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Prova a fare così:
    - login al pannello amministratore
    - logout
    - indietro (ti si ripresenta il pannello, giusto?)
    - refresh della pagina (F5)
    Che succede? Vieni buttato fuori?
    Se la risposta è sì, allora il cookie non c'entra, prima sei stato buttato fuori solo perché le altre volte non facevi il refresh dopo essere tornato al pannello amministrativo.

    Ad ogni modo, la sessione si chiude con
    session_unset();
    session_destroy();

    in questo modo ci pensa PHP a chiuderla in modo corretto, non devi assegnare manualmente un array vuoto a $_SESSION.

  7. #7
    Si si la pagina la aggiornavo, cliccavo sui pulsanti del pannello, ma rimaneva sempre dentro!

    Ora mettendo session_unset, e destroy come hai detto tu un passo avanti l'abbiamo fatto... ma riesco ad entrare facendo un semplice passaggio in più!

    Allora:
    - login al pannello
    - logout
    - torno indietro (una volta)
    - refresh, e mi butta fuori! OK!

    Se però faccio: indietro... indietro, refresh... sono dentro di nuovo :/
    Basta fare 2 volte backpage e il refresh rispedisce i dati di login corretti e quindi mi consente l'accesso al pannello!

    Da qualche parte queste informazioni le deve prendere...
    Per quanto riguarda i cookie, se dal browser elimino soltanto i cookie e poi aggiorno la pagina, mi butta fuori! Secondo me è un cookie bastardo che rimane li in cache a crearmi questo problema... devo trovare il modo di cancellarlo al momento del logout...

    Ad ogni modo ti ringrazio lo stesso per l'aiuto, e un passo in avanti l'ho fatto! =)

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.