problema form login sicuro

Andreotti99

Nuovo Utente
19 Mar 2014
4
0
0
salve a tutti, ho un problema con uno script php.
girando in rete ho trovato questo script in php per realizzare un sistema di login sicuro, ma qualcosa non va, vi posto qui tutto il codice.

db_connect.php
PHP:
<?php
define("HOST", "localhost"); // E' il server a cui ti vuoi connettere.
define("USER", ""); // E' l'utente con cui ti collegherai al DB.
define("PASSWORD", ""); // Password di accesso al DB.
define("DATABASE", ""); // Nome del database.
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
// Se ti stai connettendo usando il protocollo TCP/IP, invece di usare un socket UNIX, ricordati di aggiungere il parametro corrispondente al numero di porta.
?>

functions.php
PHP:
<?php
function sec_session_start() {
        $session_name = 'sec_session_id'; // Imposta un nome di sessione
        $secure = false; // Imposta il parametro a true se vuoi usare il protocollo 'https'.
        $httponly = true; // Questo impedirà ad un javascript di essere in grado di accedere all'id di sessione.
        ini_set('session.use_only_cookies', 1); // Forza la sessione ad utilizzare solo i cookie.
        $cookieParams = session_get_cookie_params(); // Legge i parametri correnti relativi ai cookie.
        session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
        session_name($session_name); // Imposta il nome di sessione con quello prescelto all'inizio della funzione.
        session_start(); // Avvia la sessione php.
        session_regenerate_id(); // Rigenera la sessione e cancella quella creata in precedenza.
}



function login($email, $password, $mysqli) {
   // Usando statement sql 'prepared' non sarà possibile attuare un attacco di tipo SQL injection.
   if ($stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { 
      $stmt->bind_param('s', $email); // esegue il bind del parametro '$email'.
      $stmt->execute(); // esegue la query appena creata.
      $stmt->store_result();
      $stmt->bind_result($user_id, $username, $db_password, $salt); // recupera il risultato della query e lo memorizza nelle relative variabili.
      $stmt->fetch();
      $password = hash('sha512', $password.$salt); // codifica la password usando una chiave univoca.
      if($stmt->num_rows == 1) { // se l'utente esiste
         // verifichiamo che non sia disabilitato in seguito all'esecuzione di troppi tentativi di accesso errati.
         if(checkbrute($user_id, $mysqli) == true) { 
            // Account disabilitato
            // Invia un e-mail all'utente avvisandolo che il suo account è stato disabilitato.
            return false;
         } else {
         if($db_password == $password) { // Verifica che la password memorizzata nel database corrisponda alla password fornita dall'utente.
            // Password corretta!            
               $user_browser = $_SERVER['HTTP_USER_AGENT']; // Recupero il parametro 'user-agent' relativo all'utente corrente.
 
               $user_id = preg_replace("/[^0-9]+/", "", $user_id); // ci proteggiamo da un attacco XSS
               $_SESSION['user_id'] = $user_id; 
               $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username); // ci proteggiamo da un attacco XSS
               $_SESSION['username'] = $username;
               $_SESSION['login_string'] = hash('sha512', $password.$user_browser);
               // Login eseguito con successo.
               return true;    
         } else {
            // Password incorretta.
            // Registriamo il tentativo fallito nel database.
            $now = time();
            $mysqli->query("INSERT INTO login_attempts (user_id, time) VALUES ('$user_id', '$now')");
            return false;
         }
      }
      } else {
         // L'utente inserito non esiste.
         return false;
      }
   }
}


function checkbrute($user_id, $mysqli) {
   // Recupero il timestamp
   $now = time();
   // Vengono analizzati tutti i tentativi di login a partire dalle ultime due ore.
   $valid_attempts = $now - (2 * 60 * 60); 
   if ($stmt = $mysqli->prepare("SELECT time FROM login_attempts WHERE user_id = ? AND time > '$valid_attempts'")) { 
      $stmt->bind_param('i', $user_id); 
      // Eseguo la query creata.
      $stmt->execute();
      $stmt->store_result();
      // Verifico l'esistenza di più di 5 tentativi di login falliti.
      if($stmt->num_rows > 5) {
         return true;
      } else {
         return false;
      }
   }
   }
   
   
   function login_check($mysqli) {
   // Verifica che tutte le variabili di sessione siano impostate correttamente
   if(isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) {
     $user_id = $_SESSION['user_id'];
     $login_string = $_SESSION['login_string'];
     $username = $_SESSION['username'];     
     $user_browser = $_SERVER['HTTP_USER_AGENT']; // reperisce la stringa 'user-agent' dell'utente.
     if ($stmt = $mysqli->prepare("SELECT password FROM members WHERE id = ? LIMIT 1")) { 
        $stmt->bind_param('i', $user_id); // esegue il bind del parametro '$user_id'.
        $stmt->execute(); // Esegue la query creata.
        $stmt->store_result();
 
        if($stmt->num_rows == 1) { // se l'utente esiste
           $stmt->bind_result($password); // recupera le variabili dal risultato ottenuto.
           $stmt->fetch();
           $login_check = hash('sha512', $password.$user_browser);
           if($login_check == $login_string) {
              // Login eseguito!!!!
              return true;
           } else {
              //  Login non eseguito
              return false;
           }
        } else {
            // Login non eseguito
            return false;
        }
     } else {
        // Login non eseguito
        return false;
     }
   } else {
     // Login non eseguito
     return false;
   }
}

