• User

    Consigli per sezione protetta

    Salve a tutti, mi sono appena iscritto a questo forum poichè ho trovato informazioni molto interessanti, e spero possiate aiutarmi a risolvere un problema riguardante un sito che ho sviluppato.

    Premetto che conosco html/css bene, e da un paio di mesi programma anche in php, mentre sono ignorante riguardo agli altri linguaggi web(come ASP o JavaScript).

    Il mio problema è questo: ho creato un file "login.php" che esegua il login tramite nome utente e password, funzionante. Purtroppo però, si riesce ad accedere alle pagine che seguono il login anche senza averlo effettuato, se si conosce l'indirizzo specifico.

    Esempio: .miosito.org/documenti/index.html
    in questa pagina c'è il form per il login.

    ma se io scrivo .miosito.org/documenti/home.html
    accedo senza problemi alla pagina, anche se dovrebbe essere protetta!

    Credo che questo sia perchè non ho implementato le sessioni nello script php, ma non ne sono sicuro.
    Qualcuno potrebbe propormi una soluzione per ovviare a questa inefficenza?

    Io non sono proprio riuscito a venirne a capo!

    Grazie


  • User Attivo

    Ciao Endorama e benvenuto sul forum GT,
    ti sposto la discussione nella sezione più corretta (PHP-MYSQL). Postaci il codice PHP della pagina e vediamo cosa c'è che non va 😉


  • User

    grazie per il benenuto! 😉

    allora...ecco il codice...ho eliminato i nomi utenti e le password, mettendone di fittizi (unicamente per privacy)...

    [php]
    <?php

    /* qui vengono inizializzati i vari utenti, con 3 proprieta':
    - username
    - password
    - mail
    la mail non e' vincolante per l'autenticazione, ma risulta molto utile per un eventuale
    recupero della password smarrita
    */
    // ogni utente è inserito come array di 3 elementi
    #utente
    $user0 = array("username" => "nomeutente0", "password" => "passwordutente0", "mail" => "mailutente0");

    // creo poi un array con gli array contenteti i dati dei vari utenti
    $users = ( array($user0) );

    // le due funzioni di reindirizzamento le ho create semplicemente perchè mi
    // scrivono una paginetta html con del codice javascript per reindirizzaze
    // dopo il login alla pagina corretta

    // funzione di reindizizzamento alla home page protetta
    function reindirizza_home() {
    echo "<html>\n";
    echo "\t<head>\n";
    echo "\t\t<script language="javascript" src="reindirizza_home.js"></script>\n";
    echo "\t\t<link rel="stylesheet" href="style_Bk.css" type="text/css">";
    echo "\t</head>\n";
    echo "\t<body>\n";
    echo "\t<font color = "#ff6600">\n";
    echo "\t\t<div class = "redirect">\n";
    echo "\t\t\tStai venendo reindirizzato alla pagina scelta...\n";
    echo "\t\t\t<br>\n";
    echo "\t\t\tAttendi...\n";
    echo "\t\t</div>\n";
    echo "\t</font>\n";
    echo "\t</body>\n";
    echo "</html>\n";
    }
    // funzione di reindirizzamento alla pagina di errore di login
    function reindirizza_error() {
    echo "<html>\n";
    echo "\t<head>\n";
    echo "\t\t<script language="javascript" src="reindirizza_error.js"></script>\n";
    echo "\t\t<link rel="stylesheet" href="style_Bk.css" type="text/css">";
    echo "\t</head>\n";
    echo "\t<body>\n";
    echo "\t<font color = "#ff6600">\n";
    echo "\t\t<div class = "redirect">\n";
    echo "\t\t\tStai venendo reindirizzato alla pagina scelta...\n";
    echo "\t\t\t<br>\n";
    echo "\t\t\tAttendi...\n";
    echo "\t\t</div>\n";
    echo "\t</font>\n";
    echo "\t</body>\n";
    echo "</html>\n";
    }

    //funzione per valutare se corrispondono username e password
    function login($utenti, $nome_utente, $chiave_utente) {
    $size = sizeof($utenti);
    $correct_username = false;
    $correct_password = false;

    for ($i = 0; $i < $size; ++$i) {
        if ($utenti*["username"] == $nome_utente) {
            //echo "username corretto <br>\n";
            $correct_username = true;
        }
        else {
            //echo "username errato <br>\n";
        }
        if ($utenti*["password"] == $chiave_utente) {
            //echo "password corretta <br>\n";
            $correct_password = true;
        }
        else {
            //echo "password errata <br>\n";
        }
        
        if ($correct_username && $correct_password) {
            return true;
            break;
        }
    }
    return false;    
    

    }

    // $username_in e $password_in sono i dati presi dal form per il login
    $value = login($users, $username_in, $password_in);
    if ($value == 1) {
    echo "autenticazione riuscita\n";
    reindirizza_home();
    }
    else {
    echo "autenticazione fallita\n";
    reindirizza_error();
    }

    ?>
    [/php]Ripeto, questo codice funziona, però non limita "realmente" gli accessi, e volevo capire cosa potevo fare per implementare questa cosa...

    Se serve che scriva altre parti del codice fatemelo sapere, le posto prima possibile!


  • ModSenior

    Dovresti impsotare un cookie o una sessione che controlli successivamente nelle pagine protette che dovranno anch'esse essere in php.

    Avevo fatto tempo da un tutorial:
    http://www.giorgiotave.it/forum/php-mysql/83033-tutorial-area-privata.html#post512240

    se sei all'inizio potresti usarlo per prendere spunto o capire il meccanismo... il codice è commentato quindi non dovresti avere problemi nel comprenderlo...


  • User Attivo

    il codice è commentato quindi non dovresti avere problemi nel comprenderlo...
    O se ne hai puoi sempre chiedere 😉


  • User

    grazie...il tutorial è fatto piuttosto bene, l'unica cosa che non mi è troppo chiara sono le interazioni con il database mysql, ma dato che l'ignorante in materia sono io, mi documenterò...

    per quanto riguarda le sessioni invece, il fatto che session_start() sia invocato nel file config.php, significa che includendolo in qualsiasi altro file io posso recuperare le informazioni riguardante alla specifica sessione?
    Teoricamente non dovrebbe crearne una nuova ogni volta che viene invocato da una delle pagine in cui è fatto il require()?


  • ModSenior

    Includendolo in qualsiasi altro file tu puoi usare la sessione....
    La seconda domanda invece non l'ho capita


  • User

    niente, la risposta alla prima mi ha chiarito la seconda...beh, io provo, se poi ho problemi mi rifaccio vivo! 😉

    grazie per l'aiuto, è stato indispensabile!!!


  • ModSenior

    Figurati 😉