Login criptato con PHP 5 + MySQL

Ciao a tutti,

abbiate pazienza, sono nuovo e questo è il mio primo messaggio sul forum :)

Allora, programmo PHP da poco grazie all'interessantissima e chiarissima guida su questo sito. La mia domanda è: come posso fare per creare uno script di login in PHP 5 con l'ausilio di password criptate in un database MySQL 5 e funzioni anti SQL-Injection?

Grazie infinite delle risposte

inviato 9 anni fa
vecchia
X 0 X

Ciao,

dipende tutto da 'quanta sicurezza'  :police: hai bisogno...per evitare sql injection su php5 puoi usare questo

http://tw2.php.net/mysql_real_escape_string

password criptate, in genere si usa il metodo più che sicuro dell'MD5 sulle pwd, poi per evitare dei brute force puoi conteggiare i tentativi errati e mostrare un CAPTCHA dopo un certo numero di tentativi per intercettare i robot.

A disposizione per approfondire la cosa  :)

 :bye:

risposto 9 anni fa
robertomigli
X 0 X

Farei di più, inizia a dire passo, passo, come vorresti costruire la tua applicazione, così vediamo quali passi potrebbero mancare e quali risulterebbero inutili o ridondanti.

risposto 9 anni fa
Marco Grazia
X 0 X

grazie delle risposte, credo che questo sia il miglior sito di PHP... O0

Allora, a me servirebbe una cosa semplice ma allo stesso tempo efficace. Buona idea quella della CAPTCHA e MD5. Mi servirebbe un piccolo form per la registrazione degli utenti, un form per il login ( la parte forse più complicata per me ) e naturalmente una parte admin per cancellare, editare, roimuovere gli utenti. Si può fare con il vostro aiuto?

risposto 9 anni fa
vecchia
X 0 X

 ;D

certo, ma dipende molto dalla tua esperienza...io uso in genere una classe molto semplice per le azioni standard (es: identifica utente autenticato, cambia dati, aggiorna utente, crea nuovo utente...)

per il captcha, http://www.ejeliot.com/pages/2 (spero tu abbia GD, altrimenti niente captcha...o quasi)

per il form inserimento dati...tutto classico, attenta a gestire le maiusc/minuscole: gli md5 sono diversi. Data l'esperienza media degli end-user, metti in automatico tutto in minuscolo, sia alla registrazione che al login.

Previeni l'inserimento di nomi utenti complicati...solo lettere e numeri

if(eregi("[^0-9a-z_\-]",$username)) return false;

login: vedi il secondo post, campo nome utente+pwd, all'invio del form verifichi i dati (usando la classe se ne fai una, o funzioni), scrivi le variabili di sessione per registrare l'accesso, e basta!

Per l'amministrazione: si tratta per lo più di fare l'interfaccia....ricordati che se salvi SOLO l'md5 delle pwd sul database, una volta che l'utente ha perso la password puoi solo crearne una nuova! Anche qui, usando una classe ad hoc, lavori più velocemente.

ricerca rapida su google: http://www.finalwebsites.com/snippets.php?id=10, una classe utente bella e fatta...non l'ho mai provata...ma dagli un'occhiata per vedere un esempio completo!

Se guardi sul mio sito (vedi firma, poi premi accedi) io uso ajax per dare una buona user experience...e perchè i miei utenti sono obbligati ad avere JS attivo  8)...una volta fatto il sistema puoi anche 'migliorarlo' con questi sistemi!

 :bye:

risposto 9 anni fa
robertomigli
X 0 X

ehm, ragazzi, non è che ecco, non so come dirvelo ma non potreste aiutarmi passo passo nella creazione degli script?

risposto 9 anni fa
vecchia
X 0 X

ehm, ragazzi, nessuno ha voglia?

risposto 9 anni fa
vecchia
X 0 X

il problema è che chiedi di fare la parte di un sito.......non ci vogliono pochi minuti.