?>

process_login.php
PHP:
<?php

include 'db_connect.php';
include 'functions.php';
sec_session_start(); // usiamo la nostra funzione per avviare una sessione php sicura
if(isset($_POST['email'], $_POST['p'])) { 
   $email = $_POST['email'];
   $password = $_POST['p']; // Recupero la password criptata.
   if(login($email, $password, $mysqli) == true) {
      // Login eseguito
      header('Location: ./home_network.php');
   } else {
      // Login fallito
      //header('Location: ./login.php?error=1');
	  echo $db_password;
   }
} else { 
   // Le variabili corrette non sono state inviate a questa pagina dal metodo POST.
   echo 'Invalid Request';
}

?>

index.php
PHP:
<?php

include 'db_connect.php';
include 'functions.php';
sec_session_start(); // usiamo la nostra funzione per avviare una sessione php sicura
if(isset($_POST['email'], $_POST['p'])) { 
   $email = $_POST['email'];
   $password = $_POST['p']; // Recupero la password criptata.
   if(login($email, $password, $mysqli) == true) {
      // Login eseguito
      header('Location: ./home_network.php');
   } else {
      // Login fallito
      //header('Location: ./login.php?error=1');
	  echo $db_password;
   }
} else { 
   // Le variabili corrette non sono state inviate a questa pagina dal metodo POST.
   echo 'Invalid Request';
}

?>

poi c'è il file forms.js e sha512.js ma non credo dipenda da quelli.

Il problema è che non mi fa accedere.
grazie in anticipo per il vostro aiuto.
un saluto:byebye:
 
Discussioni simili
Autore Titolo Forum Risposte Data
S problema form login PHP 3
I [PHP]Problema sito con form login in ogni pagina PHP 7
M Problema con controllo form in real time jQuery 6
P Problema concantenazione form Javascript 3
M [PHP] Problema search form PHP 3
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
O [PHP] Problema Button in form PHP 1
Emix Problema con creazione form css/mobile HTML e CSS 3
A [PHP] Problema Button in form PHP 6
trattorino [PHP] [HTML] problema form PHP 1
S Problema invio form php/html PHP 3
allegria [PHP] Problema form PHP 2
zammaeng [PHP] Problema form con lista PHP 8
S Form e tabella, problema grafico HTML e CSS 2
B problema con i form Javascript 0
L Problema form contatti. PHP 2
D Form Registrazione con conferma via email - problema PHP 10
Il Matta Problema Form e invio mail PHP 2
P Problema creazione form con ajax PHP 1
S problema form PHP 2
S Problema con Form CSS HTML e CSS 1
felino [Contact Form 7] Funzione personalizzata: ho un problema. WordPress 1
asevenx problema invio email tramite form PHP 3
F Problema con passaggio variabile da form PHP 3
B Problema form mail per invio doppio allegato PHP 1
J Problema con form in bootstrap HTML e CSS 0
B Problema su passaggio dati da form Classic ASP 1
A Problema invio dati form contatti PHP 12
A Problema orario invio mail per form PHP 4
P Problema multi select form jQuery 6
O Problema con refresh/form PHP 0
M problema con form scrittura su mysql PHP 3
A Problema invio messaggio col form PHP 1
S Problema php con form PHP 0
S Problema form Javascript 6
T problema strano con procedura di controllo da database, di dati immessi in un form asp Classic ASP 5
Virginia86 [risolto] Problema select e verifica form PHP 38
C Problema form javascript che non funziona Javascript 4
Andre7890 Problema CSS in Form Contatti HTML e CSS 7
A problema con un form HTML e CSS 77
Task Mc Problema form invio email da sito ç__ç PHP 4
T problema form prenotazione Javascript 1
Emix Creazione DdT e Fatture... Problema Form. Javascript 16
S Problema con l'invio del form in php PHP 0
Y problema allineamento form con internet explorer HTML e CSS 2
A problema con form paypal HTML e CSS 0
S Problema inserimento nuovo record da form PHP 5
F Problema form invio email php PHP 3
A Piccolo problema con form email HTML e CSS 2
P problema validazione form con ajax e jquery Ajax 0

Discussioni simili