DISQUS

Informatica Friuli: PHP tutorial - Come creare un semplice sistema di login

  • Il Fornaio · 2 years ago
    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
  • Il Fornaio · 2 years ago
    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
  • Il Fornaio · 2 years ago
    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
  • lordmarin · 2 years ago
    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
  • Il Fornaio · 2 years ago
    Ah ok, grazie mille della delucidazione ;)
  • danilo · 2 years ago
    questo sistema di login nn funziona + con il nuovo php,
    ritorna errori:

    session.bug_compat_42 e session.bug_compat_warn
  • Davide Tommasin · 2 years ago
    Grazie della segnalaizone Danilo.
    In questo caso spero che Roberto, l' autore della guida, possa aggiornare l' articolo.
  • Dario Tion · 2 years ago
    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".
  • Dario Tion · 2 years ago
    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.
  • Luca · 2 years ago
    Ragazzi non si capisce niente, il post non è aggiornato e in definitiva questo login inutilizzabile :D
  • Davide Tommasin · 2 years ago
    L' autore ha qualche problema di tempo e non arriva ad aggiornare l' articolo in quesot periodo: cmq mi prodigherò di recapitargli il messaggio :)
  • Dany · 2 years ago
    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
  • Davide Tommasin · 1 year ago
    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
  • lordmarin · 1 year ago
    Magari visto che sono in procinto di un trasloco meglio non intasarmi troppo la mail :P
  • Beppe · 1 year ago
    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).
  • Beppe · 1 year ago
    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)
  • mommi · 1 year ago
    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.
  • lordmarin · 1 year ago
    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 :)
  • beppe · 1 year ago
    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ì :)
  • nicola · 1 year ago
    Bravi e per fortuna era un semple sistema di login?
    E se fiosse stato complicato?
  • Davide Tommasin · 1 year ago
    @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.
  • moebius · 1 year ago
    manca la validazione dell'input, mai sentito parlare di SQL Injection? Quando la scelta e' fra le cose facili e le cose fatte bene...
  • br0n2 · 8 months ago
    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 ...
  • techno · 8 months ago
    ciao a tutti questo sistema di login non funzona in nessun modo
    ho testato tutto ma non va
    errori: manca lo script registrayione