<?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/"
	>

<channel>
	<title>PHPBlog.it &#187; sicurezza</title>
	<atom:link href="http://phpblog.it/tag/sicurezza/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 21 May 2012 21:45:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Password: questione di sicurezza</title>
		<link>http://phpblog.it/2008/10/17/password-questione-di-sicurezza/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=password-questione-di-sicurezza</link>
		<comments>http://phpblog.it/2008/10/17/password-questione-di-sicurezza/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 05:00:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[accesso dati]]></category>
		<category><![CDATA[password]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/17/password-questione-di-sicurezza/</guid>
		<description><![CDATA[La password è forse il sistema di sicurezza più utlizzato sul web per la difesa dei dati degli utenti. Ad ogni profilo, utente, cliente corrispondono uno username ed una password per limitare l&#8217;accesso ai dati ed alle funzionalità ad esso associati. Tuttavia può spesso capitare che la sicurezza fornita dall&#8217;accoppiata username/password non sia all&#8217;altezza auspicata [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/10/17/password-questione-di-sicurezza/' addthis:title='Password: questione di sicurezza '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>La password è forse il sistema di sicurezza più utlizzato sul web per la difesa dei dati degli utenti. Ad ogni profilo, utente, cliente corrispondono uno username ed una password per limitare l&#8217;accesso ai dati ed alle funzionalità ad esso associati. Tuttavia può spesso capitare che la sicurezza fornita dall&#8217;accoppiata username/password non sia all&#8217;altezza auspicata dagli sviluppatori mettendo a rischio i dati e l&#8217;applicazione stessa. Come? Molto semplice: pippo/pippo o nome/cognome vi dicono niente? L&#8217;utente per pigrizia utilizzerà una password reciclata, magari semplice e corta cosa che implica un basso grado di sicurezza: l&#8217;alfanumerico di almeno 6 caratteri sarà un miraggio.</p>
<p>Per questo motivo in un progetto che sto affrontando in questo periodo ho deciso che <strong>l&#8217;utente non potrà agire direttamente sulla password ma sarà sempre il sistema ad occuparsene</strong>. Al momento della registrazione verrà creata una password comunicata all&#8217;utente via mail (caratteri alfanumerici); in caso di smarrimento l&#8217;utente potrà richiedere una nuova password con relativo reset della precedente dovuto al fatto che la password non verrà memorizzata in chiaro sul database.</p>
<p>L&#8217;approccio non è certo rivoluzionario, tuttavia in molte applicazioni la gestione password è diversa e lascia più libertà all&#8217;utente andando a dare spazio quindi ai problemi visti in precedenza.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/10/17/password-questione-di-sicurezza/' addthis:title='Password: questione di sicurezza '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/17/password-questione-di-sicurezza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come criptare i nostri scripts in PHP &#8211; Source Guardian</title>
		<link>http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=come-criptare-i-nostri-scripts-in-php-source-guardian</link>
		<comments>http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 05:00:09 +0000</pubDate>
		<dc:creator>Davide Martignetti</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[cifrare]]></category>
		<category><![CDATA[criptare]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[source guardian]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/</guid>
		<description><![CDATA[Questo articolo è un approfondimento di &#8220;Offuscare o proteggere il nostro codice PHP &#8211; Introduzione&#8220;, analizzeremo le funzionalità, i pregi ed i difetti di Zend Guard al fine di criptare uno script PHP. Source Guardian non è l&#8217;unico programma che permette di cifrare uno script in PHP, per la lista completa vi rimando a Offuscare [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/' addthis:title='Come criptare i nostri scripts in PHP &#8211; Source Guardian '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Questo articolo è un approfondimento di &#8220;<a href="http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/" title="Offuscare o proteggere il nostro codice PHP - Introduzione">Offuscare o proteggere il nostro codice PHP &#8211; Introduzione</a>&#8220;, analizzeremo le funzionalità, i pregi ed i difetti di Zend Guard al fine di criptare uno script PHP.<br />
Source Guardian non è l&#8217;unico programma che permette di cifrare uno script in PHP, per la lista completa vi rimando a <a href="http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/" title="Offuscare o proteggere il nostro codice PHP - Introduzione">Offuscare o proteggere il nostro codice PHP &#8211; Introduzione</a>.</p>
<h3>Source Guardian</h3>
<p>Source Guardian (250$, windows, linux, mac), tramite un&#8217;interfaccia che lascia un po&#8217; a desiderare vi permette di criptare il vostro codice. Il primo approcio con la versione Demo è stato ottimo, l&#8217;interfaccia scarna del programma è compensata da una semplicità di utilizzo veramente alta. Con pochi clicks guidati potremo visualizzare il nostro sorgente criptato.</p>
<p><span id="more-160"></span></p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/10/encode.jpg" alt="Encode" /></p>
<p>I nodi giungono però al pettine dopo poco tempo: al momento dell&#8217;esecuzione dello script comparirà la richiesta di installazione di Source Guardian loader, dopo una ricerca un po&#8217; macchinosa sono giunto ad una pagina (nei files di installazione di source guardian) che spiega come effettuarne l&#8217;installazione:</p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/10/error.jpg" alt="Error" /></p>
<h3>Prima</h3>
<p>[source:php]<br />
&lt;?php<br />
function isOnline($address=&#8221;localhost&#8221;, $port=&#8221;80&#8243;, $timeout=&#8221;1&#8243;)<br />
{<br />
@$fp=fsockopen($address,$port,$err_no,$errstr,$timeout);<br />
if($fp)<br />
{<br />
return 1;<br />
fclose($fp);<br />
}<br />
else<br />
{<br />
echo &#8220;Errore numero $err_no: $errstr\n&#8221;;<br />
return 0;<br />
}<br />
}<br />
?&gt;[/source]</p>
<h3>Dopo</h3>
<p>[source:php]&lt;?php @SourceGuardian; 1051555483; 2602881255; //v7.0 evaluation<br />
if(!function_exists(&#8216;sg_load&#8217;)){$__v=phpversion();$__u=strtolower(substr(php_uname(),0,3));$__f=$__f0=&#8217;ixed.&#8217;.substr($__v,0,strpos($__v,&#8217;.',3)).&#8217;ev.&#8217;.$__u;$__ff=$__ff0=&#8217;ixed.&#8217;.$__v.&#8217;ev.&#8217;.$__u;$__ed=ini_get(&#8216;extension_dir&#8217;);if(!$__e=realpath($__ed)) die(&#8216;extension_dir does not exists &#8216;.$__ed);if(file_exists($__e.&#8217;/&#8217;.$__ff)) dl($__ff);else if(file_exists($__e.&#8217;/&#8217;.$__f)) dl($__f);else {$__d=getcwd();if(@$__d[1]==&#8217;:'){$__d=str_replace(&#8216;\\&#8217;,'/&#8217;,substr($__d,2));$__e=str_replace(&#8216;\\&#8217;,'/&#8217;,substr($__e,2));}$__e.=($__h=str_repeat(&#8216;/..&#8217;,substr_count($__e,&#8217;/')));$__f=&#8217;/ixed/&#8217;.$__f;$__ff=&#8217;/ixed/&#8217;.$__ff;while(!file_exists($__e.$__d.$__ff) &amp;&amp; !file_exists($__e.$__d.$__f) &amp;&amp; strlen($__d)&gt;1){$__d=dirname($__d);}if (file_exists($__e.$__d.$__ff)) dl($__h.$__d.$__ff);else if (file_exists($__e.$__d.$__f)) dl($__h.$__d.$__f);}if(!function_exists(&#8216;sg_load&#8217;)){die(&#8216;PHP script &lt;B&gt;&#8217;.__FILE__.&#8217;&lt;/B&gt; is protected by &lt;A href=&#8221;http://www.sourceguardian.com/&#8221;&gt;SourceGuardian&lt;/A&gt; and requires the SourceGuardian loader &lt;B&gt;&#8217;.$__f0.&#8217;&lt;/B&gt;. The SourceGuardian loader has not been installed, or is not installed correctly. Please find the required loader in the ixed subdirectory within your SourceGuardian installation directory.&#8217;);exit();}}return sg_load(&#8216;AAQAAAAMAAAABHAAAACABAAAAAAAAAD/MPqWt4A0hGDqoOPTsBY0RZWEFiSW1kqExXhlpjyQDLwnMRC8v35pX6HyAI+7v3Ow8PdnvlntxY0OSjK47/S16KIMnwGoGnn+RS3NZU/IK+RUOGKterxnfOUmdRO7scw5higAnljyrSheIJ9xpznOtXu84okXfng7KaDUJVHQTnexmk67Hv9lmlTeB3qs7S2poluC+X9Orbf3jJUB81Fxq+mlXpAQ6vnsFPbcagkOm1jByfXqIif7NlZDTYjACjsYlN3SYQbDICuZrHrMp5wNgl+SFXGQ4FYaazeuCL3KTKGSOTPN/U4NVJuEl21MhJ+bfETcmKxSaEI4TjGgrp2PjKNelGWkrKCj7zrBo+UrOBXQaKjFvizt1t4pxNNEiKykkyTDN1X0v0+ivxOqBkIjX4hnR0NJpQ0rsdFN5EnnRJsgbxQIsmGHz+fDvPtuOZNenYtFl4/NKnlOJd9GAcnzUW2Vwnw6WsQ7jIERVeXy5m1720krTsE+DutbBGFe8kHgaXUXtUU0S9b8TwIk7rBkDkiOaITzGKdT+Rk7Xw4p8DEjOFDWZ0IA1IJflsNZuN1WZilX8m05xJzni+bc8fmWdHsblHnKtFKdUylX01gONZ11uSHWPMJoGEcp7uGBTGenLrt5AYUHUisEMjXU1muZi0ipz3DybGtaWVwDuQ59tTVGPViyVzXrPoV5dQTPTyY8zXW7xqEtkQBB5wLAcJo5IYJrjEjWS7M8WkssAf+Ib/eyI2JClqqd/ij2eRtd6XekeuQH5VjoenL5QNnP2QklrkncXzlNK4cwhvRy9sj2Zp11zBAcBWL0Ws7V80Sx/LAZf0frzxSwP0co5kWwf/OSDmNITmCWP8z2gXSu1ApmraB4664UdYxPUHTft8fUjaB5&#8242;);<br />
?&gt;[/source]</p>
<p><strong>Conclusioni:</strong> Source Guardian è un po&#8217; difficile da installare, ha un&#8217;interfaccia che di certo non è delle migliori ma pare che decifrare il codice sia più complicato. E&#8217; anche vero che costa molto meno di Zend Guard.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/' addthis:title='Come criptare i nostri scripts in PHP &#8211; Source Guardian '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/08/come-criptare-i-nostri-scripts-in-php-source-guardian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controllo delle variabili</title>
		<link>http://phpblog.it/2008/03/11/controllo-delle-variabili/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=controllo-delle-variabili</link>
		<comments>http://phpblog.it/2008/03/11/controllo-delle-variabili/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 06:00:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[isset]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[variabili]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/11/controllo-delle-variabili/</guid>
		<description><![CDATA[Via PhpBuilder leggo un intervento interessante sul controllo delle variabili e sul Ternary Conditional Operator che con una singola linea di codice evita dei fastidiosi controlli. Il fatto di eseguire i corretti controlli sulle variabili può spesso essere visto come una perdita di tempo, questo metodo di procedere lascia nella maggior parte dei casi falle [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/11/controllo-delle-variabili/' addthis:title='Controllo delle variabili '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://www.phpbuilder.com/columns/scross99_20080305.php3" title="PHPBuilder.com">PhpBuilder</a> leggo un intervento interessante sul controllo delle variabili e sul <em>Ternary Conditional Operator</em> che con una singola linea di codice evita dei fastidiosi controlli.</p>
<p><span id="more-58"></span> Il fatto di eseguire i corretti controlli sulle variabili può spesso essere visto come una perdita di tempo, questo metodo di procedere lascia nella maggior parte dei casi falle aperte nelle applicazioni che perdono dunque affidabilità in termini di sicurezza.</p>
<p>Tuttavia eseguire un semplice quanto importante controllo su una variabile $_GET, $_POST, $_SESSION è questione di una linea di codice:</p>
<p>CONDIZIONE ? VALORE SE TRUE : VALORE SE FALSE</p>
<p>Un semplice esempio può essere il seguente:</p>
<pre><code>$id = isset($_GET['id']) ? $_GET['id'] : false;</code></pre>
<p>In una singola riga si fanno diverse operazioni: innanzitutto con <em>isset()</em> si verifica l&#8217;esistenza della variabile, se il valore ottenuto è true si assegna il valore a $id, in caso contrario il valore assegnato sarà false. Chiaramente sarà utile verificare successivamente il tipo del dato che ci aspettiamo prima di utilizzarlo.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/11/controllo-delle-variabili/' addthis:title='Controllo delle variabili '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/11/controllo-delle-variabili/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La questione dei tipi primitivi</title>
		<link>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-non-e-fortemente-tipizzato</link>
		<comments>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 06:00:34 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tipi]]></category>
		<category><![CDATA[variabili]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/12/php-non-e-fortemente-tipizzato/</guid>
		<description><![CDATA[Sappiamo tutti (oppure lo scoprite ora) che PHP non è un linguaggio fortemente tipizzato. Questo cosa vuol dire? Significa che non è necessario dichiarare il tipo di una variabile perchè essa possa gestire un particolar tipo di dato. In questo modo potremmo assegnare a $numero il valore 2 oppure &#8220;due&#8221; alla stessa maniera. Nei linguaggi [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/' addthis:title='La questione dei tipi primitivi '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Sappiamo tutti (oppure lo scoprite ora) che <strong>PHP non è un linguaggio fortemente tipizzato</strong>. Questo cosa vuol dire? Significa che <strong>non è necessario dichiarare il tipo di una variabile</strong> perchè essa possa gestire un particolar tipo di dato. In questo modo potremmo assegnare a <strong>$numero</strong> il valore <em>2</em> oppure &#8220;<em>due</em>&#8221; alla stessa maniera. Nei linguaggi fortemente tipizzati (C, Java&#8230;) è obbligatorio dichiarare il tipo di una variabile prima di assegnarle un valore, valore che chiaramente deve rispettare il tipo specificato.</p>
<p><span id="more-27"></span>Questo non significa certo che PHP non rispetti il <strong>concetto di tipo</strong>, ogni valore che possiamo assegnare ad una variabile ha un tipo che possiamo verificare attraverso delle utili <a href="http://it.php.net/manual/it/ref.var.php" title="http://it.php.net/manual/it/ref.var.php">funzioni per la gestione delle variabili</a>. Avremo quindi la possibilità di utilizzare is_bool(), is_integer(), is_string()&#8230;per verificare il tipo di una variabile passata come parametro, in caso positivo il valore di ritorno sarà <em>true</em>.</p>
<p>Effettuare <strong>il controllo del tipo di una varibile torna particolarmente importante quando si ha a che fare con gli argomenti di metodi e funzioni</strong>, casi in cui bisogna prestare particolare attenzione al codice che si scrive. Vediamo un esempio. Immaginiamo di estrarre delle informazioni di configurazione da un file XML, l&#8217;elemento &lt;resolvedomains&gt; specifica all&#8217;applicazione se provare o meno ad eseguire il reverse DNS di un IP.<br />
<code><br />
&lt;settings&gt;<br />
&lt;resolvedomains&gt;false&lt;/resolvedomains&gt;<br />
&lt;settings&gt;<br />
</code></p>
<p>La stringa &#8220;false&#8221; viene letta dall&#8217;appliccazione e passata ad un metodo chiamato <em>outputAddress()</em> che si occupa di visualizzare i dati di un determinato IP.</p>
<p>[php]<br />
function outputAddresses($resolve) {<br />
foreach($this-&gt;addresses as $address) {<br />
print $address;<br />
if ($resolve) {<br />
print &#8220;(&#8220;. gethostbyaddr($address) .&#8221;)&#8221;;<br />
}<br />
print &#8220;\n&#8221;;<br />
}<br />
}<br />
[/php]</p>
<p>Il metodo <em>outputAddresses()</em> non fa altro che iterare su un array di indirizzi IP mostrandoli uno ad uno, nel caso in cui $resolve sia true il metodo restituisce anche il dominio assieme all&#8217;IP. Vediamo una porzione di codice che potrebbe essere chiamata da questo metodo:<br />
<code><br />
$settings = simplexml_load_file("settings.xml");<br />
$manager = new AddressManager();<br />
$manager-&gt;outputAddresses($settings-&gt;resolvedomains);</code></p>
<p>Questo codice non si comporta come ci si aspetterebbe: passando la stringa &#8220;false&#8221; al metodo <em>outputAddress()</em> <strong>trascuriamo l&#8217;assunzione implicita che il metodo fa riguardo all&#8217;argomento passato</strong>. Infatti il metodo si aspetta un valore di tipo booleano (true o false) ma la stringa &#8220;false&#8221; corrisponde al valore true in un test. Questo è dato dal fatto che PHP esegue un cast di una stringa non vuota al valore booleano true in un test if. Di conseguenza:<br />
<code><br />
if ("false") {<br />
//..<br />
}<br />
</code></p>
<p>è equivalente a<br />
<code><br />
if (true) {<br />
//..<br />
}</code></p>
<p>Esistono diverse strade per risolvere questo problema, quella più metodica e sicura richiede di modificare il metodo <em>outputAddress()</em>  per fare in modo che sia pronto ad aspettarsi il corretto tipo di dato riferito all&#8217;argomento <em>$resolv</em>.</p>
<p>[php]<br />
function outputAddresses($resolve) {<br />
if (!is_bool($resolve)) {<br />
die(&#8220;outputAddress() richiede un argomento di tipo booleano\n&#8221;);<br />
}<br />
}<br />
[/php]</p>
<p>Un approccio di questo tipo <strong>obbliga chi utilizza il metodo a fornire l&#8217;argomento $resolv nel tipo di dato corretto</strong> evitando problemi di ogni sorta. Detto questo sta al programmatore considerare il potenziale impatto che l&#8217;utilizzo di tipi inaspettati potrebbe avere sulla propria applicazione. Non pensate di lasciare nulla al caso, chi userà le vostre classi non può leggere quello che avete in mente quando le realizzate quindi<strong> è consigliabile pensare sempre come i metodi che scrivete possano reagire alla &#8220;spazzatura&#8221; che potrebbero ricevere in input.</strong></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/' addthis:title='La questione dei tipi primitivi '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Leggere RSS per proporre contenuti esterni</title>
		<link>http://phpblog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=leggere-feed-rss-e-pubblicare-i-dati-xml</link>
		<comments>http://phpblog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 06:00:43 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/</guid>
		<description><![CDATA[La gran parte (se non la totalità) dei blog e dei siti web oramai dà la possibilità di seguire l&#8217;aggiornamento dei contenuti, oltre che con la normale navigazione, sfruttando i feed RSS nell&#8217;aggregatore che più ci piace. RSS (acronimo di RDF Site Summary ed anche di Really Simple Syndication) è uno dei più popolari formati [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/' addthis:title='Leggere RSS per proporre contenuti esterni '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/02/rss.jpg" alt="rss" />La gran parte (se non la totalità) dei blog e dei siti web oramai dà la possibilità di seguire l&#8217;aggiornamento dei contenuti, oltre che con la normale navigazione, sfruttando i <strong>feed RSS</strong> nell&#8217;aggregatore che più ci piace. <strong>RSS</strong> (acronimo di <em><a href="http://it.wikipedia.org/wiki/Resource_Description_Framework" title="Resource Description Framework">RDF</a> Site Summary</em> ed anche di <em>Really Simple Syndication</em>) è <strong>uno dei più popolari formati per la distribuzione di contenuti Web è basato su <a href="http://it.wikipedia.org/wiki/XML" title="XML">XML</a></strong>, da cui ha ereditato la semplicità, l&#8217;estensibilità e la flessibilità.<span id="more-210"></span></p>
<p>Come già detto la fruizione di questi feed RSS è davvero semplice utilizzando delle applicazioni o dei servizi che svolgono il compito di aggregare le informazioni provenienti da più fonti, ma <strong>come fare ad utilizzare i dati contenuti nell&#8217;xml per proporli per esempio su una pagina web?</strong> Vediamo come fare con <strong>PHP</strong> e <a href="http://it.php.net/manual/it/ref.simplexml.php" title="PHP SimpleXML"><strong>SimpleXML</strong></a>.</p>
<p>Innanzitutto bisogna avere un link ad un feed RSS, prendiamo per esempio quello di questo blog e lo assegnamo ad una variabile:</p>
<p><code>$request = 'http://feeds.feedburner.com/php5blogit/';</code></p>
<p>a questo punto non resta che <strong>recuperare i dati contenuti nel feed</strong>. Le strade percorribili sarebbero 2: utilizzare la funzione <strong><a href="http://it2.php.net/manual/it/function.file-get-contents.php" title="file_get_contents">file_get_contents</a></strong> oppure sfruttare le <strong><a href="http://it2.php.net/manual/it/ref.curl.php" title="funzioni curl">funzioni curl</a></strong>. Il risultato finale utilizzando l&#8217;una o l&#8217;altra strada sarebbe lo stesso, il problema della scelta dipende principalmente dalle impostazioni dell&#8217;hosting su cui lavoriamo: capita spesso di trovare servizi che per sicurezza non abilitino <a href="http://it2.php.net/manual/it/ref.filesystem.php#ini.allow-url-fopen" title="i wrapper URL per fopen">i wrapper URL per fopen</a>, in modo da potere accedere       ad oggetti URL come file. In questo caso vediamo l&#8217;esempio con le funzioni curl:<br />
<code><br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, $request);<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$response = curl_exec($ch);<br />
curl_close($ch);<br />
</code></p>
<p>A questo punto entra in scena l&#8217;xml. Infatti per poter accedere ai dati ricavati dal feed <strong>dobbiamo convertire l&#8217;xml stesso in un oggetto su cui usare iteratori e proprietà degli array. </strong>Come? Le funzioni <strong><a href="http://it2.php.net/manual/it/ref.simplexml.php" title="SimpleXMLElement">SimpleXML</a> </strong>sono la risposta. Queste funzioni, che sono state introdotte con PHP5, permettono di trattare l&#8217;xml con un insieme di metodi studiati per accedere ai dati e per modificarne eventualmente i contenuti aggiungendone di altri.</p>
<p><code>$xml = new SimpleXMLElement($response);</code></p>
<p>Non resta che presentare ai lettori i contenuti del feed ricavati nei passaggi precedenti. L&#8217;accesso ai dati grazie al SimpleXML è un gioco da ragazzi: iterando sugli item contenuti in ogni channel facciamo l&#8217;echo del link e del titolo dell&#8217;articolo in questione&#8230;<br />
<code><br />
foreach ($xml-&gt;channel-&gt;item as $item) {<br />
echo "&lt;a href='" . $item-&gt;guid . "' style='color:#000;'&gt;" . $item-&gt;title . "&lt;/a&gt;&lt;br /&gt;";<br />
}<br />
</code></p>
<p>La presentazione del link è basilare, appositamente non sottoposta a stili particolari perchè non è questo l&#8217;obiettivo dell&#8217;articolo. Con poche specifiche allo <em>style</em> utilizzando i css si possono creare box adattabili ad ogni sito o blog integrandoli in modo perfetto al layout esistente.</p>
<p>Potete scaricare il codice completo dell&#8217;esempio da <strong><a href="http://gagblog.it/downloads/php5blog/xmlnews.txt" title="Xmlnews.php code">qui</a></strong>.</p>
<p><strong>CREDITS<br />
</strong>Le foto utilizzate nell’articolo sono state distribuite con licenza Creative Commons e prelevate da Flickr. Sono reperibili nel formato originale ai seguenti indirizzi:</p>
<ul>
<li><a href="http://www.flickr.com/photos/68242677@N00/1332714549/" title="http://www.flickr.com/photos/68242677@N00/1332714549/">http://www.flickr.com/photos/68242677@N00/1332714549/</a></li>
</ul>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/' addthis:title='Leggere RSS per proporre contenuti esterni '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/02/11/leggere-feed-rss-e-pubblicare-i-dati-xml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

