{"id":343,"date":"2011-04-28T15:15:49","date_gmt":"2011-04-28T14:15:49","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=343"},"modified":"2016-01-08T16:24:18","modified_gmt":"2016-01-08T15:24:18","slug":"php-creare-una-login-sicura-e-funzionale-usando-i-cookies","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/343\/php-creare-una-login-sicura-e-funzionale-usando-i-cookies\/","title":{"rendered":"PHP &#8211; Creare una login sicura e funzionale usando i cookies"},"content":{"rendered":"<p>Quando si crea un&#8217;area di amministrazione, dove un utente qualsiasi pu\u00f2 accedere, \u00e8 indispensabile creare la pagina tenendo conto di due fattori principali:<br \/>\n&#8211; <strong>evitare le query-injections<\/strong>, cio\u00e8 rendere la vita difficile a eventuali crackers che inviino un codice dannoso che potrebbe intaccare il nostro database<br \/>\n&#8211; <strong>rispettare la privacy e la sicurezza dell&#8217;utente<\/strong>, criptandogli la password e stabilendo un tempo massimo in cui l&#8217;area di amministrazione resti &#8220;aperta&#8221;, per impedire che l&#8217;utente distratto lasci libero accesso a eventuali malintenzionati che usano il suo computer<\/p>\n<p>In questo tutorial vedremo come creare <strong>una semplice login facendo uso dei cookies<\/strong>, dove salvare i dati (username e password dell&#8217;utente). Vedremo inoltre quali sono l<strong>e funzioni da usare per controllare i dati inviati<\/strong>.<br \/>\nIn questo esempio di base, si presuppone che gli utenti siano gi\u00e0 salvati in un database e che le loro informazioni siano contenute nei tre campi <em>id<\/em>, <em>username<\/em> e <em>password<\/em>. Il campo password contiene la password dell&#8217;utente criptata con l&#8217;algoritmo md5. Mostreremo solo il codice necessario: eventuali controlli aggiuntivi e la grafica sono a vostra discrezione.<!--more--><\/p>\n<p><em>Nota<\/em>: ricordo che la password andrebbe criptata con un algoritmo pi\u00f9 efficace dell&#8217;md5. In questo articolo, comunque, non stiamo badando granch\u00e9 alla sicurezza, ma solo alla procedura.<\/p>\n<p>Nel caso (pi\u00f9 semplice) che i dati per accedere alla login siano &#8220;fissi&#8221;, cio\u00e8 immagazzinati in variabili nella pagina, alcune delle funzioni che andiamo a vedere saranno inutili e quindi dovrete riadattarle di conseguenza.<\/p>\n\n        <h2>Download script<\/h2>\n        <div style=\"float:left; width:100%; margin-top:60px; margin-bottom:40px;\">\n        <div style=\"float:left; width:100px;\"><img decoding=\"async\" title=\"[PHP] Login con cookie\" src=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-content\/themes\/sirbit\/images\/redirect_icon.png\" alt=\"[PHP] Login con cookie\" \/><\/div>\n        <div style=\"float:left; width:350px; padding-top:30px; font-size:14px;\"><strong><a title=\"[PHP] Login con cookie\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/code\/php-login-con-cookie\/\">Pagina diretta alla scheda e al download del codice<\/a><\/strong><\/div>\n        <\/div>\n        <div style=\"clear:both;\"> <\/div>\n<h2>Il form di login<\/h2>\n<p>Il <strong>form di login<\/strong> avr\u00e0 questo aspetto (la grafica potete adattarla a piacimento con i fogli di stile):<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"html4strict\" style=\"font-family: monospace;\"><span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">form<\/span> <span style=\"color: #000066;\">action<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"\"<\/span> <span style=\"color: #000066;\">method<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"post\"<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">div<\/span> <span style=\"color: #000066;\">class<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"login_campo\"<\/span>&gt;<\/span>\r\n\t\tUsername:<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">br<\/span> <span style=\"color: #66cc66;\">\/<\/span>&gt;<\/span>\r\n\t\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">input<\/span> <span style=\"color: #000066;\">type<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"text\"<\/span> <span style=\"color: #000066;\">class<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"campo\"<\/span> <span style=\"color: #000066;\">name<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"username\"<\/span> <span style=\"color: #66cc66;\">\/<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #66cc66;\">\/<\/span><span style=\"color: #000000; font-weight: bold;\">div<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">div<\/span> <span style=\"color: #000066;\">class<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"login_campo\"<\/span>&gt;<\/span>\r\n\t\tPassword:<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">br<\/span> <span style=\"color: #66cc66;\">\/<\/span>&gt;<\/span>\r\n\t\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">input<\/span> <span style=\"color: #000066;\">type<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"password\"<\/span> <span style=\"color: #000066;\">class<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"campo\"<\/span> <span style=\"color: #000066;\">name<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"password\"<\/span> <span style=\"color: #66cc66;\">\/<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #66cc66;\">\/<\/span><span style=\"color: #000000; font-weight: bold;\">div<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">div<\/span> <span style=\"color: #000066;\">class<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"login_campo\"<\/span>&gt;<\/span>\r\n\t\t<span style=\"color: #009900;\">&lt;<span style=\"color: #000000; font-weight: bold;\">input<\/span> <span style=\"color: #000066;\">type<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"submit\"<\/span> <span style=\"color: #000066;\">name<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"invia\"<\/span> <span style=\"color: #000066;\">value<\/span><span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff0000;\">\"Accedi\"<\/span>&gt;<\/span>\r\n\t<span style=\"color: #009900;\">&lt;<span style=\"color: #66cc66;\">\/<\/span><span style=\"color: #000000; font-weight: bold;\">div<\/span>&gt;<\/span>\r\n<span style=\"color: #009900;\">&lt;<span style=\"color: #66cc66;\">\/<\/span><span style=\"color: #000000; font-weight: bold;\">form<\/span>&gt;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2>I controlli dopo l&#8217;invio<\/h2>\n<p>Una volta che l&#8217;utente ha inserito i dati e inviato il form, <strong>facciamo i dovuti controlli<\/strong>. Il codice seguente andrebbe messo nella stessa pagina e prima del form che abbiamo appena visto: infatti, nel caso di errore e qualora lo riteniate necessario, \u00e8 possibile riportare i dati inseriti dall&#8217;utente all&#8217;interno degli input o mostrare un messaggio di errore. Nel nostro esempio ignoriamo questa possibilit\u00e0, ma \u00e8 bene tenerla presente.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000088;\">$error<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">isset<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'invia'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/recupero i dati dell'utente, se esiste<\/span>\r\n\t<span style=\"color: #000088;\">$q<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"select * from utenti where username='\"<\/span><span style=\"color: #339933;\">.<\/span>pulisci<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'username'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"' and password='\"<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #990000;\">md5<\/span><span style=\"color: #009900;\">(<\/span>pulisci<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'password'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"'\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$query<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">mysql_query<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$q<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$db<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/se i dati inviati al form corrispondono a un utente, allora mi loggo, creo il cookie di sessione e vado a index.php<\/span>\r\n\t<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">mysql_num_rows<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$query<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">&gt;<\/span><span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t\t<span style=\"color: #000088;\">$row<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">mysql_fetch_array<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$query<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/immagazzinano le informazioni dell'utente in un array<\/span>\r\n\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"id\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"id\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"username\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"username\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"password\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"password\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/setto la durata del cookies a una settimana<\/span>\r\n\t\t<span style=\"color: #000088;\">$time_cookie<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #cc66cc;\">3600<\/span><span style=\"color: #339933;\">*<\/span><span style=\"color: #cc66cc;\">24<\/span><span style=\"color: #339933;\">*<\/span><span style=\"color: #cc66cc;\">7<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #990000;\">setcookie<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"session\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"username\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">'_&amp;&amp;_'<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"password\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #990000;\">time<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">+<\/span><span style=\"color: #000088;\">$time_cookie<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/vado a index.php<\/span>\r\n\t\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"location: index.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/nessuna corrispondenza con gli utenti: non mi loggo e ritorno al form<\/span>\r\n\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #b1b100;\">else<\/span>\r\n\t\t<span style=\"color: #000088;\">$error<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>I commenti spiegano gran parte del codice. Riassumendo, cosa abbiamo fatto?<\/p>\n<p>1) Cerco nel database l&#8217;utente che ha username e password pari a quelli inseriti dall&#8217;utente. Se lo trovo, allora posso settare il cookie di sessione. Da notare che <strong>prima del controllo cripto la password<\/strong> inviata dall&#8217;utente in md5, in modo da poterla confrontare nel database. La funzione <em>pulisci()<\/em>, che vediamo tra poco, serve a evitare il passaggio di caratteri dannosi per il database.<\/p>\n<p>2) <strong>Immagazzino i dati di accesso dell&#8217;utente<\/strong> nell&#8217;array $session[]. In questo modo li avr\u00f2 sempre a disposizione nel caso di bisogno (per esempio per messaggi di benvenuto). Qua va comunque a vostra discrezione: io consiglierei di immagazzinare per lo meno l&#8217;id dell&#8217;utente in una variabile. In alternativa, sar\u00e0 possibile recuperare i dati direttamente dai cookies, in un modo meno immediato.<br \/>\n<em>Nota<\/em>: i dati potrebbero essere salvati in variabili di sessioni (per esempio $_SESSION[&#8220;username&#8221;]), anzich\u00e9 nell&#8217;array visto sopra ($session[]). La scelta \u00e8 a discrezione del programmatore.<\/p>\n\n<p>3) <strong>Creo il cookies di nome &#8220;session&#8221;<\/strong>, che contiene l&#8217;username e la password dell&#8217;utente. Il cookies ha una validit\u00e0 di una settimana (60*60*24*7 secondi), dopodich\u00e9 l&#8217;utente si deve loggare di nuovo. E&#8217; chiaro che se l&#8217;utente canceller\u00e0 manualmente il cookie di sessione prima della scadenza, dovr\u00e0 essere ricreato con una nuova login.<\/p>\n<p>4) Reindirizzo l&#8217;utente alla pagina <em>index.php<\/em>, dove avr\u00e0 accesso al pannello di amministrazione.<\/p>\n<p>Vediamo adesso la <strong>funzione per eliminare gli eventuali caratteri pericolosi<\/strong> inviati in fase di login, pi\u00f9 o meno consapevolmente dall&#8217;utente:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000000; font-weight: bold;\">function<\/span> pulisci<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\";\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\":\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\",\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"'\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"*\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"?\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"=\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"&amp;\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"%\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"$\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"&lt;\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"&gt;\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"#\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #000088;\">$login<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #000088;\">$login<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2>Il controllo del cookie di sessione<\/h2>\n<p>Il tutorial per il controllo della login \u00e8 concluso. Prima di chiudere, per\u00f2, un&#8217;ultima annotazione: una volta settati i cookies, <strong>come funziona il controllo dell&#8217;area di amministrazione<\/strong>? In altre parole, come ci assicuriamo che il cookies sia valido e che l&#8217;utente abbia i permessi per accedere?<br \/>\nCi viene in aiuto un&#8217;altra funzione, che deve essere richiamata in ogni pagina:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #666666; font-style: italic;\">\/\/funzione per il controllo dei cookies<\/span>\r\n<span style=\"color: #000000; font-weight: bold;\">function<\/span> controllo_cookie<span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t<span style=\"color: #000000; font-weight: bold;\">global<\/span> <span style=\"color: #000088;\">$db<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">isset<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_COOKIE<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'session'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/prendo username e md5(password) presente nel cookie<\/span>\r\n\t\t<span style=\"color: #000088;\">$tmp<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">split<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"_&amp;&amp;_\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$_COOKIE<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'session'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">count<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$tmp<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">!=<\/span><span style=\"color: #cc66cc;\">2<\/span><span style=\"color: #009900;\">)<\/span>\r\n\t\t\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/confronto username e password del cookie con il database<\/span>\r\n\t\t<span style=\"color: #000088;\">$query<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">mysql_query<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"select * from utenti where username='\"<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #000088;\">$tmp<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"' and password='\"<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #000088;\">$tmp<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #cc66cc;\">1<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"'\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$db<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t\t<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">mysql_num_rows<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$query<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">&gt;<\/span><span style=\"color: #cc66cc;\">0<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t\t\t<span style=\"color: #000088;\">$row<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">mysql_fetch_array<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$query<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t\t<span style=\"color: #666666; font-style: italic;\">\/\/immagazzinano le informazioni dell'utente in un array<\/span>\r\n\t\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"id\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"id\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"username\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"username\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t\t<span style=\"color: #000088;\">$var_session<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"password\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000088;\">$row<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"password\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #b1b100;\">else<\/span>\r\n\t\t\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #b1b100;\">else<\/span>\r\n\t\t<span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Nell&#8217;ordine:<br \/>\n1) Controllo l&#8217;esistenza del cookie di nome &#8220;session&#8221;.<br \/>\n2) Immagazzino l&#8217;username e la password dell&#8217;utente (che erano presenti nel cookie, separati dalla stringa &#8220;_&amp;&amp;_&#8221;) in un array. In questo modo posso estrarli agevolmente.<br \/>\n3) Controllo che <strong>l&#8217;utente con i dati estratti dal cookie sia esistente nel database<\/strong>.<\/p>\n<p>Adesso non dobbiamo fare altro che eseguire il controllo tramite la funzione, all&#8217;inizio di ogni pagina e prima di qualsiasi altra cosa. Se il controllo ha successo (il cookie \u00e8 trovato e la corrispondenza dati-database \u00e8 dimostrata), permetto all&#8217;utente di proseguire. Altrimenti, se il controllo d\u00e0 <em>false<\/em>, reindirizzo l&#8217;utente alla pagina di login:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #339933;\">!<\/span>controllo_cookie<span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"location: login.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #009900;\">}<\/span><span style=\"color: #b1b100;\">else<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/codice da mostrare<\/span>\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Con poche funzioni e l&#8217;uso dei cookies, possiamo creare una login sicura per permettere all&#8217;utente di accedere a un&#8217;area di amministrazione. Ecco come costruire, in pochi passaggi, la base di un pannello di controllo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[4,6,30],"class_list":["post-343","post","type-post","status-publish","format-standard","hentry","category-php-mysql","tag-php","tag-script","tag-sicurezza","cat-78-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/343"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=343"}],"version-history":[{"count":21,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/343\/revisions"}],"predecessor-version":[{"id":2161,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/343\/revisions\/2161"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}