1. Home
  2. /
  3. realizzare-un-CMS


Creiamo il login della dashboard del CMS

Ogni cms ha bisogno di un modulo per accedere alla dashboard, quindi proteggiamo l'amministrazione del cms con l'userid e la password, in modo tale che può accedere solo chi vogliamo noi.


 

Creiamo la tabella mysql

Il primo passo è quello di creare il database del sito e relativa tabella utenti dove andremo ad inserire i seguenti campi:

  1. Id: conterrà l'id auto-incrementato dei vari utenti con accesso al cms

  2. username: il nome dell'utente (o più) che ha accesso al login.

  3. Password: la password univoca dell'utente registrato. Questo campo va filtrato usando il comando sha1. Sha1 serve per crittografare la password in modo tale che, se mai qualche intenzionato riuscisse a leggere il campo password questa non potrebbe essere usata, in teoria.


 

Creiamo quindi la tabella all'interno del database login.

CREATE TABLE login (

id INT( 11 ) NOT NULL AUTO_INCREMENT ,

username CHAR( 64 ) NOT NULL ,

password CHAR( 64 ) NOT NULL ,

PRIMARY KEY ( id )

) ENGINE = MYISAM


 

INSERT INTO login (id ,username ,password)

VALUES (NULL , 'utente', sha1( 'password' ) );


 

Creazione della home

La prima pagina del vostro cms sarà ovviamente una pagina di login. Solo nel caso l'utente si connetta e sia autorizzato avrà accesso alla sua sezione. Per fare il form di login creiamo lo scheletro con html e stilizziamo il tutto con i css:


 

<?php include('config.php'); ?>

<!DOCTYPE html> <html <head>

<title>Dashboard</title>

<link href="css/admin.css" rel="stylesheet" type="text/css" /> </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="Accedi"> <a href="../index.php" id="back">Ritorna al sito</a>

</fieldset> </form>

</body>

</html>


 

Creiamo il file config

Come vedete nella prima riga di codice ho incluso il file config.php col quale inseriamo le informazioni. Ecco la struttura di base del file config.php (la cui funzione principale è lo storage delle credenziali per collegarsi al database):

//generali

$sito_internet = "www.nomedeltuosito.it";

 

//URL PER HTACCESS

$base_url = "http://localhost/tuosito";


 

//connessione DB

$host = "localhost";

$db_user = "root";

$db_psw = "";

$db_name = "nomedb";


 

Creazione del file di verifica

A questo punto strutturiamo un file che controlla i dati inseriti nel form : cioè userid e password, se l'utente ha i privilegi. Per farlo creiamo un file verifica.php e mettiamo al suo interno questo codice:

session_start(); //inizio la sessione

//includo i file necessari a collegarmi al db

include(config.php);


 

if(!isset($_SESSION['codice']) && empty($_SESSION['codice'])){

//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 */

$codice=$riga['username'];

} else { $codice =$_SESSION['codice']; }

/* Effettuo il controllo */

if ($codice == 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['codice'] = $codice;


 

/*Redirect alla pagina riservata*/

Include(dashboard.php);


 

} else {


 

/*Username e password errati, redirect alla pagina di login*/


 


 

}

Naturalmente il codice è semplice non è implementata una sicurezza c'è semplicemente un controllo che verifica che è abbastanza semplice il controllo solo dei caratteri di escape e si verifica che il nome e la password inseriti siano uguali a uno dei dati inseriti in tabella.

Se viene trovata una corrispondenza includiamo il file dashboard.php, altrimenti rimanda al form perché non si possiedono i privilegi necessari.

La variabile di sessione codice è aperta nel corso della verifica durante l'accesso.

La sessione indica che l'utente che vuole visualizzare quella pagina HA IL DIRITTO di visualizzarla in quanto si è loggato con successo in precedenza.


 

Prepariamo il file di LogOut

Creiamo un file logout.php e mettiamo al suo interno questo codice:

session_start();

$_SESSION['codice']=0;

session_destroy(); //distruggo tutte le sessioni

include(config.php);


 

header("location: $sito_internet ");

exit();


 

Per richiamare lo script vi basterà creare un link logout al click dell'utente sarà disconnesso!


 

Sicurezza.

Alcune noti importanti sulla sicurezza che dovreste sapere, se volete diventare degli sviluppatori:

A) Sql injection: è una tecnica hacker che usa alcuni caratteri speciali per aprire il codice e rendere i controlli mysql inutili, scardinando pertanto il sistema di login. Per testare il vostro login provate a scrivere:

Username:' or '1' = '1

Password: ' or '1' = '1

Ancora

Username:' or 1=1 -- [spazio vuoto]

Password: [spazio vuoto]

Ci sono anche altre injection per questo è meglio fare controlli più accurati, se non avete voglia almeno fate l'escape dei caratteri (mysql_real_escape_string) eliminando l'apostrofo, il sistema rende illeggibile la seconda parte della query mysql facendo entrare chiunque e con qualsiasi password.

B) Brute Force: è una tecnica hacker che cerca la possibile password per accedere al sistema sfruttando alcuni algoritmi di ricerca. Inserisce caratteri nel form fin quando trova la giusta userid e password!

C) Differenza POST/GET : sono buoni, ma se usate request è meglio.

D) Accesso diretto: se la sessione non viene verificata in tutte le pagine, i dati potrebbero essere visti in chiaro, sempre che il malintenzionato sappia il nome della pagina da aprire (caso remoto, ma possibile).

E) Comunque sappiate che se non avete un server HTTPS, comunque anche se fate controlli ridondanti entrano comunque, clonano la transazione fra pc e server.

Conclusioni

Nel prossimo articolo illustro cosa dobbiamo mettere nella dashboard.

Non vi fermate qui però, continuate a tenervi aggiornati sulle ultime tecniche di sicurezza, per essere sempre un passo avanti, rispetto ai vostri rivali.