Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: sistema di login

  1. #1

    sistema di login

    ciao
    premetto che non mi interessa utilizzare uno script gia fatto e solo da inserire ma ne vorrei construire uno io in modo da capirlo e poterlo poi modificare a mio piacimento.

    Sto provando a inserire un sistema di login (di quelli proprio base senza elementi aggiuntivi) a un cms sul mio sito..aiutandomi su internet ne fatto uno composto da 3 file:


    login_sucess.php
    Codice PHP:
     // Controlla se la sessione è stata registrata, altrimenti rimanda alla pagina di login
    <?php
          session_start
    ();
          if(!
    session_is_registered(username)) {
                
    header("location:form.php");
                }
    ?>
    form.php:
    Codice PHP:
    //qui in pratica c'è il form per fare il login che lavora sulla pagina checklogin.php
    <form action="checklogin.php" method="post">
    <
    label>username: <input type="text" name="username" /></label>

    <
    label>password: <input type="password" name="password" /></label>

    <
    input type="submit" value="send" />
    </
    form
    checklogin.php:
    Codice PHP:
    <?php
          $host
    ="localhost";  
          
    $username="myuser";  
          
    $password="pass";   
          
    $db_name="mydb";   
          
    $tbl_name="admins"
         
          
    mysql_connect("$host""$username""$password")or die("cannot connect");
          
    mysql_select_db("$db_name")or die("cannot select DB");
      
          
    $username=$_POST['username'];
          
    $password=$_POST['password'];
      
          
    $sql="SELECT * FROM $tbl_name WHERE username='$username' and       password='$password'";
         
    $result=mysql_query($sql);
      
          
    $count=mysql_num_rows($result);
          if(
    $count==1)   {
              
    session_register("username"); 
              
    session_register("password");
                                 }
      
          else {
          echo 
    "Attenzione username o password errati";
                 }
      
    ?>
    c'è un pezzo però ( trovato su internet) che non capisco
    Codice PHP:
    $count=mysql_num_rows($result);
          if(
    $count==1)   { 
    e che penso sia sbagliato in quanto io avrei solo bisogno di confrontare i valori contenuti nella tabella admins con quelli inviati dall'utente col form..
    io pensavo invece a una cosa simile:
    Codice PHP:
    $form-username$_POST['username'] ;
    $form-password$_POST['password'] ;

        if (
    $form-username=='$username' && $form-password=='$password')
                {
                    echo 
    " benvenuto admin! ";
                     
    session_register("username"); 
                          
    session_register("password"); 
                          
    header("location:login_success.php");
                    include (
    "comandi.php"); //pagina per controllare il cms
                
    }
        else 
            { 
            echo 
    "nome utente e password sbagliati    ";
            } 
    nelle vere pagine non ho messo i commenti nel caso dessero problemi al browser..
    che ne pensate? cosi non funziona ci deve essere qualche errore logico:berto: ..
    help meeee
    http://lucaardiz.altervista.org

  2. #2
    session register non si usa piu'. Si dovrebbe usare $_SESSION che e' sempre registrato ed a cui si aggiunge solo la variabile come indice associativo.

    Poi non si dovrebbe MAI mettere dati sensibili come username e password in un file di sessione che e' scrivibile e leggibile da tutti.

    Il controllo che vuoi fare tu e' per chi non si fida del software...

    select * ... where nome='nome_tuo' e password = 'tua'

    e poi controlli se quello che viene estratto e' uguale alla condizione di estrazione... certo che lo sara', mi pare ovvio. Molto meglio contare i record e questo record estratto deve essere == 1. Perche' 0 significa nome o pwd errati, piu' di 1 un doppione assolutamente inconcepibile in una gestione di account.

    Nel nome delle variabili sostituisci i trattini - con un _ visto che il trattino e' un operatore aritmetico

    anche nell'assegnazione dei nomi delle variabili meglio stare attenti: $username e $password gia' li usi per settare il client di mysql.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    39
    La risposta è molto giusta, comunque io ti consiglierei prima di imparare bene php, magari con l'ausilio di un testo.

    Altrimenti rischi di non capire cosa fai e magare fare pasticci.

    Ciao
    Crystal Solutions
    Sito Web - Crystal Solutions Siti Internet

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Poi non si dovrebbe MAI mettere dati sensibili come username e password in un file di sessione che e' scrivibile e leggibile da tutti.
    Da chi scusa? I file di sessione sono memorizzati sul server e non sono accessibili a tutti... o mi sbaglio?

    Ad ogni modo direi che il problema si risolve memorizzando l'hash invece della password.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    39
    Magari da un qualche utente con accesso shell sul server (anche non root)... o mi sbaglio? I file di sessione non sono leggibili da tutti gli utenti?

    Sì un hash comunque è una buona soluzione.
    Crystal Solutions
    Sito Web - Crystal Solutions Siti Internet

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Allora, ho controllato. Almeno sul mio computer (poi immagino che cambi da server a server) questa è la directory session

    drwxrwx--- 2 root apache 4096 2008-12-31 13:36 session

    quindi a parte root e apache nessuno ha accesso

    e i file di sessione all'interno sono tutti tipo:

    -rw------- 1 apache apache 135 2008-12-30 15:52 sess_2kop7v7ahruvjfnhn9lql8ss41

    Quindi, a parte root nessuno ci ha accesso.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    39
    ci ha accesso l'utente "apache"

    hai provato da php, con una chiamata a system() ?

    Comunque è più per vedere se funziona...
    Crystal Solutions
    Sito Web - Crystal Solutions Siti Internet

  8. #8

    Re: sistema di login

    ok ads riprovo a farlo con $_SESSION ! grazie!
    http://lucaardiz.altervista.org

  9. #9
    Originariamente inviato da piero.mac

    Il controllo che vuoi fare tu e' per chi non si fida del software...

    select * ... where nome='nome_tuo' e password = 'tua'

    e poi controlli se quello che viene estratto e' uguale alla condizione di estrazione... certo che lo sara', mi pare ovvio. Molto meglio contare i record e questo record estratto deve essere == 1. Perche' 0 significa nome o pwd errati, piu' di 1 un doppione assolutamente inconcepibile in una gestione di account.
    mah ..io pero nn capisco: se non si fa quell'if ..dov'è che viene controllato che l'username e la password dell'utente coincidono con quelli presenti nella tabella admins mysql?

    il semplice contare le righe della tabella con
    Codice PHP:
      $count=mysql_num_rows($result)
    if(
    $count==1)    { 
    non capisco in che modo mi controlli il login :master:
    http://lucaardiz.altervista.org

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Nella tua query hai:

    codice:
    WHERE nome=xxxx and pwd = yyy
    Quindi se hai messo una pass sbagliata non restituirà alcun risultato!

    Come dicevo prima comunque, è meglio salvare l'hash della password.

    Ad es. in php puoi scrivere:

    codice:
    md5($pass);
    per generare l'hash MD5 della password.

    Poi nella query avrai

    codice:
    WHERE nome=xxxx and md5(pwd) = yyy
    In questo modo se qualcuno riuscisse ad accedere al DB comunque non avrebbe accesso alle password in chiaro

    ----
    @zooloo: hai in parte ragione

    in effetti facendo:

    codice:
    echo system("cat /var/lib/php/session/*");
    In locale vedo il contenuto dei files di sessione.

    Ho provato anche su un host remoto shared (Aruba, che tiene le variabili di sessione in /tmp) e un ls mi fa vedere i file di sessione. Tuttavia non posso visualizzarli con cat perchè l'owner dei file è diverso a seconda del sito di appartenenza del file!

    Quindi l'unico problema di sicurezza sarebbe in teoria il fatto che uno può trovare degli id di sessione validi, ma comunque non se ne fa niente a meno di non aver accesso al tuo dominio. In più il nome dell'owner è un numero di 8 cifre, quindi non sai a che sito si riferisce...

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.