<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1406360360570616594</id><updated>2012-02-21T14:24:23.232+01:00</updated><title type='text'>Web Engineering &amp; Design</title><subtitle type='html'>Questo blog vuole essere un punto di condivisione con la rete delle mie idee e dei miei progetti, un luogo per confrontarsi con altri webmaster, un'opportunità per mettere a disposizione le mie capacità aiutandovi a realizzare i vostri progetti.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-6084837514914076590</id><published>2012-01-15T17:48:00.001+01:00</published><updated>2012-01-16T23:06:06.427+01:00</updated><title type='text'>Librerie Javascript - JQuery</title><content type='html'>Probabilmente molti di voi avranno sentito parlare di "librerie" ma non hanno mai saputo di cosa esattamente si stesse parlando.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Che cos'è una libreria?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Vi rispondo con un esempio:&lt;br /&gt;Fate finta che dobbiate animare un div per spostarlo da sx a dx con un movimento fluido (non netto). Una opzione è quella di dedicare ore e ore per inventarsi sul momento una sequenza di istruzioni in javascript rischiando però di creare un algoritmo funzionante ma molto pesante e non funzionale. L'altra opzione è cercare su internet una libreria ideata proprio per questo. Se siete fortunati troverete una libreria (per esempio) dedicata all'animazione degli oggetti in javascript.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Non dovrete fare altro che salvare il file che vi viene presentato (es. libreriaAnima.js) sul vostro sito. Il file contiene tutte le funzioni che si occupano dello spostamento degli oggetti. Così facendo avete risparmiato ore e ore di lavoro e siete sicuri inoltre di avere un codice flessibile e ben studiato (sempre che la libreria sia di buona qualità). Molto probabilmente per spostare il vostro mitico blocco non dovrete fare altro che scrivere blocco.MiaLibAnim.sposta("destra").&lt;br /&gt;&lt;br /&gt;Oltre al fatto che si risparmia molto tempo nella programmazione perché effettivamente si copiano degli "algoritmi" già fatti, bisogna anche sottolineare che le librerie sono famose perché molto spesso offrono delle funzionalità molto complesse, che non si traducono in qualche decina di riga di codice nativo. La libreria jquery si può dire che quasi sostituisce il linguaggio javascript nativo; infatti oltre a riproporre tutte le funzioni native, mette a disposizione una quantità enorme di funzioni aggiuntive davvero eccezionali.&lt;br /&gt;&lt;br /&gt;Non bisogna sentirsi degli approfittatori oppure dei mezzi incapaci se si utilizzano le librerie, anzi. Utilizzare una libreria è da professionisti, intanto perché se ne conosce l'esistenza, e poi sarebbe davvero da stupidi perdere una quantità abnorme di tempo per crearsi autonomamente il codice per ogni situazione, quando ogni tanto si può fare riferimento a chi ci ha già preceduti facendo per giunta un'ottimo lavoro.&lt;br /&gt;&lt;br /&gt;Riassumendo le caratteristiche delle librerie:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Possono essere scaricate gratuitamente da internet ed utilizzate senza nessuna licenza (il più delle volte).&lt;/li&gt;&lt;li&gt;Offrono funzioni davvero complesse senza dover scrivere neanche una virgola del codice nativo che ne permette il funzionamento.&lt;/li&gt;&lt;li&gt;Diminuzione della quantità di codice da scrivere (vedi jquery --&amp;gt; "Write less, Do More")&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Quali sono le librerie più conosciute?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;In assoluto la più conosciuta, usata e potente è jquery (&lt;a href="http://jquery.com/" target="_blank"&gt;link alla documentazione ufficiale&lt;/a&gt;). Proprio come dice il suo slogan "Write less, Do more", permette di eseguire azioni anche molto complesse scrivendo un numero davvero limitato di istruzioni, molto spesso addirittura in una sola.&lt;br /&gt;&lt;br /&gt;Da ricordare anche MooTools (&lt;a href="http://mootools.net/" target="_blank"&gt;link&lt;/a&gt;), script.aculo (&lt;a href="http://script.aculo.us/" target="_blank"&gt;link&lt;/a&gt;), yahooUI (&lt;a href="http://developer.yahoo.com/yui/" target="_blank"&gt;link&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/div&gt;&lt;div&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-6084837514914076590?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/6084837514914076590/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/librerie-javascript-jquery.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6084837514914076590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6084837514914076590'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/librerie-javascript-jquery.html' title='Librerie Javascript - JQuery'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-8660285345525346035</id><published>2012-01-15T16:33:00.002+01:00</published><updated>2012-02-21T14:24:23.239+01:00</updated><title type='text'>Log Visite - Tracciare i movimenti degli utenti</title><content type='html'>Da poco ho iniziato ad utilizzare un sistema di log che mi ha davvero soddisfatto.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Che cos'è?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;In pratica è un insieme di funzioni php (o qualsiasi altro linguaggio server-side) che interagendo con il database tengono monitorati tutti gli utenti, registrando qualsiasi loro azione nel sito che mi interessi.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;In pratica ho inserito in ogni pagina potenzialmente accessibile la chiamata ad una funzione php che memorizza nel database la visita. Nel mio caso memorizzo indirizzo IP, nome utente (se ha fatto il login), data e ora, pagina di provenienza.&lt;br /&gt;In questo modo si può avere una completa tracciabilità dei visitatori, che si traduce sia in controllo per garantire la sicurezza del portale che in enormi quantità di dati utilizzabili a fini statistici.&lt;br /&gt;&lt;br /&gt;Nel mio sito ho creato anche un sistema di log specifico per il login, in modo da tenere tracciati tutti gli accessi riusciti o meno per avere un maggiore controllo sui tentati furti di account.&lt;br /&gt;&lt;br /&gt;Google pare che faccia un uso massiccio di log, registrando qualsiasi nostra azione. Proprio grazie a questo riesce a presentarci sempre degli annunci straordinariamente mirati.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Ritengo abbastanza inutile postare dei listati per far vedere come creare un sistema del genere perchè è abbastanza scontato. Si tratta di creare una tantum una tabella nel database e in ogni pagina inserire un:&amp;nbsp;&amp;lt;?php funzioneLog(); ?&amp;gt; che prenda i dati necessari e con un INSERT li inserisca nel database. Nulla di più facile.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-8660285345525346035?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/8660285345525346035/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/log-visite.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/8660285345525346035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/8660285345525346035'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/log-visite.html' title='Log Visite - Tracciare i movimenti degli utenti'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-3257192313115080370</id><published>2012-01-13T15:35:00.001+01:00</published><updated>2012-01-16T22:53:46.557+01:00</updated><title type='text'>Struttura base per login</title><content type='html'>&lt;br /&gt;Oggi voglio spiegarvi come costruire un sistema (base) di login molto efficiente e sicuro. In breve tempo pubblicherò post più dettagliati ed approfonditi su idee e tecniche per aumentare la sicurezza del nostro login.&lt;br /&gt;&lt;div&gt;Cercando un po' in giro, il primo modo per impostare un login che trovai consisteva nel creare un file login.php, all'interno del quale erano contenuti username e password degli utenti registrati sotto forma di array. Le credenziali dell'utente che eseguiva il login venivano confrontate con l'array stesso e veniva riportato l'esito del confronto. Paradossalmente la sicurezza di questo metodo è abbastanza alta, perché per aggirarlo bisognerebbe entrare in possesso del sorgente php (leggendo così l'array), il che però implica di dover accedere illegalmente al server dove è hostato il sito, cosa non molto semplice.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Comunque sia è una soluzione ovviamente da escludere, sotto tutti i punti di vista. Il metodo che vi propongo io è il seguente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Creare una tabella nel database inserendo quanti parametri si vuole (nel mio sito ho: id,nome,password,email,tipo,premium,domanda,risposta ecc...)&lt;/li&gt;&lt;li&gt;Creare un file login.php (o se si ha un file del tipo utility.php che contiene tutte le funzioni php del sito, inserire gli algoritmi al suo interno) che semplicemente riceve i dati di login (per esempio username,password), esegue i controlli fondamentali (mancato inserimento dei dati + "escape" generale usando&amp;nbsp;&lt;a href="http://php.net/manual/en/function.htmlspecialchars.php" target="_blank"&gt;htmlspecialchars&lt;/a&gt;&amp;nbsp;) ed infine li confronta con gli utenti registrati. In caso di riscontro setta i valori di sessione che si desidera ed esegue il redirect alla home, oppure riporta gli errori riportati.&lt;/li&gt;&lt;/ul&gt;E' d'obbligo utilizzare i prepared statement (&lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/prepared-statement.html" target="_blank"&gt;link&lt;/a&gt;) per difendersi dalle sql injection (&lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/sql-injection.html" target="_blank"&gt;link&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-3257192313115080370?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/3257192313115080370/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/struttura-base-per-login_13.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/3257192313115080370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/3257192313115080370'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/struttura-base-per-login_13.html' title='Struttura base per login'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-6922583558907255443</id><published>2012-01-13T15:35:00.000+01:00</published><updated>2012-02-21T14:23:55.617+01:00</updated><title type='text'>Prepared statement</title><content type='html'>Per evitare il problema delle sql injections (&lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/sql-injection.html" target="_blank"&gt;link&lt;/a&gt;), ci vengono in aiuto i prepared statement.&lt;br /&gt;Che cosa sono? I prepared statement sono un nuovo metodo di far eseguire una query sql tramite php. Tecnicamente varia leggermente solo il modo in cui vengono dichiarate le query, un piccolo cambiamento che provoca un aumento esponenziale della sicurezza.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Originariamente si componeva la query, inserendo il testo base (comandi sql) che veniva poi completato con i dati degli utenti che arrivavano via get/post.&lt;br /&gt;Esempio (mysql).&lt;br /&gt;&lt;pre class="brush: php"&gt;$result = mysql_query ("UPDATE members SET contenuto = '".$testo."' WHERE username = '".$username."'");&lt;/pre&gt;In questo modo prima venivano integrati nella query i dati inviati e solo dopo la query veniva interpretata. Il risultato era cioè una stringa di testo normalissima che veniva letta da una funzione apposta (mysql__query) che la faceva eseguire come query dal database (vedi esempio sopra).&lt;br /&gt;In questo modo chiunque con un po' di conoscenze in materia poteva in qualsiasi momento inserire delle istruzioni sql al posto (per esempio) dell'username al momento del login, questo sarebbe andato ad integrarsi al resto della query scritta dal programmatore modificandone completamente gli effetti.&lt;br /&gt;&lt;br /&gt;I prepared statement sono stati concepiti&amp;nbsp;in modo che il programmatore possa stabilire in partenza (in fase di programmazione appunto) la query da eseguire sostituendo ai valori che dovrà inserirà l'utente con dei "?". La query viene così interpretata e costituita. Solo dopo, quando viene eseguita, andrà a prendere i dati che occorrono come indicato dal programmatore.&lt;br /&gt;In questo modo la query non potrà essere alterata, perché i dati vengono interpretati come puro testo da inserire nel database, non a caso vengono richiesti dopo " l'interpretazione" della query.&lt;br /&gt;&lt;br /&gt;Ecco alcuni listati per farvi capire per bene il funzionamento. Segue commento conclusivo.&lt;br /&gt;Attenzione, nei seguenti listati è utilizzata l'estensione mysqli.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;INSERT&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$db = new mysqli('[hostname]', '[username]', '[password]', '[database]'); #creo istanza&lt;br /&gt;$stmt = $db-&amp;gt;stmt_init(); #si collega al database&lt;br /&gt;&lt;br /&gt;$stmt-&amp;gt;prepare("INSERT INTO utenti (username,password) VALUES (?, ?)"); #prepara la query&lt;br /&gt;$stmt-&amp;gt;bind_param('ss', $username, $password); #inserisce i parametri al posto dei "?"&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;#dichiaro le variabili indicate sopra come dati&lt;/pre&gt;&lt;pre class="brush: php"&gt;$username=$_POST['username'];&lt;br /&gt;$password=$_POST['password'];&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;$rc = $stmt-&amp;gt;execute(); #eseguo la query. memorizzo in $rc l'esito&lt;br /&gt;&lt;br /&gt;if ( false===$rc ) { echo "Errore di sistema: ".$stmt-&amp;gt;error;} #la query ha generato un errore&lt;/pre&gt;&lt;pre class="brush: php"&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;$stmt-&amp;gt;close(); #chiude la connessione al database&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;&lt;u&gt;SELECT&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$db = new mysqli('localhost', 'projectFede', '', 'my_projectfede'); #creo istanza&lt;br /&gt;$stmt = $db-&amp;gt;stmt_init(); #si collega al database&lt;br /&gt;$stmt-&amp;gt;prepare("SELECT id FROM utenti WHERE email = ?"); #prepara la query&lt;br /&gt;$stmt-&amp;gt;bind_param('s', $email); #inserisco i dati richiesti&lt;br /&gt;$email=$_POST['email']; #dichiaro le variabili che servono&lt;br /&gt;$stmt-&amp;gt;execute(); #eseguo la query&lt;br /&gt;$stmt-&amp;gt;bind_result($id); #organizzo i dati sotto forma di array&lt;/pre&gt;&lt;pre class="brush: php"&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;#metodo consigliato per ciclare tutti i risultati&lt;/pre&gt;&lt;pre class="brush: php"&gt;while($stmt-&amp;gt;fetch()) {&lt;br /&gt;  echo "Id: ".id.". &amp;lt;br/&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$stmt-&amp;gt;close(); #chiude la connessione al database&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: php"&gt;&lt;/pre&gt;Come avrete quindi notato, quando nella query deve intervenire un dato esterno si mette un punto interrogativo "?". Successivamente, si indica attraverso la funzione bind_param, a cosa fanno riferimento quei punti interrogativi. La dichiarazione viene fatta seguendo l'ordine fisico dei punti interrogativi. Prima di tutto bisogna dichiarare se il dato è di tipo numero o stringa (i = integer, s=string); successivamente si elencano (separate da virgola), le variabili dove trovare i dati.&lt;br /&gt;&lt;br /&gt;Esempio:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$stmt-&amp;gt;prepare("SELECT username FROM utenti WHERE id = ? AND username = ?");&lt;br /&gt;$stmt-&amp;gt;bind_param('is', $identificatore, $email);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Come mostra l'esempio, abbiamo inserito "i" nel primo caso perchè l'id è una dato di tipo integer, successivamente "s" perchè l'username è una stringa di testo. Al seguito poi abbiamo segnalato le variabili a cui fare riferimento (l'id verrà presto dalla variabile $identificatore e l'email dalla variabile $email).&lt;br /&gt;&lt;br /&gt;Per concludere quindi, come si è potuto vedere la sintassi rimane praticamente invariata ma la sicurezza aumenta in maniera esponenziale! D'obbligo quindi imparare le novità della sintassi per aumentare il livello di sicurezza dei propri servizi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-6922583558907255443?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/6922583558907255443/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/prepared-statement.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6922583558907255443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6922583558907255443'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/prepared-statement.html' title='Prepared statement'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-4002733450940727435</id><published>2012-01-12T21:22:00.001+01:00</published><updated>2012-01-16T22:52:01.615+01:00</updated><title type='text'>Segnalazione automatica errori Sql</title><content type='html'>Come dicevo nel post sulle sql injections (&lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/sql-injection.html" target="_blank"&gt;link&lt;/a&gt;), personalmente utilizzo un sistema di segnalazione automatica degli errori sql.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Che cos'è?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;In pratica è un sistema automatico per tenere traccia di tutti gli errori sql verificatosi durante la navigazione da parte degli utenti nel nostro sito senza però mostrarli pubblicamente.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;Come funziona?&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Niente di più facile.&amp;nbsp;Semplicemente ogni volta che faccio eseguire una query tramite php, attribuisco un nome preciso alla situazione (es. $situazione = inserimento_dati_registrazione) e, dopo l'esecuzione della query, verifico che sia andata a buon fine o meno. In caso di fallimento catturo l'errore generato e, insieme ad altri dati che mi sono utili (es. nome della situazione, nome dell'utente, orario e indirizzo IP), memorizzo il tutto in una tabella dedicata del database. Nel frattempo mi viene inviata un'email che segnala l'errore avvenuto, riportandomi tutti i dati che mi servono.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Questo meccanismo può essere ovviamente arricchito e gestito come si vuole, per esempio si può evitare di farsi mandare una email decidendo di consultare periodicamente il database (sconsigliato), oppure se si ha realizzato un pannello di amministrazione del sito si può decidere di far comparire un'avviso relativo agli errori generati.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In questo modo si ha una visione molto dettagliata degli errori generati. Questo aiuta sia per continuare ad avere un debug attivo del sito senza disturbare l'utente che per scoprire tentativi di intrusione nel database. In più, potendoli tenere archiviati quanto si vuole nel database, si possono realizzare per esempio anche delle statistiche.&lt;/div&gt;&lt;div&gt;Ognuno poi dia sfogo alla propria fantasia...questo è lo spunto :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-4002733450940727435?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/4002733450940727435/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/come-dicevo-nel-post-sulle-sql.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/4002733450940727435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/4002733450940727435'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/come-dicevo-nel-post-sulle-sql.html' title='Segnalazione automatica errori Sql'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-6484077188774268730</id><published>2012-01-12T21:12:00.003+01:00</published><updated>2012-02-21T14:21:15.162+01:00</updated><title type='text'>Sql Injections</title><content type='html'>Le sql injections sono un argomento importantissimo ma purtroppo non sempre conosciuto da tutti i webmaster.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Cosa sono?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Il concetto delle sql injections è molto semplice, si inviano dei dati al server studiati in modo da interagire illegalmente con il database del sito. Questo avviene senza operare una violazione propriamente detta del sistema, ma l'effetto è uguale, infatti si entra in possesso di informazioni che non sarebbero dovute "fuori-uscire" dal database. Vediamo un esempio per capire meglio.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Quando si effettua il login ad un sito (utilizzando un linguaggio server-side come php), qualsiasi persona preparata potrebbe invece di inserire come username la parola "pippo" una stringa che, una volta integrata nella query sql da eseguire, cambierà il senso dell'intera query riportando magari non uno status che attesta se l'operazione è andata a buon fine o meno, bensì l'elenco completo di tutte le voci presenti nel database. Da non dimenticare anche la devastante eventualità nella quale il male intenzionato decida di eliminare completamente tutto il contenuto del database arrecandovi un danno non banale.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Come difendersi?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Molti siti impiegano tempo e risorse per inventare dei metodi di controllo dei dati in entrata e in uscita per limitare gli effetti estremamente pericolosi e dannosi delle sql injections. Non dico che tutto ciò non debba essere fatto, infatti più è "pulito" e "sicuro" il contenuto dei nostri database e meglio è, però l'unica soluzione reale per risolvere il problema consiste nell'utilizzo dei prepared statement. Per una migliore organizzazione del blog trovare il mio articolo sui prepared statement cliccando su &lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/prepared-statement.html" target="_blank"&gt;questo link&lt;/a&gt;&amp;nbsp;(guida utilizzando mysqli).&lt;br /&gt;&lt;br /&gt;Infine bisogna anche ricordarsi di non mostrare mai e per nessun motivo agli utenti gli errori generati dalle query sql perché,&amp;nbsp;come è ovvio che agli occhi di uno che non ne capisce niente sembrerà arabo, è ugualmente probabile che agli occhi di un'esperto siano l'indicazione di come fare per craccare il database. Ecco perché personalmente è da un po' ditempo che utilizzo un sistema di segnalazione automatica ed interna degli errori sql generati. Se siete curiosi di sapere come funziona, leggete l'articolo dedicato cliccando su &lt;a href="http://ilmioprogettopassopasso.blogspot.com/2012/01/come-dicevo-nel-post-sulle-sql.html" target="_blank"&gt;questo link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-6484077188774268730?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/6484077188774268730/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/sql-injection.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6484077188774268730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/6484077188774268730'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/sql-injection.html' title='Sql Injections'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-3439324768282166183</id><published>2012-01-11T23:02:00.002+01:00</published><updated>2012-01-16T22:48:47.738+01:00</updated><title type='text'>Scelta della piattaforma Hosting</title><content type='html'>Quando ho iniziato ad appassionarmi al web, decisi di cercare uno spazio gratuito di hosting sul quale iniziare a realizzare le mie prime prove. All'inizio non avevo la più pallida idea di cosa significassero le parole come "hosting", "banda mensile","database" e chi più ne ha più ne metta. Ovvio quindi che non avevo assolutamente le competenze per riconoscere un servizio di qualità da uno scadente. Indipendentemente da questo, scelsi di provare per puro caso la piattaforma di Altervista.&amp;nbsp;Ora come ora sono entusiasta della mia scelta.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="fullpost"&gt;Il servizio che offre Altervista (&lt;a href="http://www.altervista.org/" target="_blank"&gt;link&lt;/a&gt;) è assolutamente eccezionale. Ti mette a disposizione gratuitamente uno spazio web perfettamente funzionante con 200 Megabytes di spazio disponibile,&amp;nbsp;1 Gb di banda mensile, un database gestibile con phpmyadmin, un numero davvero consistente di cms e anche il supporto all'ultima versione di php. Ci offre inoltre anche funzionalità automatiche come l'inserimento di un guestbook, toolbar personalizzabile, motore di ricerca interno al sito, feed rss, alias mail, newsletter, chat, favicon editor e infine "cron jobs". A tutto ciò si aggiunge la possibilità di ampliare lo spazio e la banda a disposizione e il numero di query eseguibili all'ora semplicemente pagando davvero pochissimi soldi. In aggiunta anche l'esecuzione dei "cron jobs" (visite programmate a determinate pagine eseguite dai server altervista), backup garantiti, costanti e programmabili. Infine per i meno esperti mette a disposizione diverse funzionalità wysiwyg.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Insomma, un servizio gratuito che mette a disposizione un numero enorme di funzionalità. Pagando un pochino ci fornisce funzioni ancor più avanzate, fino ad arrivare a fornire opzioni al pari di servizi professionali e molto famosi nel web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In poche parole...un'esperienza da provare :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-3439324768282166183?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/3439324768282166183/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/servizio-hosting.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/3439324768282166183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/3439324768282166183'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/servizio-hosting.html' title='Scelta della piattaforma Hosting'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1406360360570616594.post-4500674920907762052</id><published>2012-01-11T22:41:00.001+01:00</published><updated>2012-01-12T14:30:46.380+01:00</updated><title type='text'>Il mio primo post :)</title><content type='html'>Ciao a tutti miei futuri lettori :)&lt;br /&gt;Mi presento, sono un grande appassionato del mondo dell'informatica in generale, attualmente mi sto dilettando nella creazione di siti web.&lt;br /&gt;Questo blog vuole essere un punto di condivisione con la rete delle mie idee e dei miei progetti, un luogo per confrontarsi con altri che condividono la mia stessa passione e anche un'opportunità per mettere a disposizione le mie capacità magari aiutandovi a rendere reale una vostra idea :)&lt;br /&gt;Spero che i contenuti siano di vostro gradimento e che possano anche esservi utili.&lt;br /&gt;&lt;br /&gt;Buona lettura&lt;br /&gt;&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;_________________________________&lt;br /&gt;&lt;br /&gt;Web Engineering &amp;amp; Design&lt;br /&gt;&lt;a href="http://ilmioprogettopassopasso.blogspot.com/" target="_blank"&gt;ilmioprogettopassopasso.blogspot.com&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1406360360570616594-4500674920907762052?l=ilmioprogettopassopasso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ilmioprogettopassopasso.blogspot.com/feeds/4500674920907762052/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/ciaoa-tutti-miei-futuri-lettori.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/4500674920907762052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1406360360570616594/posts/default/4500674920907762052'/><link rel='alternate' type='text/html' href='http://ilmioprogettopassopasso.blogspot.com/2012/01/ciaoa-tutti-miei-futuri-lettori.html' title='Il mio primo post :)'/><author><name>Federico</name><uri>http://www.blogger.com/profile/03864591693131242226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