inizia a leggere i link che ti ho suggerito, costruisci qualcosa e partiamo da quel punto - anche per capire il tuo livello! Da 0 così è come chiedere di fare il lavoro ad altri  :'(

risposto 9 anni fa
robertomigli
X 0 X

forse avete ragione... ora sto progettando box di login ma mi serve l'aiuto per il codice php...

risposto 9 anni fa
vecchia
X 0 X

eccomi qui dopo tantooooo tempo con il problema del login... Allora, ecco quello che sono riuscito a fare:

<?php
// Recupero i dati del form di login inviato
$userUtente = addslashes($_POST['utente']);
$passUtente = addslashes($_POST['password']);

if($userUtente == "") {
   $erroreUtente = "1";
}
else if($passUtente == "") {
   $errorePassword = "1";
}

$sommaErrori = $erroreUtente + $errorePassword;

if(!$sommaErrori > 0) {
   require 'configurazione/configurazione.php';
   require 'funzioni/funzione_connessione.php';
   
   // Stringa SQL per l'esecuzione della query
   $stringaSQL = "SELECT * FROM utenti WHERE User_Utente = '$userUtente' AND Password = '$passUtente'";
   
   // Eseguo la stringa sopra citata
   $risultatoQuery = mysql_query($stringaSQL);
   
   if(mysql_num_rows($risultatoQuery > 0)) {
      header("Location: index.php");
   }
   else {
      header("Location: index.php?errore=4");
   }
   
   // Libero la memoria dai record estratti
   mysql_free_result($risultatoQuery);
   
   // Chiudo la connessione al database
   mysql_close();
}
else {
   header("Location: index.php?errore=1");
}
?>

ma naturalmente ci sono parecchi errori. Ecco:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

Warning: Cannot modify header information - headers already sent by...

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource

Sembra che non esegua la query ma non so perchè

risposto 9 anni fa
vecchia
X 0 X

non la esegue perché non hai creato la connessione al DB

risposto 9 anni fa
Xscratch
X 0 X

no, la connessione c'è nel file che includo tramite require. Ho risolto due errori:

if(mysql_num_rows($risultatoQuery > 0)) {

deve essere:

if(mysql_num_rows($risultatoQuery) > 0) {

e quindi rimane un solo errore che pero' proprio non capisco:

Warning: Cannot modify header information - headers already sent by...

l'errore sta nella riga:

header("Location: index.php");
risposto 9 anni fa
vecchia
X 0 X

hai ragione, non avevo visto i require perché solitamente io li metto all'inizio degli scripts

un header HTTP deve essere inviato prima di qualsiasi output...

quell'errore capita quando non rispetti questa condizione

controlla che non ci sia nessun echo, print o quant'altro prima di quella riga

basta anche uno spazio prima dell tag di apertura <?

risposto 9 anni fa
Xscratch
X 0 X

acciderbola, il codice della pagina è tutto lì e io non vedo nè print nè echo... Ci sono però tre header lcoation... :'(

risposto 9 anni fa
vecchia
X 0 X

ovviamente contano anche i due files inclusi...

comunque è buona norma mettere anche un exit() dopo aver inviato gli headers

risposto 9 anni fa
Xscratch
modificato 9 anni fa
X 0 X

oddio... a me non pare di trovare niente... faccio prima a fare il redirect con javascript...

risposto 9 anni fa
vecchia
X 0 X

allora, visto che ho assoluto bisogno del php per fare il redirect a quanto pare sono costretto a fare il location. Per ora ho ricontrollato tutte le pagine e non mi è parso di trovare niente ma... Intanto per provare il login ho messo al posto dell'header un echo solo che mi dà sempre il solito messaggio di campo non compilato anche se effettivamente i campi lo sono. Il codice è quello di prima...

Grazie

risposto 9 anni fa
vecchia
X 0 X

rettifico tutto... Funziona a meraviglia, avevo solo sbagliato a mettere due variabili :-[

Resta comunque il problema dell'header location

risposto 9 anni fa
vecchia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda