Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    15

    Area riservata per ogni utente

    Ciao a tutti, dovrei creare un area riservata per ogni utente in php. girando su internet ho trovato questi script in php che però facevano in modo che una lista di utenti può accedere ad una pagina riservata. Allora l'ho modificato per fare in modo che l'utente admin acceda alla pagina admin1.php mentre l'utente admin2 acceda alla pagina admin2 ma non funziona. posto la pagina di login:

    Codice PHP:
    <?session_start();  ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Login</title>
    </head>
    <body><?function check($user,$password){        include("utenti.php");
            foreach(
    $utenti as $user_ => $password_){            if (($user==$user_) AND ($password==$password_)) {                return true;            }        }

                           {  if ((
    $user==$admin2) AND ($password==$password_)) {                header("Location: utenti/admin2.php");            }        }

            return 
    false;}
    function 
    form_login(){?><form id="login" action="<?=$PHP_SELF?>" method="post"><div style="text-align:center;margin-left:auto;margin-right:auto;">    Utente:<br>    <input type="text" name="utente" size="20" maxlength="255"><br>    Password:<br>    <input type="password" name="password" size="20" maxlength="255"><br><br>    <input type="submit" value="   OK   "></div></form><? }
    if(isset(
    $_POST["utente"])){    if (check($_POST["utente"],$_POST["password"])){        $_SESSION["utente"] = $_POST["utente"];        $_SESSION["password"] = $_POST["password"];        echo "<meta http-equiv=\"refresh\" content=\"0;url=utenti/admin1.php\" />";    }else{        form_login();    }}else{    form_login();}        ?>
    </body></html>
    Come potrei risolvere?
    Grazie

  2. #2
    Risolvere non è un grosso problema, ma credo che per iniziare un "progetto" del genere siano necessarie delle conoscenze di base. Per prima cosa ti sconsiglierei delle pagine diverse per ogni utente, ne farei una dinamica. Come seconda cosa ti consiglierei di salvare le password in un database (e magari non in chiaro come fai tu). Comunque, ecco il tuo codice sistemato:
    Codice PHP:
    <? session_start();  ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Login</title></head><body><?function check($user,$password){    include("utenti.php");    foreach($utenti as $user_ => $password_){        if (($user==$user_) AND ($password==$password_))            return true;    }
    return 
    false;}function form_login(){ ?>    <form id="login" action="<?=$PHP_SELF?>" method="post">        <div style="text-align:center;margin-left:auto;margin-right:auto;">            Utente:<br><input type="text" name="utente" size="20" maxlength="255">            <br>Password:<br>            <input type="password" name="password" size="20" maxlength="255"><br><br>            <input type="submit" value="   OK   "></div></form><? }        if(isset($_POST["utente"])){    if (check($_POST["utente"],$_POST["password"])){        $_SESSION["utente"] = $_POST["utente"];        $_SESSION["password"] = $_POST["password"];        echo "<meta http-equiv=\"refresh\" content=\"0;url=utenti/$_SESSION[utente].php\" />";    }else        form_login();}else    form_login();    ?></body></html>
    Da quello che ho capito l'errore era nella posizione del
    Codice PHP:
    return false
    nella funzione check. A parte che non è il massimo far scorrere un elenco in questo modo perché può richiedere molto tempo in caso tu abbia molti utenti, comunque ritornava falso già dopo il primo controllo. In pratica l'unico utente in grado di entrare era il primo della lista. Mettendolo all'esterno del ciclo ritorna falso solo alla fine dell'elenco.
    Spero di essermi spiegato bene,

    afilini
    http://www.youtube.com/user/alekosfilini @afilini

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    15
    Ok, grazie mille sei stato chiarissimo e ora funziona.
    Per quanto riguarda la sicurezza come potrei fare a criptare nome utente e password presenti nel file utenti.php
    Codice PHP:
    <?
    $utenti
    ["admin"] = "admin";
    $utenti["admin2"] = "admin2";
    ?>
    Un ultima cosa, come devo fare a creare il bottone logout all'interno delle pagine protette che quando viene premuto distrugge la sessione?
    Grazie

  4. #4
    Il modo migliore è creare un hash della password, in pratica una stringa che può essere creata solo in un verso. Dalla password in chiaro puoi creare questa stringa, ma fare la cosa al contrario è impossibile. Io di solito uso MD5, anche se da quello che ho letto non è il più sicuro degli algoritmi. Per prima cosa memorizza le password nel file utenti già in md5 (ci sono calcolatori online o su mac il comando md5 del terminale). Dopodiché ti basta aggiungere una funzione nella parte della comparazione. Sostituisci il ciclo foreach con questo:
    Codice PHP:

    foreach($utenti as $user_ => $password_){
    if ((
    $user==$user_) AND (md5($password)==$password_))return true;} 
    Per il logout ti basta distruggere le sessioni. Metti nella pagina "riservata" un link a una pagina logout.php e in quella pagina metti il seguente codice:
    Codice PHP:

    <?
    session_start
    ();
    session_unset();
    session_destroy();

    header("location:index.php");
    exit();
    ?>
    (ovviamente al posto di index metti la pagina che contiene il form di login.
    http://www.youtube.com/user/alekosfilini @afilini

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    15
    Ok allora ho trasformato le password in md5 e ho aggiunto il tasto logout e tutto funziona alla perfezione.
    Ho provato a controllare e ho visto che anche se la password è in md5 e non in chiaro basta andare su questo sito
    http://md5.gromweb.com/
    e trasforma la password md5 in file di testo.
    Ma comunque visto che il file che contiene le password in md5 e in formato php non puo essere letto da nessuno giusto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    15
    Ho provato a ricontrollare e attraverso quel sito si riescono a decriptare da md5 a testo solo le parole comuni attraverso un database presente. Io infatti avevo provato con admin
    ma comunque c'è modo di leggere un file php presente su un server? Perché se io provo ad aprire iil sorgente del file php mi fa vedere tutto bianco

  7. #7
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    Quote Originariamente inviata da Alex2014 Visualizza il messaggio
    Ho provato a ricontrollare e attraverso quel sito si riescono a decriptare da md5 a testo solo le parole comuni attraverso un database presente. Io infatti avevo provato con admin
    ma comunque c'è modo di leggere un file php presente su un server? Perché se io provo ad aprire iil sorgente del file php mi fa vedere tutto bianco
    infatti il sito che hai postato serve a ben poco.
    per l'altra domanda: solo se bucano il server. qualsiasi richiesta fatta in http o https restituirà sempre la pagina elaborata. qualora serva a te, quindi puoi mettere le mani sul server, puoi utilizzare file_get_contents.

    Il parametro deve essere il percosso fisico del file e non il suo uri.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


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.