• User Attivo

    login

    Buonasera a tutti,

    ho scaricato uno script per eseguire un login, ma non funziona:

    ho dato un occhiata ma non riesco a trovare l'errore;

    lo posto qui nella speranza che qualcuno mi aiuti,

    è composto da 4 file;

    vorrei riuscire a capire come funziona un sistema di login,

    se questo non andasse bene, magari qualcuno di voi può segnalarmene uno.

    ringrazio in anticipo
    buona serata a tutti

    index.php
    [PHP]
    <?php include('config.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>

    <title>login</title>
    

    </head>
    <body>

    <form id="login" action="verifica.php" method="post">
        <fieldset id="inputs">
            <input id="username" name="username" type="text" placeholder="Username" autofocus required>
            <input id="password" name="password" type="password" placeholder="Password" required>
        </fieldset>
        <fieldset id="actions">
            <input type="submit" id="submit" value="Collegati">
        </fieldset>
    </form>
    

    </body>
    </html>
    [/PHP]

    verifica.php
    [PHP]
    <?php
    session_start(); //inizio la sessione
    //includo i file necessari a collegarmi al db con relativo script di accesso
    include("config.php");

    //mi collego
    mysql_select_db("$db_name",$connessione);

    //variabili POST con anti sql Injection
    $username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
    $password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db

    $query = "SELECT * FROM login WHERE username = '$username' AND password = '$password' ";
    $ris = mysql_query($query, $connessione) or die (mysql_error());
    $riga=mysql_fetch_array($ris);

    /*Prelevo l'identificativo dell'utente */
    $cod=$riga['username'];

    /* Effettuo il controllo */
    if ($cod == NULL) $trovato = 0 ;
    else $trovato = 1;

    /* Username e password corrette */
    if($trovato === 1) {

    /Registro la sessione/
    session_register('autorizzato');

    $_SESSION["autorizzato"] = 1;

    /Registro il codice dell'utente/
    $_SESSION['cod'] = $cod;

    /Redirect alla pagina riservata/
    echo '<script language=javascript>document.location.href="privato.php"</script>';

    } else {

    /Username e password errati, redirect alla pagina di login/
    echo '<script language=javascript>document.location.href="index.php"</script>';

    }
    ?>
    [/PHP]

    privato.php
    [PHP]
    <?php
    session_start();
    //se non c'è la sessione registrata
    if (!session_is_registered('autorizzato')) {
    echo "<h1>Area riservata, accesso negato.</h1>";
    echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
    die;
    }

    //Altrimenti Prelevo il codice identificatico dell'utente loggato
    session_start();
    $cod = $_SESSION['cod']; //id cod recuperato nel file di verifica
    ?>
    [/PHP]

    config.php
    [PHP]
    <?php

    //generali

    $sito_internet = "Test";

    $data =(date("d-m-y"));

    $vers = "2.0";

    //URL PER HTACCESS

    //connessione DB

    $host = "localhost";

    $db_user = "root";

    $db_psw = "hal9000";

    $db_name = "studio";

    ?>
    [/PHP]


  • User Attivo

    Che problemi ti da?


  • User Attivo

    Ciao pietro,

    Non mi da errori, da schermata bianca;

    Grazie per la risposta!
    Ciao!


  • User Attivo

    La mancanza di errori probabilmente è perchè il server è settato per non mostrarli.
    A occhio e croce il primo motivo per cui non ti funziona è perchè manca la funzione mysql_connect() per il collegamento al DB che, di conseguenza, rende inesistente la variabile $connessione.

    Ciao,


  • User Attivo

    ciao oslino,

    grazie 1000, ho risolto in altro modo:

    index.php

    [PHP]
    <?php include ("../config.php"); ?>
    <html>
    <head>
    </head>
    <body>

    <?php
    if(isset($_GET['accesso']))
    if($_GET['accesso']=="negato")
    print "<p id='accesso_negato_login'><i class='fa fa-ban'></i> Accesso negato, reinserire le credenziali</p>";
    ?>

    <div id="login">
    <div>
    <i class="fa fa-lock"></i>
    <h1>Area Riservata</h1>
    </div>
    <form action="verifica.php">
    <p><i class="fa fa-user"></i> Username</p>
    <input type="text" name="username" placeholder="Inserici lo Username">
    <p><i class="fa fa-key"></i> Password</p>
    <input type="password" name="password" placeholder="Inserisci la Password">
    <input type="submit" value="Accedi" id="conferma">
    </form>

    </div>

    </body>
    </html>
    [/PHP]

    verifica.php

    [PHP]
    <?php session_start(); ?>
    <?php include("../config.php"); ?>

    <?php
    $sql = "SELECT * FROM generali";
    $ret = mysqli_query( $db, $sql );
    while ($row = mysqli_fetch_assoc($ret)){

    $username_ok = $row['username'];
    $password_ok = $row['password'];
    }
    

    ?>

    <?php
    $username = $_GET['username'];
    $password = sha1($_GET['password']);
    if( $username==$username_ok AND $password==$password_ok )
    {
    $_SESSION['utente']= $password;
    header('location:../home/home.php');
    }
    else{header('location:index.php?accesso=negato');}
    ?>
    [/PHP]

    dopodichè ho un header comune per tutte le pagine della mia area riservata e in testa al documento ho incollato:

    [PHP]
    <?php
    session_start();
    if(!isset($_SESSION['utente'])){
    header('location:../login/index.php');
    }
    ?>
    [/PHP]

    grazie 1000 Oslino per i consigli, sto imparando parecchie cose grazie a questo forum;
    sto facendo un piccolo CMS a scopo didattico; quando lo finisco magari ve lo faccio vedere così mi date consigli sul codice!

    grazie ancora
    buonanotte
    😃


  • User Attivo

    A parte la struttura un po' "contorta" del codice, sei sicuro che funzioni??? Non l'ho provato ma a spanna credo che funzioni solo se nel DB hai una singola riga con un solo utente.
    Il tuo "while" imposta le variabili "xxxx_ok" sempre all'ultimo valore dell'array $row.
    Prova a mettere 2 utenti nel DB e a fare il login con il primo. Secondo me non dovrebbe funzionarti.

    Ciao.


  • User Attivo

    ciao oslino,

    grazie per la risposta, in effetti ho un solo utente; appena ho tempo faccio un po' di test inserendone 2 o 3.

    ma cosa intendi per "struttura un po' contorta"? se mi dai qualche suggerimento aggiusto il codice.

    grazie ancora buona giornata


  • User Attivo

    Io lo farei così
    [PHP]<?php require_once("../config.php"); ?>
    <html>
    <head>
    </head>
    <body>

    <?php
    if(isset($_GET['accesso']) AND $_GET['accesso']=="negato")
    print "<p id='accesso_negato_login'><i class='fa fa-ban'></i>Accesso negato, reinserire le credenziali</p>";
    ?>

    <div id="login">
    <div>
    <i class="fa fa-lock"></i>
    <h1>Area Riservata</h1>
    </div>
    <form action="verifica.php" method="POST">
    <p><i class="fa fa-user"></i> Username</p>
    <input type="text" name="username" placeholder="Inserici lo Username">
    <p><i class="fa fa-key"></i> Password</p>
    <input type="password" name="password" placeholder="Inserisci la Password">
    <input type="submit" value="Accedi" id="conferma">
    </form>

    </div>

    </body>
    </html>
    [/PHP]

    verifica.php

    [PHP] <?php session_start();
    require_once("../config.php");

    $username = mysqli_real_escape_string($db, $_POST['username']);
    $password = sha1($_POST['password']);
    $sql = "SELECT * FROM generali WHERE username='$username' AND password='$password'";
    $ret = mysqli_query( $db, $sql );
    if(mysqli_num_rows($ret) == 1){
    $_SESSION['utente']= 'autorizzato';
    header('location:../home/home.php');
    }else{
    header('location:index.php?accesso=negato');
    }
    ?>
    [/PHP]

    header
    [PHP] <?php
    session_start();
    if(isset($_SESSION['utente']) AND $_SESSION['utente'] == 'autorizzato'){
    header('location:../login/index.php');
    }
    ?>
    [/PHP]
    Ti avrei tolto anche tutti i tag <i> che essendo vuoti non hanno motivo di esistere, ma immagino che ti servano successivamente.

    • I valori delle credenziali è sempre meglio passarle tramite POST altrimenti sarebbero visibili a tutti nella URL;
    • E' bene usare require_once() anzichè include() per file che sono indispensabili al corretto funzionamento del codice (senza config.php il collegamento al DB non funzionerebbe, quindi è essenziale);
    • Controllare sempre tutti gli input dell'utente. mysqli_real_escape_string è solo il minimo dei controlli (contro SQL Injection), sarebbe bene valutare di usare anche strip_tags(), htmlentities(), htmlspecialchars() (contro attacchi XSS) e strlen() (contro attacchi buffer overflow)

    Ciao


  • User Attivo

    Oslino grazie mille degli ottimi consigli,

    sono un principiante alle prime armi, per cui il codice che scrivo non penso sia il massimo però funziona 😄

    seguirò sicuramente i tuoi consigli.

    grazie mille davvero