<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Digital Riot</title>
	<atom:link href="http://fatmatt.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://fatmatt.wordpress.com</link>
	<description>Programmazione e sicurezza delle Web Application</description>
	<lastBuildDate>Fri, 02 Dec 2011 00:48:34 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='fatmatt.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Digital Riot</title>
		<link>http://fatmatt.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://fatmatt.wordpress.com/osd.xml" title="Digital Riot" />
	<atom:link rel='hub' href='http://fatmatt.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Dove sono finito?</title>
		<link>http://fatmatt.wordpress.com/2011/06/08/dove-sono-finito/</link>
		<comments>http://fatmatt.wordpress.com/2011/06/08/dove-sono-finito/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 10:26:25 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=320</guid>
		<description><![CDATA[Non lo so, so che al momento sono all&#8217;università e sto preparando un altro esame.. e sarà così per tutto luglio&#8230;. ho dovuto interrompere la mia mini serie di articoli sulla dependency injection in php e me ne scuso, la &#8230; <a href="http://fatmatt.wordpress.com/2011/06/08/dove-sono-finito/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=320&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Non lo so, so che al momento sono all&#8217;università e sto preparando un altro esame.. e sarà così per tutto luglio&#8230;. ho dovuto interrompere la mia mini serie di articoli sulla dependency injection in php e me ne scuso, la riprenderò il prima possibile . In compenso potete <strong>forkare</strong> una <a title="qoo framework preliminare" href="http://code.google.com/p/qoo-framework/">versione preliminare di qoo framework</a> &#8220;funzionante&#8221; o forse dovrei dire funzionale, ci sono alcune classi di troppo ma i moduli core e controller sono completi.</p>
<p>Nel frattempo vorrei comunicare a tutti voi il mio sdegno per il popolo italiano che sulla questione nucleare si conferma un popolo di pecore che non sanno pensare con la loro testa e si fanno dire dagli altri cosa devono votare.</p>
<p>Se invece di sventolare i 4 si , si sventolassero documentazioni, pro e contro, riguardanti le possibili scelte quella sarebbe una vera situazione democratica e razionale. Quella attuale è un bombardamento mediatico in cui non c&#8217;è scelta ma obbedienza. Anche i partiti ambientalisti usano il mediatic bombing sulle povere pecore che siamo noi. Siamo alla frutta.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=320&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2011/06/08/dove-sono-finito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>
	</item>
		<item>
		<title>OFF TOPIC: La mia mail a Mediaset (Italia1)</title>
		<link>http://fatmatt.wordpress.com/2011/05/03/off-topic-la-mia-mail-a-mediaset-italia1/</link>
		<comments>http://fatmatt.wordpress.com/2011/05/03/off-topic-la-mia-mail-a-mediaset-italia1/#comments</comments>
		<pubDate>Tue, 03 May 2011 13:06:09 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Off topic]]></category>
		<category><![CDATA[human take control]]></category>
		<category><![CDATA[italia1 reality]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=315</guid>
		<description><![CDATA[Scusate per l&#8217;off topic, ma non ho saputo resistere. Avete mai avuto dei &#8220;momenti sacri&#8221; all&#8217;interno della vostra giornata? magari momenti in cui fate qualcosa di tremendamente comune, ma che vi rilassa e vi ammorbidisce la vita? Io ne ho &#8230; <a href="http://fatmatt.wordpress.com/2011/05/03/off-topic-la-mia-mail-a-mediaset-italia1/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=315&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Scusate per l&#8217;off topic, ma non ho saputo resistere.</p>
<p>Avete mai avuto dei &#8220;momenti sacri&#8221; all&#8217;interno della vostra giornata? magari momenti in cui fate qualcosa di tremendamente comune, ma che vi rilassa e vi ammorbidisce la vita? Io ne ho uno, ormai da un paio d&#8217;anni: Il caffè dopo pranzo.</p>
<p>Sarà perchè da piccolo ero abituato a gardare Dragon Ball appena finito di mangiare ma ormai nessuno può rovinarmelo, Italia 1 c&#8217;è riuscita per la prima volta: Inserendo Human Take control tra una puntata dei Simpson la successiva <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><a href="http://fatmatt.files.wordpress.com/2011/05/lettera_a_italia1.jpg"><img class="aligncenter size-medium wp-image-316" title="Lettera_a_Italia1" src="http://fatmatt.files.wordpress.com/2011/05/lettera_a_italia1.jpg?w=300&#038;h=290" alt="" width="300" height="290" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/315/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=315&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2011/05/03/off-topic-la-mia-mail-a-mediaset-italia1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2011/05/lettera_a_italia1.jpg?w=300" medium="image">
			<media:title type="html">Lettera_a_Italia1</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency Injection in PHP parte 2: Container</title>
		<link>http://fatmatt.wordpress.com/2011/05/01/dependency-injection-in-php-parte-2-container/</link>
		<comments>http://fatmatt.wordpress.com/2011/05/01/dependency-injection-in-php-parte-2-container/#comments</comments>
		<pubDate>Sun, 01 May 2011 14:05:16 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[dependency injection]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=305</guid>
		<description><![CDATA[La settimana scorsa avevo pubblicato un articolo introduttivo alla dependency injection; questa volta faremo un passo avanti  definendo un Container, ovvero una classe il cui scopo è quello di contenere i nostri oggetti e di permettere di recuperarli in modo &#8230; <a href="http://fatmatt.wordpress.com/2011/05/01/dependency-injection-in-php-parte-2-container/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=305&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La settimana scorsa avevo pubblicato un <a title="introduzione" href="http://fatmatt.wordpress.com/2011/04/26/dependency-injection-in-php-introduzione/" target="_blank">articolo</a> introduttivo alla dependency injection; questa volta faremo un passo avanti  definendo un Container, ovvero una classe il cui scopo è quello di contenere i nostri oggetti e di permettere di recuperarli in modo pratico.</p>
<p>Un primo container primitivo è un oggetto dotato di due metodi set() e get() i quali permettano l&#8217;accesso alle istanze rilevanti per la nostra applicazione:</p>
<pre>class Container
{
   protected $_Data = array();
   public function get($item_name)
   {
      if (isset($this-&gt;_Data[$item_name]) )
         return $this-&gt;_Data[$item_name];
      return null;
   }
   public function set($item_name,$item)
   {
      $this-&gt;_Data[$item_name] = $item;
   }

}</pre>
<p>Questo può sembrare triviale ma in realtà è tutto ciò di cui abbiamo bisogno! : Grazie al container possiamo dedicare una parte dell&#8217;applicazione, che chiameremo bootstrapping, alla creazione delle istanze di oggetti che utilizzeremo in altri punti dell&#8217;esecuzione.</p>
<pre>$connection = new MysqlConnection($host,$user,$password,$db);
$db = new Database($connection);

$logger = new TxtLogger('myfile.txt');

$view = new View('master');

$container = new Container();
$container-&gt;set('database',$db);
$container-&gt;set('logger',$logger);
$container-&gt;set('master_view',$view);</pre>
<p>A questo punto non ci resta che passare l&#8217;istanza di container ai business objects che necessitano delle istanze di database, logger e view per poi poterle riutilizzare:</p>
<pre>
//...
public function businessMethod()
{
   $this-&gt;doAction();
   $this-&gt;container-&gt;get('logger')-&gt;log(' Action done <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ');

   $userDao = new UserDao( $this-&gt;container-&gt;get('database') );
}
</pre>
<p>Per rendere il codice più leggibile potremmo sovrascrivere il magic method __get() in modo da cercare l&#8217;attributo richiesto direttamente nel container:</p>
<pre>
public function __get($name)
{
   if (null !== $this-&gt;container-&gt;get($name) )
   return $this-&gt;container-&gt;get($name);

   throw new BusinessObjectException('Unkown property '.$name);
}
public function anAction()
{
   $this-&gt;database-&gt;query('INSER INTO table VALUES (bla bla bla)');
}
</pre>
<p>Per approfondire il design di un container, vi consiglio di leggere <a href="http://www.slideshare.net/fabpot/dependency-injection-with-php-53" title="slides" target="_blank">queste slides</a> scritte da Fabien Potencier, il creatore di Symfony.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=305&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2011/05/01/dependency-injection-in-php-parte-2-container/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency Injection in php: Introduzione</title>
		<link>http://fatmatt.wordpress.com/2011/04/26/dependency-injection-in-php-introduzione/</link>
		<comments>http://fatmatt.wordpress.com/2011/04/26/dependency-injection-in-php-introduzione/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 10:29:46 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[dependency injection]]></category>
		<category><![CDATA[patterns]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=291</guid>
		<description><![CDATA[Quando ti trovi di fronte ad un progetto che utilizza di un buon numero di classi e istanze, serve un piano d&#8217;attacco. Non puoi semplicemente cominciare a scrivere,  altrimenti è molto probabile che, al momento della verità (Il testing), arrivino &#8230; <a href="http://fatmatt.wordpress.com/2011/04/26/dependency-injection-in-php-introduzione/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=291&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quando ti trovi di fronte ad un progetto che utilizza di un buon numero di classi e istanze, serve un piano d&#8217;attacco. Non puoi semplicemente <em>cominciare a scrivere</em>,  altrimenti è molto probabile che, al momento della verità (Il testing), arrivino i problemi. Lo dico con certezza perchè io stesso, fino a qualche tempo fa, ero uno di quelli che iniziava subito a scrivere codice e che poi si ritrovava con mille tab aperte in eclipse per cercare di fixare il problema.</p>
<p>La dependency injection è l&#8217;arte di semplificare la creazione e la configurazione delgi oggetti e recentemente, dopo aver spopolato in ambiente Java, ha cominciato a prendere piede in ambiente php; in questi articoli cercherò di riportare ciò che ho imparato a riguardo.</p>
<p>Pensate di avere un oggetto che dovere utilizzare in diversi punti dell&#8217;applicazione e che per essere utilizzato ha bisogno di un minimo di configurazione, ad esempio:</p>
<pre>/**
*   Nota : pensiamo che il Device non
*   l'abbiamo scritto noi, ma che stiamo utilizzando
*   classi di terze parti altrimenti avremmo potuto
*   modificare il costruttore del device e
*   scrivere new Device($logger,$request)
*/

$device = new Device();
$logger = new XmlLogger();
$logger-&gt;prepare('path/to/file.xml');
$device-&gt;setLogger($logger);
$device-&gt;setRequest(HttpRequest::create()  );
$response = $device-&gt;doYourWork();</pre>
<p>Prima di riuscire a fare il suo lavoro, il device ha bisogno di alcune righe di preparazione e questo ogni volta che in un punto diverso dell&#8217;esecuzione avete bisogno di usare una istanza di device! Diciamo che Device, in questo caso, ha due dipendenze: XmlLogger e HttpRequest.</p>
<p>Premesso che eviterò di usare stati globali come la peste (per maggiori informazioni leggete <a title="Google Testing Blog" href="http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html" target="_blank">qui</a>) e quindi qualsiasi forma di Singleton, scrivere quel codice di configurazione ogni volta che si vuole chiamare <em>doYourWork()</em> potrebbe essere una grossa seccatura, specialmente se Device fosse più complesso.</p>
<p>Una prima soluzione ci è data dalla Dependency injection: scriviamo un Container:</p>
<pre>class DeviceContainer
{
public function getDevice()
{
   $this-&gt;device = new Device();
   $logger = new XmlLogger();
   $logger-&gt;prepare('path/to/file.xml');
   $this-&gt;device-&gt;setLogger($logger);
   $this-&gt;device-&gt;setRequest(HttpRequest::create()  );
   return $this-&gt;device;

}
}</pre>
<p>Ora, ogni volta che avremo bisogno di utilizzare il Device, dobbiamo solamente chiamare il metodo getDevice() della classe container ed otterremo una istanza correttamente configurata :</p>
<pre>class DeviceUserA
{
   function work()
   {
       $container = new DeviceContainer();
       $device = $container-&gt;getDevice();
       $device-&gt;doYourWork();
    }

}</pre>
<p>Questa soluzione è ancora poco flessibile perchè potreste necessitare all&#8217;interno della vostra applicazione di diversi tipi di device ognuno con una configurazione diversa. Dobbiamo modificare il nostro DeviceContainer:</p>
<pre>class DeviceContainer
{
public function getDeviceA()
{
   if (null !== $this-&gt;device_a)
      return $this-&gt;device_a
   $this-&gt;device_a = new DeviceA();
   $logger = new XmlLogger();
   $logger-&gt;prepare('path/to/file.xml');
   $this-&gt;device_a-&gt;setLogger($logger);
   $this-&gt;device_a-&gt;setRequest(HttpRequest::create()  );
   return $this-&gt;device_a;

}
public function getDeviceB()
{
   if (null !== $this-&gt;device_b)
      return $this-&gt;device_b

   $this-&gt;device_b = new DeviceB();

   $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
   $user = 'dbuser';
   $password = 'dbpass';
   $connection = new PDO($dns,$user,$password);
   $logger = new MysqlLogger($connection);

   $this-&gt;device_b-&gt;setLogger($logger);
   $this-&gt;device_b-&gt;setRequest(HttpRequest::create()  );
   return $this-&gt;device_b;

}

}</pre>
<p>Potete notare che ogni metodo getDeviceX() ha due righe di codice che consentono di non reistanziare l&#8217;oggetto ogni volta<br />
ma di riutilizzare istanze già create dal container.</p>
<p>Per questo articolo è tutto, nel prossimo vedremo come scrivere un container che funzioni in ogni situazione (o quasi) senza bisogno di modificare la classe container.</p>
<p>Ora torno a lavorare a <a href="http://qooframework.blogspot.com" target="_blank">qoo framework</a>, non vedo l&#8217;ora di pubblicarlo ed essere criticato <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/291/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=291&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2011/04/26/dependency-injection-in-php-introduzione/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>
	</item>
		<item>
		<title>Nuovo progetto: qoo framework</title>
		<link>http://fatmatt.wordpress.com/2011/04/07/nuovo-progetto-qoo-framework/</link>
		<comments>http://fatmatt.wordpress.com/2011/04/07/nuovo-progetto-qoo-framework/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 13:30:37 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Progetti]]></category>
		<category><![CDATA[qoo framework]]></category>
		<category><![CDATA[easy-to-use]]></category>
		<category><![CDATA[flexible]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[light]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=277</guid>
		<description><![CDATA[Ebbene si, lo ammetto ho sempre avuto un debole per la programmazione ad oggetti e per il design delle architetture software. Nondimeno ho sempre avuto un debole per i framework php e da circa 4 anni ho sempre scritto collezioni &#8230; <a href="http://fatmatt.wordpress.com/2011/04/07/nuovo-progetto-qoo-framework/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=277&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ebbene si, lo ammetto ho sempre avuto un debole per la programmazione ad oggetti e per il design delle architetture software. Nondimeno ho sempre avuto un debole per i framework php e da circa 4 anni ho sempre scritto collezioni di classi a mano per capire quali idee ci fossero dietro alcuni tra i framework php più famosi.</p>
<p>Recentemente ho deciso che la prossima collezione di classi avrebbe dovuto essere più versatile delle altre e che avrei dovuto utilizzarla per realizzare più applicazioni. Questa decisione, unita al fatto di voler provare a gestire un progetto medio-grande ed Open source mi hanno portato alla &#8216;creazione&#8217; di questo progetto, un framework php5 molto leggero, orientato alla leggibilità del codice ed alla flessibilità di utilizzo. L&#8217; ho chiamato qoo framework.</p>
<p style="text-align:center;"><a href="http://fatmatt.files.wordpress.com/2011/04/qoo_logo.png"><img class="aligncenter size-medium wp-image-278" title="qoo_logo" src="http://fatmatt.files.wordpress.com/2011/04/qoo_logo.png?w=300&#038;h=132" alt="" width="300" height="132" /></a></p>
<p>La prima domanda che potrebbe venirvi in mente è &#8220;Abbiamo bisogno di un nuovo framework?&#8221; dopotutto ce ne sono tantissimi, alcuni dei quali (Zend e Symfony ad esempio) validissimi ed usatissimi, altri (Lithium, interessantissimo) sono emergenti e molto promettenti. Ognuno ha i suoi pro ed i suoi contro, zend e symfony sono incredibilmente potenti ma necessitano di un certo sforzo iniziale per poter rendere produttivo lo sviluppatore. Lithium adotta una architettura particolare che fa l&#8217;occhiolino alla programmazione orientata agli aspetti e Code igniter a volte soffre di eccessiva semplificazione (dal mio punto di vista) che porta a mancanza di eleganza. Eleganza che per me è una caratteristica molto importante quando si tratta di codice php.</p>
<p>Eccomi quindi alla ricerca di un framework elegante.</p>
<p>Qoo framework è ancora in fase di sviluppo, mancano il Data abstraction layer e la parte dedicata alla creazione di API, ma per il momento posso elencarvi le caratteristiche principali che ho voluto e che voglio dare a qoo:</p>
<ul>
<li>Semplicità</li>
<li>Leggerezza</li>
<li>Leggibilità</li>
<li>Flessibilità</li>
<li>Scalabilità</li>
<li>Modularità</li>
</ul>
<p>Le prime tre caratteristiche sono dovute al fatto che sono stanco di vedere e soprattutto di scrivere codice che se non commentato in ogni minimo dettaglio perde di comprensibilità; inoltre, non voglio dover scrivere 2000 righe di codice per fare qualcosa che in php non oo richiederebbe un decimo del codice. Non voglio costringere chi usa il framework ad avere mille file di configurazione e dover sottostare a strettissime regole di interazione tra le componenti. Questo ci porta al quarto punto: flessibilità. Si perchè essendo una webapp un sistema complesso, voglio dare la possibilità di fare la stessa cosa in modi diversi, lasciando libero chi scrive il codice. Per questo in qoo ci sono diversi modi di inizializzare le componenti del sistema e di riutilizzarle in seguito in altri punti dell&#8217;applicazione: non ti piace singleton? Benissimo usa il registry! Non ti piace registry? benissimo usa la dependency injection e la parameter propagation!. Il quinto punto si chiama scalabilità e questo riguarda strettamente l&#8217;architettura mvc stessa di qoo, disegnata per poter essere frammentata in più layer gestiti sotto una struttura gerarchica (spesso ci si riferisce a questa soluzione con l&#8217;acronimo HMVC). Infine &#8220;Modularità&#8221; si riferisce al fatto che l&#8217;implementazione di ogni classe fa si che esse siano debolmente dipendenti le une dalle altre e che le le dipendenze sono gestite tramite metodi get/set.</p>
<p>Seguiranno in futuro altre news, ma per il momento vi lascio alcuni link utili:</p>
<ul>
<li><a href="http://code.google.com/p/qoo-framework/" target="_blank">Google Code repository</a></li>
<li><a href="http://twitter.com/#!/Qoo_framework" target="_blank">Twitter</a></li>
<li><a href="http://qooframework.blogspot.com" target="_blank">Official Blog</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/277/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=277&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2011/04/07/nuovo-progetto-qoo-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2011/04/qoo_logo.png?w=300" medium="image">
			<media:title type="html">qoo_logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Nuova pagina facebook: PHP Programming</title>
		<link>http://fatmatt.wordpress.com/2010/11/09/nuova-pagina-facebook-php-programming/</link>
		<comments>http://fatmatt.wordpress.com/2010/11/09/nuova-pagina-facebook-php-programming/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 19:45:08 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=271</guid>
		<description><![CDATA[Nel poco tempo libero di cui dispongo a causa dell&#8217;università e dello sviluppo di un social site (con relativo framework php) che mi tengono occupatissimo, non riesco a postare articoli interessanti ne inerenti la sicurezza delle web app ne alla &#8230; <a href="http://fatmatt.wordpress.com/2010/11/09/nuova-pagina-facebook-php-programming/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=271&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nel poco tempo libero di cui dispongo a causa dell&#8217;università e dello sviluppo di un social site (con relativo framework php) che mi tengono occupatissimo, non riesco a postare articoli interessanti ne inerenti la sicurezza delle web app ne alla programmazione php in generale.</p>
<p>Per questo ho deciso di aprire una pagina facebook in cui pubblicherò i link interessanti che mi propone il mio feed reader durante la colazione,  con l&#8217;aggiunta di qualche pensiero personale riguardo il php.</p>
<p>Ecco il <a href="http://www.facebook.com/#!/pages/PHP-Programming/161613650546008">link</a> alla pagina, iscrivetevi numerosi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/271/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=271&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2010/11/09/nuova-pagina-facebook-php-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows Vista + Eclipse + Git + Github</title>
		<link>http://fatmatt.wordpress.com/2010/07/03/windows-vista-eclipse-git-github/</link>
		<comments>http://fatmatt.wordpress.com/2010/07/03/windows-vista-eclipse-git-github/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 08:24:44 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Progetti]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Share]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Github]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=266</guid>
		<description><![CDATA[Di recente mi sono stati proposti due progetti davvero interessanti riguardanti il web2.0 per prepararmi al meglio ho deciso di riorganizzare le mie carissime e fidatissime classi php che utilizzo da tempo in un piccolo framework che mi permetta di &#8230; <a href="http://fatmatt.wordpress.com/2010/07/03/windows-vista-eclipse-git-github/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=266&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://cumu.li/assets/2008/10/1/git-logo.png" alt="" width="120" height="209" /></p>
<p>Di recente mi sono stati proposti due progetti davvero interessanti riguardanti il web2.0 per prepararmi al meglio ho deciso di riorganizzare le mie carissime e fidatissime classi php che utilizzo da tempo in un <a href="http://github.com/fatmatto/Flower-Framework">piccolo framework</a> che mi permetta di prototipizzare alcune operazioni comuni.</p>
<p>Come servizio di project hosting mi sono affidato a Github, che come suggerisce il nome utilizza repository Git, ecco quindi i passi da compiere per avere un sistema funzionante:</p>
<ul>
<li>Create un account su <a href="http://github.com">Github.com</a></li>
<li>Create un repository su github.com con il nome del vostro progetto</li>
<li>Seguite <a href="http://help.github.com/win-git-installation/">questa</a> guida per installare Git su sistemi Windows</li>
<li>Aprite Eclipse e nel tab Help cliccate su &#8220;install new software&#8221;, selezionate il repository &#8220;all available site&#8221; e nel filtro di ricerca scrivete Git, dovreste trovare un pacchetto chiamato EGit ed uno chiamato JGit, io ho installato EGit quindi faccio riferimento a quello</li>
<li>Al posto di creare un nuovo progetto su eclipse, andate su File-&gt;Import-&gt;Git-&gt;Projects from Git ed inserite i dati relativi al vostro repository git locale</li>
<li>Importate con il wizard per semplicità</li>
</ul>
<p>A questo punto avete il vostro progetto collegato al repository Git hostato da Github.com, manca solo un piccolo <strong>dettaglio che mi ha creato 5 minuti di panico :</strong></p>
<p>Per qualche motivo, Eclipse cerca di default le vostre chiavi RSA per SSH nella cartella {USER}/ssh invece di {USER}/.ssh . In rete ho trovato due modi per risolvere il problema in windows. Il primo consiglia di creare un link alla directory .ssh e chiamarlo ssh in modo che eclipse la trovi (il comando in questione dovrebbe essere <em>mklink \D .ssh ssh</em>). Il secondo metodo che ha funzionato per me, consiste nel modificare una opzione di eclipse, ovvero andate su <strong>Window-&gt;Preferences-&gt;General-&gt;Network Connection-&gt;SSH2</strong> e mettete il punto davanti alla benedetta directory ssh.</p>
<p>Buon teamwork a tutti <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=266&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2010/07/03/windows-vista-eclipse-git-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://cumu.li/assets/2008/10/1/git-logo.png" medium="image" />
	</item>
		<item>
		<title>Le insidie di WordPress.com : Link Injection</title>
		<link>http://fatmatt.wordpress.com/2009/12/23/le-insidie-di-wordpress-com/</link>
		<comments>http://fatmatt.wordpress.com/2009/12/23/le-insidie-di-wordpress-com/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 14:27:25 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Vulnerabilità]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[link injection]]></category>
		<category><![CDATA[referer]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=232</guid>
		<description><![CDATA[[English Version: here] Chi di voi , come il sottoscritto, fosse un affezionato utente della piattaforma wordpress.com credo sarebbe d&#8217;accordo con me sull&#8217;utilità e la praticità della voce “statistiche” nella gestione dei nostri blog. Essa infatti ci riporta diversi dati &#8230; <a href="http://fatmatt.wordpress.com/2009/12/23/le-insidie-di-wordpress-com/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=232&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>[English Version: <a href="http://mattiaalfieri.blogspot.com/2009/12/threats-behind-wordpresscom-link.html">here</a>]</p>
<p>Chi di voi , come il sottoscritto, fosse un affezionato utente della piattaforma <a href="http://www.wordpress.com/">wordpress.com</a> credo sarebbe d&#8217;accordo con me sull&#8217;utilità e la praticità della voce “statistiche” nella gestione dei nostri blog. Essa infatti ci riporta diversi dati relativi alle visite al nostro blog: Visite giornaliere, notorietà dei nostri articoli, commenti, parole cercate nei motori di ricerca ma soprattutto i  <strong>referer</strong>: ovvero da quale url gli utenti sono giunti nel nostro blog.</p>
<p>Questa funzionalità ci aiuta a capire se i nostri articoli vengono linkati dall&#8217;esterno e in tal caso ci permette di scoprire cosa si dice a proposito di quanto abbiamo scritto.</p>
<div id="attachment_233" class="wp-caption alignleft" style="width: 310px"><a href="http://fatmatt.files.wordpress.com/2009/12/referer.jpg"><img class="size-medium wp-image-233" title="referer" src="http://fatmatt.files.wordpress.com/2009/12/referer.jpg?w=300&#038;h=190" alt="" width="300" height="190" /></a><p class="wp-caption-text">La pagina delle statistiche di questo Blog</p></div>
<p>Alcuni di voi avranno già capito dove voglio andare a parare: Il referer è un campo dell&#8217;header della request HTTP che il browser dell&#8217;utente che raggiunge il nostro blog, scambia con il server in cui il nostro blog è hostato. In particolare, questo campo indica qual&#8217;è l&#8217;url che conduce l&#8217;utente all&#8217;elemento corrente, in questo caso al nostro blog.<br />
Come si potrebbe utilizzare questo referer per compiere un attacco al gestore di un blog WordPress.com?</p>
<p><strong>L&#8217;hacker potrebbe modificare il campo referer dell&#8217;header HTTP e così pubblicare un qualsiasi link nella pagina di amministrazione del blog</strong>. Inoltre, l&#8217;hacker potrebbe creare diverse richieste http con il campo referer modificato così che la vittima, incuriosita da questa discreta “fonte di visite”, segua il link. A questo punto la vittima si ritroverebbe a scaricare la pagina indicata dall&#8217;hacker, esponendosi a diversi potenziali rischi (per l&#8217;hacker, il più è fatto).</p>
<p>La prima riflessione su quanto esposto riguarda la pericolosità di questo tipo di attacchi, infatti la piattaforma wordpress.com (come altre piattaforme esistenti e gratuite) risulta essere molto user friendly e non sempre chi ne fa uso possiede conoscenze in ambito di web security.</p>
<p>A questo bisogna aggiungere la semplicità dell&#8217;attacco : basta essere in grado di modificare un campo dell&#8217;header della richiesta http cosa realizzabile in modo estremamente semplice grazie all&#8217;estensione per firefox: modify headers, reperebile <a href="https://addons.mozilla.org/it/firefox/addon/967">Qui</a></p>
<div id="attachment_234" class="wp-caption alignleft" style="width: 310px"><a href="http://fatmatt.files.wordpress.com/2009/12/cattura.jpg"><img class="size-medium wp-image-234 " style="margin:5px;" title="Cattura" src="http://fatmatt.files.wordpress.com/2009/12/cattura.jpg?w=300&#038;h=249" alt="" width="300" height="249" /></a><p class="wp-caption-text">La finestra principale di Modify Headers</p></div>
<p>anche se personalmente preferisco utilizzare un tool avanzato come <em><strong>Webscarab</strong></em>, che mette a disposizione sotto un&#8217;unica interfaccia una miriade di funzionalità per l&#8217;analisi delle comunicazioni HTTP/S. Webscarab è un progetto parte dell&#8217;<a href="http://www.owasp.org/">OWASP</a> (Open Web Application Security Project).</p>
<p>Un aspetto molto importante riguarda la <strong>possibilità di inserire codice javascript nel referer</strong>, poiché nella pagina delle statistiche, viene stampato un input utente, l&#8217;applicazione è potenzialmente esposta al Cross Site Scripting (sono già alla ricerca di un possibile vettore javascript <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>Concludo dicendo che l&#8217;utilizzo di questa tecnica per portare la vittima nella pagina web infetta è <strong>molto efficiente</strong>, in quanto non richiede un contatto diretto con la vittima (irc, mail , msn ecc).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=232&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2009/12/23/le-insidie-di-wordpress-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2009/12/referer.jpg?w=300" medium="image">
			<media:title type="html">referer</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2009/12/cattura.jpg?w=300" medium="image">
			<media:title type="html">Cattura</media:title>
		</media:content>
	</item>
		<item>
		<title>Advisory: ESL.eu profiles vulnerability</title>
		<link>http://fatmatt.wordpress.com/2009/12/18/advisory-esl-eu-profiles-vulnerability/</link>
		<comments>http://fatmatt.wordpress.com/2009/12/18/advisory-esl-eu-profiles-vulnerability/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 20:53:59 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[Advisory]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Vulnerabilità]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=224</guid>
		<description><![CDATA[EDIT: Ho ricevuto immediatamente una risposta dagli admin, pubblicherò la vulnerabilità solamente una volta che sarà stata fixata. Il sito http://www.esl.eu è vulnerabile, in particolare la gestione delle informazioni degli utenti può essere facilmente utilizzato contro la volontà degli utenti &#8230; <a href="http://fatmatt.wordpress.com/2009/12/18/advisory-esl-eu-profiles-vulnerability/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=224&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration:underline;"><strong>EDIT: Ho ricevuto immediatamente una risposta dagli admin, pubblicherò la vulnerabilità solamente una volta che sarà stata fixata.</strong></span></p>
<p>Il sito <a href="http://www.esl.eu">http://www.esl.eu</a> è vulnerabile, in particolare la gestione delle informazioni degli utenti può essere facilmente utilizzato contro la volontà degli utenti stessi, ho contattato gli admin ed attendo una risposta.</p>
<p><a href="http://fatmatt.files.wordpress.com/2009/12/esl.jpg"><img class="aligncenter size-medium wp-image-225" title="esl" src="http://fatmatt.files.wordpress.com/2009/12/esl.jpg?w=300&#038;h=150" alt="Esl" width="300" height="150" /></a></p>
<p>In caso la risposta non dovesse arrivare entro il 18 gennaio 2010 la vulnerabilità sarà pubblicata</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=224&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2009/12/18/advisory-esl-eu-profiles-vulnerability/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2009/12/esl.jpg?w=300" medium="image">
			<media:title type="html">esl</media:title>
		</media:content>
	</item>
		<item>
		<title>Session Storage: sicurezza delle applicazioni php ed insicurezze degli hosting condivisi</title>
		<link>http://fatmatt.wordpress.com/2009/11/09/session-storage-sicurezza-delle-applicazioni-php-ed-insicurezze-degli-hosting-condivisi/</link>
		<comments>http://fatmatt.wordpress.com/2009/11/09/session-storage-sicurezza-delle-applicazioni-php-ed-insicurezze-degli-hosting-condivisi/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 12:27:10 +0000</pubDate>
		<dc:creator>fatmatt</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Sessioni]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[session storage]]></category>
		<category><![CDATA[sessioni]]></category>

		<guid isPermaLink="false">http://fatmatt.wordpress.com/?p=212</guid>
		<description><![CDATA[Php salva i dati relativi alle sessioni tramite la serializzazione, ovvero l&#8217;array $_SESSION viene linearizzato e salvato in un supporto come un file o un record di un database. Il comportamento di questa caratteristica di php può essere controllato da &#8230; <a href="http://fatmatt.wordpress.com/2009/11/09/session-storage-sicurezza-delle-applicazioni-php-ed-insicurezze-degli-hosting-condivisi/">Leggi l'articolo completo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=212&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Php salva i dati relativi alle sessioni tramite la serializzazione, ovvero l&#8217;array <span style="color:#800000;">$_SESSION</span> viene linearizzato e salvato in un supporto come un file o un record di un database.</p>
<p><a href="http://fatmatt.files.wordpress.com/2009/11/funny-pictures-chipmunk-has-storage.jpg" title="session storage"><img class="alignleft size-medium wp-image-217" title="session storage" alt="session storage" src="http://fatmatt.files.wordpress.com/2009/11/funny-pictures-chipmunk-has-storage.jpg?w=300&#038;h=240" width="300" height="240" /></a></p>
<p>Il comportamento di questa caratteristica di php può essere controllato da due variabili di configurazione di php:</p>
<p><strong>Session.save_handler</strong>: indica a php come viene salvata la sessione e in quale supporto, il valore di default è file (quindi php out of the box scrive i dati di sessione su un file) mentre gli altri valori possibili son user, mm e sqlite.</p>
<p><strong>Session.save_path</strong>: indica la directory in cui le sessioni saranno salvate e mantenute. Il valore di default è /tmp (la mia installazione di xampp ad esempio salva in C:\xampp\tmp).</p>
<p>Al giorno d&#8217;oggi la maggior parte dei servizi di hosting forniscono un servizio di hosting condiviso, molto gettonato perchè abbassa di molto i costi sia per la gestione che per l&#8217;utente finale. Un setup del genere però, in cui diverse web application girano sullo stesso server in cui tutte le sessioni vengono salvate nella <strong>stessa directory</strong> porta degli enormi problemi di sicurezza, vediamo un esempio:</p>
<p>Un cliente del servizio di hosting ha due applicazioni web che girano sullo stesso server. Entrambe fanno uso di sessioni ma sono destinate ad utilizzi diversi; entrambe fanno uso di form per inserire dati nel sito ma la prima delle due applicazioni salva nella sessione anche l&#8217;input utente non filtrato, mentre la seconda mantiene in sessione soltanto dati filtrati.</p>
<p>Poiché le due applicazioni condividono lo spazio in cui vengono salvate le sessioni un possibile attacco consiste nel:</p>
<ol>
<li>Popolare la sessione della prima applicazione (che non filtra 	l&#8217;input) con dati creati ad hoc</li>
<li>Modificare il cookie della sessione relativa all&#8217;applicazione 	2 inserendo il session id dell&#8217;applicazione 1 (questa sessione 	contiene dati non filtrati)</li>
<li>L&#8217;attaccante utilizza i dati non filtrati dell&#8217;applicazione 	1 per danneggiare l&#8217;applicazione 2.</li>
</ol>
<p>Altro scenario ancora più pericoloso riguarda la condivisione di spazio di salvataggio delle sessioni e dell&#8217;<strong>implementazione</strong> dell&#8217;applicazione: capita spesso che i servizi di hosting php mettano a disposizione alcuni CMS per facilitare l&#8217;avvio di un sito web, ecco quali sono i rischi:</p>
<ol>
<li>L&#8217;attaccante è un utente dell&#8217;applicazione 1 con certi 	privilegi, magari è un editor o un moderatore. In particolare 	l&#8217;applicazione 1 si apoggia su un CMS.</li>
<li>L&#8217;applicazione 2 condivide la directory di salvataggio delle 	sessioni (sempre lo stesso servizio di web hosting un pò farlocco) 	ma in più si appoggia allo stesso CMS dell&#8217;applicazione 1.</li>
<li>L&#8217;attaccante logga nella applicazione 2 come utente senza 	privilegi, copia il session id dell&#8217;applicazione 1 nel cookie 	dell&#8217;applicazione 2 e si ritrova loggato con gli stessi privilegi 	che aveva nell&#8217;applicazione 1 (perchè le due applicazioni fanno uso 	dello stesso sistema di gestione dei ruoli).</li>
</ol>
<p>Vediamo quindi che potenzialmente, se un servzio di hosting, ospitante un sito non protetto, non si occupasse di dividere le directory dedicate alle sessioni, i problemi di sicurezza del sito non protetto potrebbero ripercuotersi anche sugli altri.</p>
<p>Ne consegue che la precauzione necessaria al fine di evitare queste falle di sicurezza è la divisione delle directory di salvataggio delle sessioni in applicazioni, così che ogni applicazione avrà la propria directory, ad esempio:</p>
<p>/tmp/applicazione1</p>
<p>/tmp/applicazione2 ecc..</p>
<p>Se il servizio di hosting in cui ci appoggiamo non ha già pensato a modificare la variabile del php.ini possiamo provare ad aggiungere la seguente riga di codice nella nostra applicazione:</p>
<p><span style="color:#001644;"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;"><strong>ini_set(‘session.save_path‘, ‘/tmp/nostra_app‘);</strong></span></span></span></p>
<p><span style="color:#000000;"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Incrociando le dita e sperando che la funzione ini_set non sia inibita dal servizio di hosting.</span></span></span></p>
<p><span style="color:#000000;"><span style="font-family:Times New Roman,serif;"><span style="font-size:small;">Un&#8217;altra soluzione è quella di aggiungere una variabile all&#8217;interno della nostra sessione che identifichi univocamente la nostra applicazione, ad esempio:</span></span></span></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --><span style="color:#001644;"><span style="font-family:Microsoft YaHei,sans-serif;"><span style="font-size:small;"><span style="color:#2323dc;">session_start</span>();</span></span></span></p>
<p><span style="color:#001644;"><span style="font-family:Microsoft YaHei,sans-serif;"><span style="font-size:small;"><strong>if</strong> (!<span style="color:#2323dc;">isset</span>(<span style="color:#dc2300;">$_SESSION</span>[<span style="color:#5c8526;">'application'</span>]) <strong>||</strong> ((string)<span style="color:#dc2300;">$_SESSION</span>[<span style="color:#5c8526;">'application'</span>] !== <span style="color:#5c8526;">&#8216;application_1&#8242;</span>)) {</span></span></span></p>
<p><span style="color:#001644;"><span style="font-family:Microsoft YaHei,sans-serif;"><span style="font-size:small;"><span style="color:#2323dc;">session_regenerate_id</span>();</span></span></span></p>
<p><span style="color:#001644;"><span style="font-family:Microsoft YaHei,sans-serif;"><span style="font-size:small;"><span style="color:#dc2300;">$_SESSION</span> =<span style="color:#2323dc;"> array</span>(<span style="color:#5c8526;">&#8216;application&#8217; </span>=&gt; &#8216;<span style="color:#5c8526;">application_1&#8242;</span>);</span></span></span></p>
<p><span style="color:#001644;"><span style="font-family:Microsoft YaHei,sans-serif;"><span style="font-size:small;">}</span></span></span></p>
<p>In questo modo il cookie modificato dall&#8217;attaccante sarà diverso dai cookie della nostra applicazione e l&#8217;id di sessione viene rigenerato.</p>
<p>Un metodo forse ancora più efficiente per gestire il mantenimento delle sessioni nel web server consiste nell&#8217;<strong>implementazione manuale</strong> delle funzioni di session storaging tramite la funzione <span style="color:#0000ff;">set_session_save_handler</span>(): essa permette di definire quali funzioni si occupano delle diverse operazioni di gestione delle sessioni.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatmatt.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatmatt.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatmatt.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatmatt.wordpress.com&amp;blog=1698979&amp;post=212&amp;subd=fatmatt&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatmatt.wordpress.com/2009/11/09/session-storage-sicurezza-delle-applicazioni-php-ed-insicurezze-degli-hosting-condivisi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a523c7359e4f62dc8a62f3bf2c906397?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatmatt</media:title>
		</media:content>

		<media:content url="http://fatmatt.files.wordpress.com/2009/11/funny-pictures-chipmunk-has-storage.jpg?w=300" medium="image">
			<media:title type="html">session storage</media:title>
		</media:content>
	</item>
	</channel>
</rss>
