Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 51

Discussione: php password da file esterno

  1. #1
    Guest

    Predefinito php password da file esterno

    Salve a tutti... complimenti per il forum!!!
    Avrei bisogno di un consiglio, sono poco esperto di php però mi diletto
    sul mio sito ho implementato una sessione protetta da user e password in PHP però come ho fatto ora ho la possibilità di creare solo un'utente; vi posto i codici php....
    index.php è la pagina dove si inseriscono le credenziali poi ho
    il file con il codice php che invece è login.php
    Codice PHP:
    <strong><span class="style1"><em>
    <?
    session_start
    ();
    $us1 = "utente";
    $pw1 = "Password";

    $us = $_POST["user"];
    $pw = $_POST["pass"];

    if (
    $us == $us1 && $pw == $pw1)
    {
    $_SESSION['login']=TRUE;
    $_SESSION['utente']=$_POST['user'];
    header("Location: area_privata.php");
    echo
    "<a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    }else{
    echo
    "<a href=\"index.php\">Accesso Negato - Errore Login Riprova-";
    }
    ?> </em></span></strong>
    poi ho la pagina di area_privata.php
    Codice PHP:
    <?
    session_start
    ();
    if (
    $_SESSION["login"] == TRUE)
    {
    ?>
    <?
    }else{
    echo
    "<strong>Area protetta:</strong> <a href=\"index.php\">Clicca qui per effettuare il login è visualizzare quest'area.";
    }
    ?>
    ed infine la pagina di logout.php
    Codice PHP:
    <?
    session_start
    ();
    if(
    $_SESSION['login']==TRUE){
    session_unset();
    session_destroy();
    }else{echo
    "Non sei collegato";}
    ?>
    Potreste aiutarmi a capire come fare a inserire più utenti o magari inserire gli utenti in un file txt esterno??
    Grazie mille a tutti!!!

  2. #2
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    guarda questo post, non è da file esterno, ma ti sarà di aiuto....

    http://forum.it.altervista.org/php-m...uesto-php.html

    da file esterno potresti salvare gli username e le password corrispondenti, poi crei i 2 array con array_push(), uno per gli username e l'altro per le password.

    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  3. #3
    Guest

    Predefinito

    i primi due righi di codice sono errati.
    non puoi inviare output e per poi avviare una sessione (creazione/lettura del cookie SID). per di più utilizzi la funzione header()...

    Non sò le impostazioni qui su AV ma dovrebbe darti un warnimg: can't not modify header information etc etc.

    devi strutturare il tuo script in modo da evitare l'invio di output prima delle funzioni session_start(), header(), setcookie()

    Per quanto concerne la multiutenza (ma cmq senza esagerazioni... ) devi costruirti un array() pluri-dimensionale e sfruttare funzioni quali isset(), in_array(), array_key_exists()
    Ultima modifica di miniscript : 10-02-2011 alle ore 16.49.20

  4. #4
    Guest

    Predefinito

    perdonatemi ragà... ma come vi dicevo non sono tanto esperto di php (per non dire che non ci capisco una mazz )
    nell'area privata del mio sito prima avevo uno script php che creava cookies dopo l'autenticazione poi l'ho riconvertito in modo che dopo l'autenticazione crea un'istanza, quindi mi sono rimastri pezzi di script vecchi!!!
    però così funziona alla crande!!!
    Potreste darmi una mano a inserire i array con array_push() ....

  5. #5
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    ho fatto così:
    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <?php
    $array_username
    =$array_password=array();
    $file="utenti.txt";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode(';', $contenuto);
    echo
    "<p>";print_r($array);

    foreach(
    $array as $valore) {
    list(
    $username, $password)=explode(',', $valore);
    array_push($array_username,$username);
    array_push($array_password,$password);
    //echo "<p>user=".$username." pass=".$password;
    echo "<p>".$valore;
    }
    echo
    "<p>";print_r($array_username);
    echo
    "<p>";print_r($array_password);
    ?>
    </body>
    </html>
    e il file utenti.txt:
    Codice:
    mommi,ABC123;
    account2,34567;
    account3,456789000796;
    account4,456789000796;
    account5,456789000796;
    account6,456789000796
    ovviamente dovrai cryptare le password con md5() in fase di scrittura nel file....
    Ultima modifica di EuroSalute : 10-02-2011 alle ore 19.12.49 Motivo: ...info aggiuntive
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  6. #6
    Guest

    Predefinito

    grazie dell'aiuto ragà ...

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    ho fatto così:
    [PHP]
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <?php
    $array_username=$array_password=array();
    $file="utenti.txt";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode(';', $contenuto);
    echo "<p>";print_r($array);

    foreach($array as $valore) {
    list($username, $password)=explode(',', $valore);
    array_push($array_username,$username);
    array_push($array_password,$password);
    //echo "<p>user=".$username." pass=".$password;
    echo "<p>".$valore;
    }
    echo "<p>";print_r($array_username);
    echo "<p>";print_r($array_password);
    ?>
    </body>
    </html>
    ma questo codice sopra và sostituito a quello presente nella mia pagina login.php ?
    e se è così... dove sta scritto che se l'autenticazione và a buon fine deve portarmi alla pagina area_privata.php?




    Citazione Originalmente inviato da EuroSalute Visualizza messaggio




    e il file utenti.txt:
    Codice:
    mommi,ABC123;
    account2,34567;
    account3,456789000796;
    account4,456789000796;
    account5,456789000796;
    account6,456789000796
    ovviamente dovrai cryptare le password con md5() in fase di scrittura nel file....
    perdonatemi ancora la mia ignoranza... ma come lo crypto md5()?

    Grazie mille!!!
    Ultima modifica di raja : 10-02-2011 alle ore 22.13.49

  7. #7
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    1 - il codice di esempio che ho scritto...va adattato al tuo codice e non sostituito.

    2 - se utilizzi un file esterno .txt, questo file può essere letto da chiunque, e quindi hai bisogno di cryptare le password, per cryptarle puoi usare la funzione md5().

    utilizza questo servizio online per cryptare le password

    http://md5encryption.com/

    inoltre se vuoi crittografare le password(metodo ancora più sicuro), puoi usare questo stratagemma:

    Codice PHP:
    define('KEY','365RGDA_:/+GG4');
    $pw = md5($_POST['pass'] . KEY);
    Ultima modifica di EuroSalute : 10-02-2011 alle ore 22.48.55 Motivo: ...INFO
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    1 - il codice di esempio che ho scritto...va adattato al tuo codice e non sostituito.

    2 - se utilizzi un file esterno .txt, questo file può essere letto da chiunque, e quindi hai bisogno di cryptare le password, per cryptarle puoi usare la funzione md5().

    utilizza questo servizio online per cryptare le password

    http://md5encryption.com/

    inoltre se vuoi crittografare le password(metodo ancora più sicuro), puoi usare questo stratagemma:

    Codice PHP:
    define('KEY','365RGDA_:/+GG4');
    $pw = md5($_POST['pass'] . KEY);
    Ok grazie....
    Credi che così possa funzionare:
    Codice PHP:
    <strong><span class="style1"><em>
    <?
    session_start
    ();
    $array_username=$array_password=array();
    $file="utenti.txt";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode(';', $contenuto);
    echo
    "<p>";print_r($array);

    foreach(
    $array as $valore) {
    list(
    $username, $password)=explode(',', $valore);
    array_push($array_username,$username);
    array_push($array_password,$password);
    //echo "<p>user=".$username." pass=".$password;
    echo "<p>".$valore;
    }
    echo
    "<p>";print_r($array_username);
    echo
    "<p>";print_r($array_password);
    {
    $_SESSION['login']=TRUE;
    $_SESSION['utente']=$_POST['user'];
    header("Location: area_privata.php");
    echo
    "<a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    }else{
    echo
    "<a href=\"index.php\">Accesso Negato - Errore Login Riprova-";
    }
    ?> </em></span></strong>
    non credo che ho tanto bisogno di cryptare la pssword perchè questo sito rimane in una lan chiusa dove hanno accesso non più di 1000 utenti
    un passettino alla volta ed arriverò anche a cryptare le pssword

  9. #9
    Guest

    Predefinito

    NO... cmq io eviterei in assoluto un txt esterno con le password (anche se criptate con salt).

    Quando si fa un login è preferibile utilizzare mysql... ma se si vuole evitare e creare un login multiutente io farei così.

    - LibreriaLogin.php
    Codice PHP:
    <?php
    function db_user()
    {
    $_USERS = array();
    $_USERS['tizio'] = array(
    'password' => 'PassTizio',
    'email' => 'email@email.it',
    'sesso' => 'M',
    'hobby' => 'giocare a calcio'
    );

    $_USERS['caio'] = array(
    'password' => 'test',
    'email' => 'esempio@email.it',
    'altezza' => '1.78',
    'età' => '25'
    );

    /*
    oltre alle info dell'utente
    una articolazione di questo tipo
    è utile per gestire i permessi differenziati
    */
    $_USERS['sempronio'] = array(
    'password' => 'test2',
    'insert' => TRUE,
    'delete' => FALSE
    );
    return
    $_USERS;
    }

    function
    login_user($username, $pass)
    {
    $array_utenti = db_user();
    // se esiste l'utente
    if(array_key_exists($username, $array_utenti))
    {
    // se quell'utente ha quella password
    if($array_utenti[$username]['password']==$pass)
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }

    function
    variables_session_login($username)
    {
    $_SESSION['login'] = TRUE;
    $_SESSION['username'] = $username;
    }

    function
    logout_user()
    {
    if(isset(
    $_SESSION['login']))
    {
    unset(
    $_SESSION['login']);
    }
    if(isset(
    $_SESSION['username']))
    {
    unset(
    $_SESSION['username']);
    }
    }

    function
    is_logged_user()
    {
    if(isset(
    $_SESSION['login']) AND isset($_SESSION['username']))
    {
    if(
    $_SESSION['login']==TRUE)
    {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }

    function
    login_form()
    {
    $form = '
    <form action="'
    .$_SERVER['PHP_SELF'].'" method="post" id="loginform">
    <fieldset>
    <legend>Login</legend>
    <label>Username</label>
    <input type="text" name="usern" value="" /><br />
    <label>Password</label>
    <input type="password" name="pass" value="" /><br />
    <label>&nbsp;<label>
    <input type="submit" name="submit" value="Login" /><br />
    </fieldset>
    </form>
    '
    ;
    return
    $form;
    }
    ?>
    - login.php
    Codice PHP:
    <?php
    require_once('LibreriaLogin.php');
    session_start();
    $msg = '';
    if(isset(
    $_POST['submit']))
    {
    $_POST = array_filter($_POST, "is_string");
    $_POST = array_map("stripslashes", $_POST);
    $_POST = array_map("trim", $_POST);
    $user = isset($_POST['usern']) ? $_POST['usern'] : '';
    $pass = isset($_POST['pass']) ? $_POST['pass'] : '';
    if(
    login_user($user, $pass)==TRUE)
    {
    variables_session_login($user);
    $msg = '
    <p>
    <strong style="color:green;">Login eseguito con successo.</strong>
    <br />
    Benvenuto '
    .$_SESSION['username'].'
    </p>'
    ;
    }
    else
    {
    $msg = '<p><strong style="color:red;">Login errato.</strong></p>';
    }
    }
    else if(isset(
    $_GET['action']))
    {
    if(
    stripslashes($_GET['action'])=='out')
    logout_user();
    }
    ?>
    <html>
    <head>
    <title>Login page</title>
    <body>

    <?php
    echo $msg;
    if(!
    is_logged_user())
    echo
    login_form();
    else
    echo
    '<a href="'.$_SERVER['PHP_SELF'].'?action=out">Logout</a>';
    ?>

    </body>
    </html>
    Ultima modifica di miniscript : 11-02-2011 alle ore 01.49.42

  10. #10
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    miniscript così gli hai rifatto completamente il codice....!

    forse raja vuole mantenere il suo e adattare una multiutenza....

    raja purtroppo quello che hai scritto non può funzionare!!!

    il codice di esempio che ho scritto è in riferimento al post:
    http://forum.it.altervista.org/php-m...uesto-php.html

    per l'appunto a questo codice:
    Codice PHP:
    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <?php
    $array_username
    = array('mommi','account2','account3','account4','account5','account6');
    $array_password = array('ABC123','34567','456789000796','456789000796','456789000796','456789000796');
    //(e cosi via...)(ovviamente questo è un'esempio per farvi capire quello che voglio)

    //Recupero dell'username e della password
    $user = $_POST["user"];
    $pass = $_POST["pass"];

    if (isset(
    $user) && isset($pass)){
    $corretto=false;
    foreach (
    $array_username as $key => $username) {

    //Se i dati sono corretti crea il cookie
    if ($user == $username && $pass == $array_password[$key])
    {
    setcookie("login", "OK", time() + 600);
    print
    "Login effettuato! Entra nell'area privata,";
    print
    "clicca <a href=\"area_privata.php\">qui</a>";
    $corretto=true;
    }

    }
    //end foreach

    //Se i dati sono errati scrive un messaggio d'errore
    if (!$corretto) print "<h1>La password inserita non è corretta. Inseriscila nuovamente (assicurati che il tasto BLOC MAIUSC non sia premuto).</h1><br /><h2>Il login è disponibile solo per utenti registrati se non sei registrato chiedere nick e password al gestore del sito. </h2>";
    }

    ?>
    </body>
    </html>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    miniscript così gli hai rifatto completamente il codice....!
    Il codice da te proposto ha diversi errori.
    1) non è corretto usare setcookie() dopo aver già inviato l'output;

    2) inoltre con una variabile $_COOKIE['login'] che tu imposti ad 'OK', un qualsiasi utente potrebbe autoimpostarsi un cookie e risultare loggato;

    3) non è corretto valorizzare le variabili post così
    $var = $_POST['qualcosa'];

    ma si dovrebbe fare

    $var = isset($_POST['qualcosa']) ? $_POST['qualcosa']: '';

    4) questa condizione
    if (isset($user) && isset($pass))
    non ha senso dato che è sempre TRUE

    Pur volendo correggere qui è là le diverse cose:
    - mettendo username e password in due array distinti risulta ostico/disordinato trovare la corrispondenza username-password e si creano disastri in caso di array di dimensioni diverse.
    - l'altra ipotesi di mettere le credenziali in un txt (magari criptate, magari con salt, magari bloccate con un .htaccess) è una cosa che ritengo poco sicura.
    Ultima modifica di miniscript : 10-02-2011 alle ore 23.40.26

  12. #12
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    il codice di riferimento è stato solo corretto da me in parte solo per la multiutenza, ..leggi quel post...

    ho proposto quel codice solo per far capire gli array per l'utilizzo ....a raja

    raja è alle prime armi e vorrà imparare....e magari procedere un passo alla volta

    ciuao
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    il codice di riferimento è stato solo corretto da me in raja è alle prime armi e vorrà imparare....e magari procedere un passo alla volta
    ... e come primo passo ha deciso di "studiare" un codice errato per un sistema login con cookie, sessioni, criptaggio password, lettura/parse txt esterni, .htccess, e headers!!

    ...ok...

  14. #14
    Guest

    Predefinito

    ragà è vero che sto imparando però per esigenza lavorativa devo iniziare ad imparare su cose che mi servono sul campo.
    il pensiero di dover riscrivere completamente il codice non tanto mi entusiasma però se non ci sono altre soluzioni pasienza la questine della sicurezza non tanto mi preoccupa anche perchè la mia pagina è su lan privata che non si affaccia su internet quindi sicuramente non subirà attacchi
    pensate che il codice che gentilmente mi ha modificato EuroSalute (approfitto per ringraziarti) funzioni così com'è?
    Grazie a tutti....

    -

    ragà un'altra cosa... io ho eliminato la funzione cookies (anche se rimangono parti del vecchio codice che li utilizzava ) utilizzando invece le sessioni.... il codice di EuroSalute è programmato per funzionare con i cookies? posso copiarlo ed incollarlo come è presente qui?
    thanks
    Ultima modifica di darkwolf : 11-02-2011 alle ore 01.44.28

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da raja Visualizza messaggio
    ... per esigenza lavorativa devo iniziare ad imparare...
    ...posso copiarlo ed incollarlo...
    Non sei per nulla chiaro...

    1) Vuoi qualcosa che sia utilizzabile per esigenze "lavorative" professionali?
    nulla di ciò che è presente in questo topic può essere impiegato in ottica professionale (occorrerebbe qualcosa di mooolto + strutturato); dopo aver studiato ti crei un sistema di login senza fare dei copia e incolla (anche il mio script è "limitato").

    2) Vuoi imparare?
    studia iniziando da qualcosa di più semplice rispetto ad un sistema di login

    3) Vuoi far "funzionare" un sistema di login "amatoriale" multiutente senza studiare?
    prova a fare dei copia e incolla di ciò che trovi in questo topic o sul web scegliendo fra ciò che ti sembra + corretto senza cancellare cose a casaccio senza sapere ciò che fai... e verifica quale meglio funziona e si adatta alle tue esigenze
    Ultima modifica di miniscript : 11-02-2011 alle ore 00.57.56

  16. #16
    Guest

    Predefinito

    Citazione Originalmente inviato da miniscript Visualizza messaggio
    Non sei per nulla chiaro...

    1) Vuoi qualcosa che sia utilizzabile per esigenze "lavorative" professionali?
    nulla di ciò che è presente in questo topic può essere impiegato in ottica professionale (occorrerebbe qualcosa di mooolto + strutturato); dopo aver studiato ti crei un sistema di login senza fare dei copia e incolla (anche il mio script è "limitato").

    2) Vuoi imparare?
    studia iniziando da qualcosa di più semplice rispetto ad un sistema di login

    3) Vuoi far "funzionare" un sistema di login "amatoriale" multiutente senza studiare?
    prova a fare dei copia e incolla di ciò che trovi in questo topic o sul web scegliendo fra ciò che ti sembra + corretto senza cancellare cose a casaccio senza sapere ciò che fai... e verifica quale meglio funziona e si adatta alle tue esigenze
    miniscript ma mi hai dato le buste per la scelta della risposta??
    tutte le tre buste sono giuste fai due conti se ci riesci.

  17. #17
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    allora raja, in base al titolo del tuo post(da file esterno), e in base al codice che hai postato all'inizio, ho realizzato questo script molto semplice:

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <strong><span class="style1"><em>
    <?php

    if (isset($_POST["entra"])){

    if (!
    is_array($_POST)) die("Hack Attempt!");

    if (isset(
    $_POST["user"]) && !empty($_POST["user"]) && isset($_POST["pass"]) && !empty($_POST["pass"])){

    $us = $_POST["user"];
    $pw = $_POST["pass"];

    session_start();
    $_SESSION['login']=false;
    $_SESSION['utente']="";

    $file="utenti.txt";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode(';', $contenuto);

    foreach(
    $array as $valore) {
    list(
    $user_name, $pass_word)=explode(',', $valore);

    //se crypti le password nel file utenti.txt :
    //if (trim($user_name) == $us && trim($pass_word) == md5($pw))
    if (trim($user_name) == $us && trim($pass_word) == $pw)
    {
    $_SESSION['login']=true;
    $_SESSION['utente']=$us;
    //header("Location: area_privata.php");
    echo "<a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    }

    }

    fclose($apri);

    if (
    $_SESSION['login']==false) echo "<a href=\"index.php\">Accesso Negato - Errore Login Riprova!</a>";

    }else echo
    "<a href=\"index.php\">Errore : Username e Password Obbligatori!</a>";

    }

    ?>

    <form action="index.php" method="post" name="">
    *Username : <input name="user" type="text">
    <br>
    *Password : <input name="pass" type="password">
    <p></p>
    <input name="entra" type="submit" value="Entra">
    </form>
    </em></span></strong>
    </body>
    </html>
    Ultima modifica di EuroSalute : 11-02-2011 alle ore 19.27.56 Motivo: ...info
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  18. #18
    Guest

    Predefinito

    EuroSalute grazie mille della disponibilità...

  19. #19
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    figurati....

    devo fare alcune correzzioni:
    Codice PHP:
    {
    $_SESSION['login']=true;
    //toglie gli spazi all'inizio e alla fine della stringa:
    $_SESSION['utente']=trim($us);

    //metti il redirect oppure il link:
    //header("Location: area_privata.php");
    echo "<a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    //termina :
    die();
    }
    verifica che la sessione non sia già stata aperta:

    Codice PHP:
    if (!$_SESSION) session_start();
    Ultima modifica di EuroSalute : 11-02-2011 alle ore 21.22.13 Motivo: ...info
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  20. #20
    Guest

    Predefinito

    repetita iuvant
    Citazione Originalmente inviato da miniscript Visualizza messaggio
    non puoi inviare output e per poi avviare una sessione (creazione/lettura del cookie SID). per di più utilizzi la funzione header()...
    fai così:
    Codice PHP:
    <?php session_start(); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    etc etc

    inoltre cancella:

    if (!is_array($_POST)) die("Hack Attempt!");

    la condizione è sempre falsa: $_POST è un array globale cioè è sempre esistente in tutte le tue pagine php ed è sempre un array, eventualmente vuoto... ma cmq un array esistente (per di più è preceduto da if(isset($_POST["entra"])...)

  21. #21
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    session_start() mi è sfuggito, abbi pazienza!

    per !is_array($_POST), lo so che $_POST è array superglobale, ma lo metto lo stesso in tutti i form che uso, forse per uno sfizio personale forse perchè il php è altamente craccabile.



    Sicurezza Apllicazioni Web:
    http://sci138.sci.unich.it/~amato/te.../sicurezza.php
    Ultima modifica di EuroSalute : 12-02-2011 alle ore 20.51.51 Motivo: ...info
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  22. #22
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    per !is_array($_POST), lo so che $_POST è array superglobale, ma lo metto lo stesso in tutti i form che uso, forse per uno sfizio personale forse perchè il php è altamente craccabile.



    Sicurezza Apllicazioni Web:
    http://sci138.sci.unich.it/~amato/te.../sicurezza.php
    $_POST è sempre un array ( come ha già detto miniscript )!
    Il controllo è totalmente inutile.

  23. #23
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    sarà perfettamente inutile, ma io quel controllo lo lascio lo stesso!

    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  24. #24
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    sarà perfettamente inutile, ma io quel controllo lo lascio lo stesso!

    Ok, però prima di quel controllo aggiungici:
    Codice PHP:
    if(1 != 1) {
    die(
    'Questo è un controllo utile...');
    }
    ...

  25. #25
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    Ho aggiunto i tokens session come protezione a questo script....dovrebbe funzionare correttamente...correggete se ci sono errori:

    Codice PHP:
    <?php
    if (!$_SESSION) session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <strong><span class="style1"><em>
    <?php
    if ($_POST && !is_array($_POST)) die("<p>Hack Attempt!");

    if (isset(
    $_POST["entra"]) && !is_array($_POST["entra"])){

    $token_age = time() - $_SESSION['token_time'];

    if (
    $token_age <= 10) die ("<p><a href=\"index.php\">Non Così in Fretta (Attacco CSRF/XSRF) - Riprova!</a>");

    if (isset(
    $_SESSION['token']) && $_POST['token'] == $_SESSION['token']){

    if (isset(
    $_POST["user"]) && !empty($_POST["user"]) && isset($_POST["pass"]) && !empty($_POST["pass"])){
    //echo "<p>".var_dump($_POST);
    //echo "<p>";print_r (array_keys ($_POST));

    $us = $_POST["user"];
    $pw = $_POST["pass"];

    $_SESSION['login']=false;
    $_SESSION['utente']="";

    $file="utenti.txt";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode(';', $contenuto);

    foreach(
    $array as $valore) {
    list(
    $user_name, $pass_word)=explode(',', $valore);

    //se crypti le password nel file utenti.txt :
    //if (trim($user_name) == $us && trim($pass_word) == md5($pw))
    if (trim($user_name) == $us && trim($pass_word) == $pw)
    {
    $_SESSION['login']=true;
    //toglie gli spazi all'inizio e alla fine della stringa:
    $_SESSION['utente']=trim($us);
    //metti il redirect oppure il link:
    //header("Location: area_privata.php");
    echo "<p><a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    //termina :
    die();
    }

    }

    fclose($apri);

    if (
    $_SESSION['login']==false) echo "<p><a href=\"index.php\">Accesso Negato - Errore Login Riprova!</a>";

    }else echo
    "<p><a href=\"index.php\">Errore : Username e Password Obbligatori!</a>";

    }
    //token
    else die ("<p><a href=\"index.php\">Attacco CSRF/XSRF - Riprova!</a>");

    }
    //tokens session:
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();

    ?>

    <form action="index.php" method="post" name="">

    <input type="hidden" name="token" value="<?=$token?>">

    *Username : <input name="user" type="text">
    <br>
    *Password : <input name="pass" type="password">
    <p></p>
    <input name="entra" type="submit" value="Entra">
    </form>
    </em></span></strong>
    </body>
    </html>
    Ultima modifica di EuroSalute : 13-02-2011 alle ore 00.14.32 Motivo: ..ionfo
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  26. #26
    Guest

    Predefinito

    - visualizzo la pagina di login;
    - cancello i cookie (compreso il SID cioè il cookie di sessione) (...gli hacker spesso disabilitano i cookie);
    - al submit del form avendo eliminato il SID tutte le variabili di sessione create in precedenza risulteranno tutte inesistenti;
    - dato il $_SESSION['token_time'] risulterà non esistente si avrà che:
    $token_age = time() - $_SESSION['token_time'];
    diventa:
    $token_age = time() - 0;
    - e la tua condizione if($token_age <= 10) và a farsi benedire...

    1) i token è sempre opportuno inviarli via GET;
    2) le variabili $_POST, $_GET, $_COOKIE, ed in alcuni casi $_SESSION bisogna sempre verificarne esistenza e contenuto dato che sono valorizzate direttamente/indirettamente dall'utente;
    3) Per un login il token ha poco senso: essi sono utili per proteggersi da attacchi CSRF. Faccio un esempio:

    dopo che ti logghi sul tuo pannello di amministrazione può essere previsto un link ad una pagina di questo tipo:

    Codice:
    http://www.dominio.it/admin/cancellasito.php
    tale pagina cancella il tuo sito (... è un esempio... ad esempio potrebbe cancellare un post o un commento o altro...) ma per potervi accedere occorre preliminarmente eseguire il login. Un hacker conosce l'URL della pagina ma non ha le credenziali di accesso per poter eseguire il DELETE.

    Allora cosa fa? ti manda una email in cui scrive:
    Codice:
    <a href="http://www.dominio.it/admin/cancellasito.php">Manuela Arcuri vuole conoscerti</a>
    Ingenuamente noi, che siamo loggati(!!), clicchiamo sul link e... ci cancelliamo il sito. Per evitare ciò si usano i token
    Codice:
    http://www.dominio.it/admin/cancellasito.php?token=stringa_casuale_non_conosciuta_da_hacker
    Ultima modifica di miniscript : 13-02-2011 alle ore 00.51.48

  27. #27
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    grazie miniscript, effettivamente non ho controllato la variabile di sessione del token_time.

    comunque se i cookie vengono disabilitati questo controllo sarà sempre falso:
    Codice PHP:
    if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])
    quindi ho aggiunto questo controllo:
    Codice PHP:
    if (!isset($_SESSION['token_time']) || $_SESSION['token_time']=="") die ("<p><a href=\"index.php\">I Cookie devono essere abilitati - Riprova!</a>");
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  28. #28
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    grazie miniscript, effettivamente non ho controllato la variabile di sessione del token_time.
    ok... così và bene. Ma cmq rimane il fatto che il token in un login ha poco senso.

    Ti dico la mia (forse soggettiva) gerarchia di priorità in un sistema di login:

    1° scegliere una password sicura. Ad esempio: lunghezza minima, non simple(es. divieto di date di nascita), alfanumerica, case-sensitive, caratteri speciali.
    In questo caso non vi è la registrazione utente ma nell'eventualità occorre strutturare una regex/funzione che verifichi il livello di sicurezza.

    2° criptare le password nel sorgente (file php o db) con salt (eventualmente dinamico);

    3° prevedere la compilazione di un captcha;

    4° imporre un'attesa di risposta (come fa altervista nel pannello di amministrazione del sito... dopo il submit la risposta arriva dopo qualche secondo);

    5° salvare nel i tentativi falliti in base all'username inserito e/o all'ip che fallisce il login; dopo un tot di tentativi errati impedire il login a quell'username/ip per un tot di tempo e inviare notifica all'amministratore del sito e/o titolare account.

    6° rigenerare il SID ad ogni chiamata http

    7° sistema di criptaggio password lato client per evitare lo sniffing dei dati.

    8° vi sarebbe l'https ssl ma nn ho esperienza sufficiente sull'argomento.

    Assolutamente da evitare:
    - dati sensibili nei cookie e nelle sessioni (neppure se criptati!!);
    - cookie di autologin con scadenza lato utente (la scadenza deve essere gestita lato server);
    - tantissimo altro...

    PS: GRRRRRRRRRRRR... non vedo l'ora di finire il mio sito per scrivere degli articoli...

    PS 2: Una cosa importantissima!!
    Tutto deve essere proporzionato allo scopo: non ha senso realizzare un bunker per impedire l'accesso ad un ripostiglio.
    Ultima modifica di miniscript : 13-02-2011 alle ore 12.58.13

  29. #29
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,425

    Predefinito

    Citazione Originalmente inviato da miniscript Visualizza messaggio
    Assolutamente da evitare:
    - dati sensibili nei cookie e nelle sessioni (neppure se criptati!!);
    Nei cookie certamente concordo, ma nelle sessioni, perché?

    Cioè, sono salvate lato server e il client ha solo il riferimento (SID). Quindi sarebbe impossibile dal client a leggere il valore della sessione... o sbaglio?

    Ciao!

  30. #30
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Nei cookie certamente concordo, ma nelle sessioni, perché?

    Cioè, sono salvate lato server e il client ha solo il riferimento (SID). Quindi sarebbe impossibile dal client a leggere il valore della sessione... o sbaglio?

    Ciao!
    ... azz... complicatuccio da spiegare. Ci provo, ma sono pronto ad essere smentito da chi ne sà di più... quindi prendi con le molle ciò che affermo

    Una sessione di regola non è altro che un file di testo (verifica nel php.ini il parametro Session.save_handler) con un nome di questo tipo:
    sess_5a2eu9c3alr2ffa0736uehb155

    in cui la seconda parte del nome è una stringa alfanumerica [a-f][0-9] (sistema esadecimale) che identifica la sessione (il SID) e và a salvarsi nella cartella temporanea del server (sul mio xampp è C://xampp/tmp). Per conoscerla:
    Codice PHP:
    echo session_save_path();
    Essendo un file come tanti altri potrebbe essere letto perchè il server va in tilt.

    Aldilà di questo caso "estremo"... AV come la maggior parte degli hosting è su un server condiviso e questi ultimi salvano le sessioni di tutti i suoi siti in una cartella (non sò le impostazioni di AV... ma puoi testare con il codice sopra indicato). A questo punto:
    1) i diversi applicativi del nostro sito possono salvare variabili di sessione che possono andare in conflitto fra di loro.
    2) gli amministratori di AV possono tranquillamente sbirciare i file di sessione (non mi fido di nessuno... )
    3) Se la cartella è unica potrebbero andare in conflitto le sessioni del sito A con quelle del sito B (ma credo che siano separate).

    Per le motivazioni sopra esposte alle volte si usa il comanda session_save_path()... in cui è possibile specificare la cartella in cui salvare i file di sessione. Questo metodo è usato anche da alcuni "script famosi" per ragioni di sicurezza... uno su tutti oScommerce.

    Nell'utilizzare tale comando vi sarebbero problemi legati al garbage automatico delle sessioni (cancellazione sessioni scadute).

    MA... il 90% degli hosting non permette di utilizzare tale comando... credo fortemente che anche AV non sia diverso.

    SOLUZIONI ALTERNATIVE (molto faticose da usare... non ho esperienza personale al riguardo)
    - con session_start(); inviamo il SID
    invece di popolare l'array $_SESSION salviamo tutto su db... http://www.hawkee.com/snippet/2018/
    - creaiamo e salviamo i file di sessione in una cartella del nostro sito (... purtroppo dentro la DOCUMENT ROOT) e gli mettiamo un lock con .htaccess

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •