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

Discussione: login

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216

    login

    ciao a tutti
    sto tentando di fare un login
    l'idea è questa:

    login.php
    Codice PHP:
    <?php 
    require_once('../Connections/Araldica.php'); ?>
    <?php 
    $user 
    $_POST['user'];
    $psw $_POST['psw'];
    //sql injection
    $user stripslashes($user);//rimuove gli slash /
    $psw stripslashes($psw);
    $user mysql_real_escape_string($user); //Escape della stringa
    $psw mysql_real_escape_string($psw);
    $query "SELECT * FROM admin WHERE username = '$user' AND password = '$psw'";
    $result mysql_query($query);
    $count mysql_num_rows($result);
    if(
    $count == 1){    
    session_register($user);    
    session_register($psw);    
    session_start();    
    if(!
    session_is_registered($user)){    
    header("location: ../backoffice.php");
    }
    }
    else{echo
    "Username o password errate!";}?>
    il problema è che si blocca a questa pagina
    cosa può essere???

    aggiungo un'altra domanda
    come posso rendere il più sicuro possibile il login da attacchi hack???
    Ultima modifica di rare; 23-09-2014 a 15:02
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    ciao ^^ provo ad aiutarti nonostante sia una principiante sull'argomento ^^
    Anche io ho dovuto fare una login, e ho visto che session_register e session_is_Registered sono deprecate nelle nuove versioni di php ^^
    Io ho infatti utilizzato

    $_SESSION['nomecampo']=$nomevariabiledamemorizzare;

    Altra cosa..non vedo alcun session_start()
    che dovrebbe stare come primissima cosa dopo il tag <?php

    Ti abbozzo il codice che ho usato io per la login

    Codice PHP:
    <?php
    session_start
    ();
    //dati connessione e connessione al db
    //presa dei dati da form con
    $myusername=$_POST['myusername']; 
     
    $mypassword=$_POST['mypassword']; 

    $myusername stripslashes($myusername);
    $mypassword stripslashes($mypassword);
    $myusername mysql_real_escape_string($myusername);
    $mypassword mysql_real_escape_string($mypassword);

    $sql="SELECT * FROM $tbl_name WHERE BINARY U_NomeUtente='$myusername' and U_Password='$mypassword'"//Aggiungendo BINARY mi fa il controllo del case sensitive.
    $result=mysql_query($sql);
    $num=mysql_numrows($result);

    if(
    $count==1//se l'utente esisto mi salvo i dati in memoria sessione
    {
    $_SESSION['usernameSessione']=$myusername;
    $_SESSION['passwordSessione']=$mypassword

    header("location:paginadovevoglioandaresetuttook"); 
    }else
    {
    header("location:paginadovevoglioandaresehosbagliato"); 
    }
    ?>
    Ultima modifica di JErikaM; 23-09-2014 a 15:35

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    ho riscritto il codice seguendo il tuo ma sia mettendo user e psw giusti o sbagliati torna sempre a index.php

    Codice PHP:
    <?php 
    session_start
    ();
    require_once(
    '../Connections/Araldica.php'); 
    $user $_POST['user'];$psw $_POST['password'];
    $user stripslashes($user);
    $psw stripslashes($psw);$user mysql_real_escape_string($user);
    $psw mysql_real_escape_string($psw);

    $query "SELECT * FROM admin WHERE BINARY username = '$user' AND password = '$psw'";
    $result mysql_query($query);
    $num mysql_num_rows($result);

    if(
    $count==1){    
    $_SESSION['SESSION_username'] = $user;
        
    $_SESSION['SESSION_psw'] = $psw;
            
    header("location: backoffice.php");
    }
    else{    
    header("location: index.php");}?>
    praticamente è come se non entra dentro l'if e passa subito all'else

    EDIT
    OK ho trovato l'errore, funziona!! ora vorrei rendere il codice più sicuro, cioè a prova di male intenzionati, come posso muovermi???
    Ultima modifica di rare; 24-09-2014 a 10:21
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    Mi fa piacere che tu abbia risolto
    Per quanto riguarda la seconda domanda non so aiutarti

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Dal punto di vista di sql-injection, non dovresti aver problemi utilizzando mysql_real_escape_string.
    Tuttavia, potresti abbandonare mysql_* (che verrà abbandonato) in favore di PDO o mysqli

    Una miglioria che puoi (dovresti) apportare è cifrare la password sul database.
    Quando un utente si registra, invece che salvare in chiaro la password, ci applichi una funzione di hash (oppure una crittografica).
    Esempio con hash+salt:
    Codice PHP:
    $salt "una stringa di caratteri e numeri a caso e lunga a caso che salverai in qualche file di configurazione";
    /*********/

    $passwd $_POST['password'];
    // verifiche varie sui dati inseriti
    $passwd sha1($salt.$passwd);

    //adesso salverai $passwd nel db 
    Quando farai il login:
    Codice PHP:
    $psw sha1($salt.mysql_real_escape_string($psw)); 
    Ultima modifica di boots; 24-09-2014 a 11:50

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    Quote Originariamente inviata da boots Visualizza il messaggio
    Tuttavia, potresti abbandonare mysql_* (che verrà abbandonato) in favore di PDO o mysqli
    si ci avevo pensato dopo aver riinstallato wamp e php5... ma ormai ho già scritto buona parte del sito e dovrei cambiare molto... cosa che mi chiederebbe molto tempo e non ne ho!!!

    Quote Originariamente inviata da boots Visualizza il messaggio
    Una miglioria che puoi (dovresti) apportare è cifrare la password sul database.
    Quando un utente si registra, invece che salvare in chiaro la password, ci applichi una funzione di hash (oppure una crittografica).
    Esempio con hash+salt:
    Codice PHP:
    $salt "una stringa di caratteri e numeri a caso e lunga a caso che salverai in qualche file di configurazione";
    /*********/

    $passwd $_POST['password'];
    // verifiche varie sui dati inseriti
    $passwd sha1($salt.$passwd);

    //adesso salverai $passwd nel db 
    Quando farai il login:
    Codice PHP:
    $psw sha1($salt.mysql_real_escape_string($psw)); 
    quindi la campo sarà sempre char (128)???
    ma non mi è chiaro a cosa mi serve $salt...
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Si, il campo diventa di dimensione fissa (che dipende dalla funzione di hash che usi)

    Il $salt si usa per prevenire attacchi di forza bruta basati sulle rainbow table. Se non sbaglio, queste sono tabelle che contengono già l'hash di svarite stringhe (di solito le password più utilizzate) in modo evitare di calcolare l'hash delle varie combinazioni durante l'attacco e quindi velocizzare le operazioni.

    Pensa se utilizzassi come password "1234" un attacco con le rainbow table impiegherebbe poco tempo a trovare la password , invece se la password diventa : 1234eerTTrre23434bbfrur122331234, puoi immaginare che le cose diventano molto più complicate per l'attaccante (diemnsioni della rainbowtable e ricerca )

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    scusami ma non ti seguo
    se io faccio
    $passwd = sha1($passwd);
    cio significa che all'interno di $passwd ci sarà una cosa tipo: 1234eerTTrre23434bbfrur12233

    ho capito il senso di crittografare la psw ma non capisco a cosa serve quella variabile se posso riscrivere sopra alla stassa...
    sha1 è una crittografia a 40 caratteri, ciò significa che se io faccio
    sha1($salt.$passwd) comunque 40 caratteri sono...
    giusto???

    ti chiedo un'altra delucidazione/conferma
    per "riservare" una pagina un codice così può andare???
    Codice PHP:
    <?php session_start();
    if(!isset(
    $_SESSION['SESSION_username'])){header("Location: ../index.php");}?>
    cioè è possibile migliorarlo e renderlo più sicuro???
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Come ti ho detto, $salt serve per le rainbow table e quindi attacchi a forza bruta. più la stringa è lunga e casuale ($salt+$passwd), minore è la probabilità che quella stringa sia presente nella rainbow table (e comunque l'attaccante impiegherà più tempo nello scorrere la tabella).
    Poi ci sarebbe da discutere dalla funzioni di hash e delle collisioni sulle chiavi...ma se usi sha1 o meglio sha256 dovresti stare tranquillo

    Il codice per "riservare" la pagina va bene. Anche se per alcune pagine potresti voler prevenire attacchi di XSRF, Cross-site request forgery, che portano utenti autorizzati a compiere azioni involontariamente.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    chiarissimi
    quindi faccio
    $salt="tante belle parole";
    $psw=sha256($psw.$salt);

    poi quando dovrò estrarre
    $psw=sha256($salt.mysql_real_escape_string($psw)); corretto???

    Quote Originariamente inviata da boots Visualizza il messaggio
    Il codice per "riservare" la pagina va bene. Anche se per alcune pagine potresti voler prevenire attacchi di XSRF, Cross-site request forgery, che portano utenti autorizzati a compiere azioni involontariamente.

    quindi una sorta di livello di accesso
    liv1- fa tutto
    liv2- alcune cose
    liv3- guarda

    ho interpretato bene???
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

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 © 2026 vBulletin Solutions, Inc. All rights reserved.