DISQUS

DISQUS Hello! Informatica Friuli is using DISQUS, a powerful comment system, to manage its comments. Learn more.

Community Page

Informatica Friuli

Informazioni, tecnologia, libertà digitale, SEO, marketing e comunicazione… chiavi in mano
Jump to original thread »
Author

PHP tutorial - Come creare un semplice sistema di login

Started by king_hack · 9 months ago

Questo script è composto da 4 file:
1. main_login.php
2. checklogin.php
3. login_success.php
4. logout.php
Procedimento.
1- Noi abbiamo utilizzato un database chiamato test, in cui abbiamo creato un tabella chiamata members.
Questo è il codice sql per creare la tabella: ... Continue reading »

24 comments

  • Manca un elemento fondamentale nello script main_login.php

    Infatti senza un prima di Member Login ed il relativo tag di chiusura dopo lo script non esegue nessuna autenticazione.

    Ciao
  • ovviamente tutti i tag che ho messo non vengono visualizzati anche se ho usato i tag prima e dopo il codice che ho inserito. Riprovo a fare il commento usando però il tag
  • ok la tua form di commento non accetta nessun tag. :@

    In poche parole volevo dire che, senza un tag form con attributi action="checklogin.php" method="post" che racchiude tutta la table di immissione nome utente e password, lo script non esegue nessuna autenticazione.

    Scusami per i commenti precedenti
  • Ciao,
    lo script php funzionava, fino a quando è stato scritto qui.
    Purtroppo l'editor a nostra disposizione ha cancellato parte di codice.
    Vedo di sistemarlo il prima possibile.

    Ciao
    Roberto
  • Ah ok, grazie mille della delucidazione ;)
  • questo sistema di login nn funziona + con il nuovo php,
    ritorna errori:

    session.bug_compat_42 e session.bug_compat_warn
  • Grazie della segnalaizone Danilo.
    In questo caso spero che Roberto, l' autore della guida, possa aggiornare l' articolo.
  • Saluti a tutti. Il session.bug_compat_warn e il session.bug_compat_42 sono relativi alla registrazione delle variabili di sessione. Nasce dal fatto di aver utilizzato come nome di variabile locale uno già usato per la variabile di sessione.

    $myusername=$_POST['myusername'];
    e
    session_register("myusername");

    E' possibile disabilitare l'errore da php.ini, ma è sicuramente consigliabile utilizzare nomi diversi.

    Inoltre, per evitare un SQl-injection, è necessario modificare la query come segue

    $sql="SELECT * FROM $tbl_name WHERE username='".addslashes($myusername)."' and password='".addslashes($mypassword)."'";

    La funzione addslashes (dovrebbe) applica uno carattere di escape prima di ogni carattere potenzialmente pericoloso per mysql.

    Nello script in questione, utilizzando come utente e come password

    ' OR ''='

    vengo autenticato correttamente, in quanto la query diventa:

    SELECT * FROM $tbl_name WHERE username='' OR ''='' and password='' OR ''=''

    Condizione sempre vera; si viene quindi autenticati,anche se con user e password non "ottimali".
  • Altra cosa carina sarebbe l'adozione della crittografia sulla password.
    Così, in caso di accesso al database, non sarebbe possibile (a meno di verifiche a forza bruta) risalire alla password dell'utente (che poi così è libero di dimenticarla sul post-it sopra monitor !)

    CREATE TABLE `members` (
    `id` INT(4) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(65) NOT NULL DEFAULT '',
    `password` VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;

    --
    -- Dumping data for table `members`
    --

    INSERT INTO `members` VALUES (1, 'admin', md5('admin'));

    In questo modo la password "admin" viene convertita in md5, una stringa di 32 caratteri univoca. Nel caso di "admin" risulta:

    21232f297a57a5a743894a0e4a801fc3

    La query dovrà diventare:
    $sql=”SELECT * FROM $tbl_name WHERE username=’”.addslashes($myusername).”‘ and password=’”.md5($mypassword).”‘”;

    Ora, se un hackerino riuscisse a risalire ad dato salvato (md5), magari con una query malevola che stampasse il contenuto della tabella di autenticazione, comunque non potrebbe accedere, in quanto non esiste (forza bruta a parte!) sistema per passare da md5 a parola chiave.
  • Ragazzi non si capisce niente, il post non è aggiornato e in definitiva questo login inutilizzabile :D
  • L' autore ha qualche problema di tempo e non arriva ad aggiornare l' articolo in quesot periodo: cmq mi prodigherò di recapitargli il messaggio :)
  • Ciao a tutti,
    ho installato lo script ed ho un problema...
    L'autenticazione sembra funzionare solo con la prima pagina login_success.php, ma quando vado a fare la verifica nelle altrepagine che voglio progeggere da autenticazione, vengo rediretto alla pagina di login.
    Dov'è l'inghippo?
    Thanx
    Dany
  • E' stato risistemato il post, ora il codice dovrebbe essere ok a detta dell' autore... se non fosse così potreste sempre pensare di intasargli la casella mail per chiedere supporto lordmarin [chiocciola] gmail.com
  • Magari visto che sono in procinto di un trasloco meglio non intasarmi troppo la mail :P
  • ciao mi serviva una info. devo creare un progetto con un sito che permetta: registrazione utente, login e logout naturalmente... e che se loggato consenta di visualizzare una certa parte in una pagina...come inserire commenti ecc... se ospite invece, solo di visualizzare! inoltre mi serve che le pagine php accettino connessioni da più utenti contemporaneamente. Ho cercato fino ad ora ma trovo esempi (piuttosto complessi oltretutto) che utilizzano solo 1 utente loggato. E' un progetto per scuola, quindi non pretendo super controlli di sicurezza ecc... mi basta la multiutenza e che appunto un utente se loggato può fare azioni, se ospite può solo vedere (oopure non accedere proprio ad alcune pagine).
  • ho dimenticato una domanda: a che serve nella tabella il campo ID? nell'esempio e nella gestione non è mai usato... non è più logico mettere come chiave primaria la username? (visto che non possono esistere username uguali)
  • E' più logico avere una ID come chiave primaria, siccome è possibile consentire la modifica allo username, che causerebbe problemi in quanto chiave esterna di altre tabelle.
  • Allora premetto che ho poche esperienze di programmazione.. questo semplice login lo avevo fatto per un progettino..
    Diciamo che mi era sembrato più logico mettere un ID come chiave primaria anche per quello che riguarda gli indici.. poi se ci sono modi migliori parliamone :)
  • ah ok ho capito xke l' ID è chiave...a me serve metterla come nickname invece perchè voglio che il nick non sia più modificabile in quanto poi ad ogni nick è associata una cartella sul server con lo stesso nome e mi è più facile così :)
  • Bravi e per fortuna era un semple sistema di login?
    E se fiosse stato complicato?
  • @nicola : magari quel "semplice" nel titolo può fuorviare l' idea, ma se ci pensi bene, con un "semplice" copia incolla del codice dal post sopra scritto, hhai la possibilità di avere un sistema già funzionante. Per il resto passo la palla all' autore del post.
  • manca la validazione dell'input, mai sentito parlare di SQL Injection? Quando la scelta e' fra le cose facili e le cose fatte bene...
  • e infatti è un "semplice" sistema di login, non un "sicuro" sistema di login.
    E per Nicola che non lo considera troppo semplice direi di tener presente che non è mai troppo tardi per cambiare e rinnovarsi ...
  • ciao a tutti questo sistema di login non funzona in nessun modo
    ho testato tutto ma non va
    errori: manca lo script registrayione

Add New Comment

Returning? Login