<?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/category/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>Creare random password user friendly</title>
		<link>http://phpblog.it/2008/11/17/creare-random-password-user-friendly/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creare-random-password-user-friendly</link>
		<comments>http://phpblog.it/2008/11/17/creare-random-password-user-friendly/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 06:00:56 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[sitepoint]]></category>
		<category><![CDATA[user friendly]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/11/17/creare-random-password-user-friendly/</guid>
		<description><![CDATA[Quello delle password è un tema che offre sempre spunti di riflessione sul come agire al meglio per offrire un prodotto migliore. La generazione di password random è una pratica molto diffusa su molti sistemi e rappresenta l&#8217;approccio principale per il primo passo nel flusso di registrazione dell&#8217;utente ad un servizio. Questa password random spesso [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/11/17/creare-random-password-user-friendly/' addthis:title='Creare random password user friendly '  ><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>Quello delle password è un tema che offre sempre spunti di riflessione sul come agire al meglio per offrire un prodotto migliore. La generazione di password random è una pratica molto diffusa su molti sistemi e rappresenta l&#8217;approccio principale per il primo passo nel flusso di registrazione dell&#8217;utente ad un servizio. <strong>Questa password random spesso però non tiene conto delle possibili difficoltà che l&#8217;utente può incontrare nel leggerla</strong>: pensate solo alla somiglianza di caratteri come &#8220;l e I&#8221; o &#8220;O e 0&#8243; che in base al font utilizzato possono essere più o meno simili.</p>
<p><a href="http://www.sitepoint.com/blogs/2008/11/13/how-to-create-friendlier-random-passwords/" title="Craig Anderson affronta il problema su SitePoint">Craig Anderson affronta il problema su SitePoint</a> offrendo il suo punto di vista ed una possibile soluzione.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/11/17/creare-random-password-user-friendly/' addthis:title='Creare random password user friendly '  ><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/11/17/creare-random-password-user-friendly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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; Zend Guard</title>
		<link>http://phpblog.it/2008/10/15/criptare-i-nostri-scripts-in-php-zend-guard/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=criptare-i-nostri-scripts-in-php-zend-guard</link>
		<comments>http://phpblog.it/2008/10/15/criptare-i-nostri-scripts-in-php-zend-guard/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 05:00:13 +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[decode]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend guard]]></category>
		<category><![CDATA[zend optimizer]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/15/criptare-i-nostri-scripts-in-php-zend-guard/</guid>
		<description><![CDATA[Questo articolo è un approfondimento di “Offuscare o proteggere il nostro codice PHP &#8211; Introduzione“, analizzeremo le funzionalità, i pregi ed i difetti di Zend Guard al fine di criptare uno script PHP. Zend Guard 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/15/criptare-i-nostri-scripts-in-php-zend-guard/' addthis:title='Come criptare i nostri scripts in PHP &#8211; Zend Guard '  ><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 “<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>“, analizzeremo le funzionalità, i pregi ed i difetti di Zend Guard al fine di criptare uno script PHP.<br />
Zend Guard 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>
<p><span id="more-155"></span></p>
<h3>Zend Guard</h3>
<p>Zend Guard è senz&#8217;altro il più usato strumento a pagamento ( 600$ ) che permette di criptare i files PHP, forse perchè si integra perfettamente nell&#8217;interfaccia di Zend Studio, usandolo potrete anche creare delle licenze per i vostri prodotti, l&#8217;interfaccia è semplice ed intuitiva così come la sua installazione. Per usare Zend Guard è però necessario avere installato sul nostro webserver Zend Optimizer (Zend Optimizer è gratuito).<br />
Seppur il più usato Zend Guard non è di certo lo strumento più sicuro al quale affidare i nostri script. Esistono vari servizi gratuiti e a pagamento offerti dalla comunità online, di questi, però, troviamo online solamente quelli a pagamento: primo fra tutti <a href="http://www.zendecode.com/">Zend Decode</a> ( 50$ &#8211; per PHP4 e PHP5, solo per Windows ).<br />
Per provare Zend Guard scaricate ed installate Zend Guard [<br />
<a href="http://www.zend.com/en/products/guard/downloads">Scarica</a> ] ed anche Zend Optimizer [ <a href="http://www.zend.com/en/products/guard/downloads">Scarica</a> - Quando lo si installa fare molta attenzione a non premere invio senza curarsi di ciò che ci viene chiesto perchè è molto importante configurarlo correttamente! ].</p>
<p>Ecco come si presenta un semplicissimo script prima e dopo essere stato criptato ( ho usato la versione demo ):</p>
<h3>Prima</h3>
<p>[source:Php]&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 @Zend;<br />
4123;<br />
/* ñ!This is not a text file!Þí */<br />
print &lt;&lt;&lt;EOM<br />
&lt;html&gt;&lt;body&gt;&lt;a href=&#8221;http://www.zend.com/products/zend_guard&#8221;&gt;&lt;img border=&#8221;0&#8243; src=&#8221;http://www.zend.com/images/store/safeguard_optimizer_img.gif&#8221; align=&#8221;right&#8221;&gt;&lt;/a&gt;&lt;center&gt;&lt;h1&gt;Zend Optimizer not installed&lt;/h1&gt;&lt;/center&gt;&lt;p&gt;This file was encoded by the &lt;a href=&#8221;http://www.zend.com/products/zend_guard&#8221;&gt;Zend Guard&lt;/a&gt;. In order to run it, please install the &lt;a href=&#8221;http://www.zend.com/products/zend_optimizer&#8221;&gt;Zend Optimizer&lt;/a&gt; (available without charge), version 3.0.0 or later. &lt;/p&gt;&lt;h2&gt;Seeing this message instead of the website you expected?&lt;/h2&gt;This means that this webserver is not configured correctly. In order to view this website properly, please contact the website&#8217;s system administrator/webmaster with the following message:&lt;tt&gt;The component &#8220;Zend Optimizer&#8221; is not installed on the Web Server and therefore cannot service encoded files. Please download and install the Zend Optimizer (available without charge) on the Web Server.&lt;/tt&gt;&lt;b&gt;Note&lt;/b&gt;: Zend Technologies cannot resolve issues related to this message appearing on websites not belonging to &lt;a href=&#8221;http://www.zend.com&#8221;&gt;Zend Technologies&lt;/a&gt;. &lt;h2&gt;What is the Zend Optimizer?&lt;/h2&gt;&lt;p&gt;The Zend Optimizer is one of the most popular PHP plugins for performance-improvement, and has been available without charge, since the early days of PHP 4. It improves performance by scanning PHP&#8217;s intermediate code and passing it through multiple Optimization Passes to replace inefficient code patterns with more efficient code blocks. The replaced code blocks perform exactly the same operations as the original code, only faster. &lt;/p&gt;&lt;p&gt;In addition to improving performance, the Zend Optimizer also enables PHP to transparently load files encoded by the Zend Guard. &lt;/p&gt;&lt;p&gt;The Zend Optimizer is a free product available for download from &lt;a href=&#8221;http://www.zend.com&#8221;&gt;Zend Technologies&lt;/a&gt;. Zend Technologies also developed the PHP scripting engine, known as the &lt;a href=&#8221;http://www.zend.com/products/zend_engine&#8221;&gt;Zend Engine&lt;/a&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;<br />
EOM;<br />
exit();<br />
__halt_compiler();<br />
?&gt;<br />
200407220335061262xù<br />
Ÿ2}W½N#1ö!t‚,Ez„Ñƒvìõ=5=Wœ¢Ä›5ò&amp;Å=Â½/Á# ^€Ž’††‚&#8217;@ºæüŸÍÖÍ|ãÙùÆóc»æ©šéè¼qƒÆØa:×Z`_ÊJÉ¬f%a˜2iŠ¿LW‹ÅŸÓñtjœq‰f­ž\ëÕ@)¥ Bº[ïlRëVœ#’k„ûT‹þ×’w™{/‘ÒøzÜÚWÃS~ú$š·º©çŠ©.¬àÂœ<br />
ñïè¨¶õ.ìBISÈ´Y†# ö8ZÎJ¯ºB_­n…ð¯aüq¦òù~o©õd\_év‡åÑ0„&lt;éâ¬‹‘Hõ}žwI‰d%@u^w¾<br />
uêoÊé¸-³ÝžFµ‹ÜIÀ5Ö‡m~Žð0Ã¸?d˜D˜táÃW®¶Ã8Â´ßïvî»rMÏ¿#_zô0šÝl2;ö/ÈÌ¼5‘ÐbëààmvŒÇRº91Cÿ¾Ë[èŒÿÓ¢BçÆh£FÍj¡Œm$2Fw(öÓ£ãMkvõ<br />
¼uâüÙÀSÏ€}Úö4{„z&amp;HÞ°­É…ÈÐ:çö Â5ƒP^Ì¡”Øö˜Ny<br />
(ã¸â üneÌïF )'„b^Ea»4N(JV²Š#ò¤’Àyjîÿrý—Ä<br />
[/source]</p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/10/encode.png" alt="Come criptare i nostri scripts in PHP - Zend Guard" /></p>
<p>Se volete provare il programma dovete creare un nuovo progetto seguendo le istruzioni, una volta creato vi comparirà una schermata, sulla destra della sezione centrale cliccate sull&#8217;opzione &#8220;Encode project&#8221;, vi troverete il file criptato nella path specificata alla voce &#8220;Output Location&#8221;.</p>
<p><strong>Conclusioni:</strong> Il programma è caro, richiede zend optimizer installato sul webserver e la protezione è facilmente aggirabile, a mio parere esistono alternative più valide e più economiche  .</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/10/15/criptare-i-nostri-scripts-in-php-zend-guard/' addthis:title='Come criptare i nostri scripts in PHP &#8211; Zend Guard '  ><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/15/criptare-i-nostri-scripts-in-php-zend-guard/feed/</wfw:commentRss>
		<slash:comments>2</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>Diamo l&#8217;addio a PHP4</title>
		<link>http://phpblog.it/2008/08/08/diamo-laddio-a-php4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=diamo-laddio-a-php4</link>
		<comments>http://phpblog.it/2008/08/08/diamo-laddio-a-php4/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 05:00:17 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[php4]]></category>
		<category><![CDATA[php5]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/08/08/diamo-laddio-a-php4/</guid>
		<description><![CDATA[Oggi è il giorno dell&#8217;addio a PHP4. E&#8217; arrivato la fatidica data 08/08/08, giorno in cui la versione 4 di PHP viene definitivamente abbandonata: non verranno più rilasciati nemmeno aggiornamenti sulla sicurezza. Proprio ieri è stata rilasciata l&#8217;ultima release di PHP4 con la versione 4.4.9 di cui potete leggere il changelog direttamente sul sito ufficiale.Se [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/08/08/diamo-laddio-a-php4/' addthis:title='Diamo l&#8217;addio a PHP4 '  ><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>Oggi è il giorno dell&#8217;<strong>addio a PHP4</strong>. E&#8217; arrivato la fatidica data 08/08/08, giorno in cui la versione 4 di PHP viene definitivamente abbandonata: non verranno più rilasciati nemmeno aggiornamenti sulla sicurezza. Proprio ieri è stata rilasciata l&#8217;ultima release di PHP4 con la versione 4.4.9 di cui potete leggere il <a href="http://www.php.net/ChangeLog-4.php#4.4.9" title="changelog">changelog</a> direttamente sul sito ufficiale.Se quindi non avete ancora fatto il salto verso PHP5 è vivamente consigliato fare l&#8217;aggiornamento a quest&#8217;ultima release (4.4.9) e pianificare poi abbastanza in fretta il passaggio alla versione successiva aggiornando le vostre macchine prima di andare incontro spiacevoli inconveniente.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/08/08/diamo-laddio-a-php4/' addthis:title='Diamo l&#8217;addio a PHP4 '  ><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/08/08/diamo-laddio-a-php4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Offuscare o proteggere il nostro codice PHP &#8211; Introduzione</title>
		<link>http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=offuscare-o-proteggere-il-nostro-codice-php-introduzione</link>
		<comments>http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 05:00:23 +0000</pubDate>
		<dc:creator>Davide Martignetti</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[codice]]></category>
		<category><![CDATA[criptare]]></category>
		<category><![CDATA[offuscare]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[proteggere]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/</guid>
		<description><![CDATA[Attenzione: Questo articolo è un&#8217;introduzione alle possibili soluzioni adottabili per offuscare il nostro codice, le varie soluzioni saranno approfondite in una serie di articoli successivi. Penso che molti programmatori PHP sarebbero contenti di poter proteggere il loro codice da sguardi indiscreti o da utilizzi non autorizzati. Si pensi per esempio a quando si realizza una [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/' addthis:title='Offuscare o proteggere il nostro codice PHP &#8211; Introduzione '  ><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://www.fodlers.org/content/phpblog_it/images/phpobfuscator.png" alt="PHP Obfuscator, gratuito" /></p>
<p><strong>Attenzione: </strong>Questo articolo è un&#8217;introduzione alle possibili soluzioni adottabili per offuscare il nostro codice, le varie soluzioni saranno approfondite in una serie di articoli successivi.</p>
<p>Penso che molti  programmatori PHP sarebbero contenti di poter proteggere il loro codice da sguardi indiscreti o da utilizzi non autorizzati.<br />
Si pensi per esempio a quando si realizza una bozza di un progetto, sareste contenti di sapere che il committente lo distribuisce a vostra insaputa? A me no di certo. Potremmo ospitare la bozza su un nostro server senza consegnare il codice, potremmo anche rimuovere il progetto dopo la sua analisi da parte del cliente, ma se ciò non fosse possibile per motivi di stile o per altri motivi dovremmo affidarci ad altre tecniche.</p>
<p><strong>Esistono due principali metodi che ci permettono di proteggere il nostro codice</strong>, attenzione però: il livello di protezione non è mai totale (è cioè sempre possibile aggirare il metodo di protezione per ottenere il sorgente dello script) ma con un po&#8217; di fortuna riusciremo ad allontanare il nostro codice da sguardi indiscreti, eccoli:</p>
<p><span id="more-167"></span></p>
<p><strong>Il primo metodo</strong> è molto semplice: nominare le variabili in modo da renderle simili fra loro, rimuovere gli spazi e non andare a capo, come nell&#8217;esempio (non testato), che vi fa capire in linea di massima ciò che intendo:</p>
<p>[source:Php]<br />
&lt;?php<br />
$mysql_address=&#8221;localhost&#8221;;<br />
$mysql_username=&#8221;root&#8221;;<br />
$mysql_password=&#8221;";<br />
$mysql_database=&#8221;mio_database&#8221;;<br />
$mysql_connessione=mysql_connect($mysql_address,$mysql_username,$mysql_password);<br />
mysql_select_db($mysql_database,$mysql_connessione);<br />
$query=&#8221;SELECT * FROM $mysql_database.visite WHERE data=&#8217;19910429&#8242;&#8221;;<br />
$risultato=mysql_query($query, $mysql_connessione);<br />
$quanti=mysql_num_rows($risultato);<br />
echo &#8220;il 29 aprile 1991 sono venuti a trovarci $quanti visitatori!&#8221;;<br />
mysql_close($mysql_connessione);<br />
?&gt;<br />
[/source]<br />
Questo diventerà<br />
[source:Php]<br />
&lt;?php $mxazfhm=&#8221;localhost&#8221;;$mxgzfhm=&#8221;root&#8221;;$mxazfbm=&#8221;";$mxasfhm=&#8221;mio_database&#8221;;$mxazthm=mysql_connect($mxazfhm,$mxgzfhm,$mxazfbm);mysql_select_db($mxasfhm,$mxazthm);$mcazfhm=&#8221;SELECT * FROM $mxasfhm.visite WHERE data=&#8217;19910429&#8242;&#8221;;$mxzafhm=mysql_mcazfhm($mcazfhm, $mxazthm);$maczfhm=mysql_num_rows($mxzafhm);echo &#8220;il 29 aprile 1991 sono venuti a trovarci $maczfhm visitatori!&#8221;mysql_close($mxazthm);?&gt;<br />
[/source]</p>
<p>Esistono software come PHP Obfuscator (nell&#8217;immagine di questo articolo) che automatizzano il processo di sostituzione.</p>
<p>Un utente esperto sarà indubbiamente in grado di risalire al codice originale in poco tempo: il livello di protezione di questa soluzione è proporzionale alla sua facilità d&#8217;uso, cioè basilare. E&#8217; però vero che potremo utilizzare lo script senza dover installare alcun software aggiuntivo, e questo è davvero un bel vantaggio.</p>
<p>Non vi preoccupate se l&#8217;efficacia del metodo precedentemente descritto non vi soddisfa: esiste un <strong>secondo metodo</strong>: utilizzare software progettati per gestire la protezione (quella seria) del nostro codice (come Zend Guard).<br />
Come funzionano questi software? E&#8217; bene aver presente la strada che percorre il nostro script prima di tornare nel browser: esso infatti, dopo essere stato riconosciuto in una pagina, viene interpretato e successivamente viene restituito l&#8217;output che verrà caricato all&#8217;interno della pagina. Il riconoscimento dei frammenti di codice avviene tramite la ricerca dei tags php (in genere &lt;?php; ?&gt;), dopo aver riconosciuto il codice esso viene trasformato in linguaggio macchina, ecco il problema: il codice PHP deve essere &#8220;puro&#8221;, ovvero non cifrato per essere comprensibile! I software che si occupano di cifrare e poi decifrare il codice (l&#8217;analisi ed il giudizio di questi saranno il tema di una serie di articoli che approfondiranno l&#8217;argomento) inseriscono un controllo del sorgente tra la fase di riconoscimento del codice e quella di trasformazione in linguaggio macchina, se il controllo troverà files cifrati li trasformerà nel linguaggio comprensibile dal compilatore, ovvero quello &#8220;puro&#8221;. Attenzione però: non tutti i servizi di hosting offrono la possibilità di utilizzare queste soluzioni.</p>
<p>Indice: <a href="#">Introduzione</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/' addthis:title='Offuscare o proteggere il nostro codice PHP &#8211; Introduzione '  ><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/07/21/offuscare-o-proteggere-il-nostro-codice-php-introduzione/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Generare password casuali</title>
		<link>http://phpblog.it/2008/02/18/classe-php5-generazione-password-casuali/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=classe-php5-generazione-password-casuali</link>
		<comments>http://phpblog.it/2008/02/18/classe-php5-generazione-password-casuali/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 06:00:47 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[classi]]></category>
		<category><![CDATA[phpblog]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[generatore]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[shuffle]]></category>
		<category><![CDATA[tipi]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/18/classe-php5-generazione-password-casuali/</guid>
		<description><![CDATA[In tutte le applicazioni che richiedono l&#8217;autenticazione da parte degli utenti un ruolo fondamentale per quanto riguarda la sicurezza dell&#8217;intero sistema è rappresentato dalla password inserita. Molte volte (se non nella totalità dei casi) lasciare all&#8217;utente la gestione completa della propria password è fonte di rischio visto che per semplice pigrizia l&#8217;utente medio utilizza spesso [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/18/classe-php5-generazione-password-casuali/' addthis:title='Generare password casuali '  ><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/padlock.jpg" alt="Padlock" />In tutte le applicazioni che richiedono l&#8217;autenticazione da parte degli utenti <strong>un ruolo fondamentale per quanto riguarda la sicurezza dell&#8217;intero sistema è rappresentato dalla password inserita</strong>. Molte volte (se non nella totalità dei casi) lasciare all&#8217;utente la gestione completa della propria password è fonte di rischio visto che per semplice pigrizia l&#8217;utente medio utilizza spesso la stessa parola chiave sicuramente appartenente alla tipologia che possiamo definire debole: il proprio nome, date di nascita, parole estremamente corte. <strong>Oggi quindi presento una semplice classe per la generazione di password casuali scritta in PHP5.</strong></p>
<p><span id="more-34"></span>Una strada per innalzare la sicurezza della propria applicazione e dell&#8217;intero sistema è quella di <strong>fornire all&#8217;utente una password creata dal sistema seguendo un determinato criterio</strong> con l&#8217;intento di rispettare quelli che sono i requisiti minimi per una password sicura. Vogliamo quindi utilizzare:</p>
<ul>
<li>un insieme di caratteri alfabetici maiuscoli e minuscoli</li>
<li>un insieme di numeri</li>
</ul>
<p>La classe che vediamo di seguito è molto semplice prende <strong>2 valori in input <em>length</em> e <em>numbers</em></strong> che indicano rispettivamente la lunghezza totale della password ed il numero di cifre intendiamo inserire nella stringa che andiamo a generare. E&#8217; costituita dal <strong><em>costruttore</em> che si occupa di creare l&#8217;oggetto</strong> al momento dell&#8217;istanziazione della classe e dal <strong>metodo <em>getPassword() </em></strong>che si occupa dell&#8217;elaborazione vera e propria dell&#8217;input per la generazione dell&#8217;output: la password.</p>
<p><strong>Il costruttore si occupa appunto di costruire l&#8217;oggetto facendo le dovute <a href="http://php5blog.it/2008/02/12/php-non-e-fortemente-tipizzato/" title="verifiche sui tipi, di cui abbiamo parlato in un post precedente">verifiche sui tipi</a></strong><a href="http://php5blog.it/2008/02/12/php-non-e-fortemente-tipizzato/" title="verifiche sui tipi, di cui abbiamo parlato in un post precedente">, di cui abbiamo parlato in un post precedente</a>, ed agendo in base alla situazione che si verifica.<br />
<code></code></p>
<p><code>public function __construct($length, $numbers) {<br />
if (!is_int($length) || !is_int($numbers)) {<br />
die("randoPassword() richiede argomenti di tipo intero\n");<br />
}<br />
if ($length &lt; $numbers) {<br />
die("length deve essere maggiore di numbers\n");<br />
}<br />
$this-&gt;length = $length;<br />
$this-&gt;numbers = $numbers;<br />
}<br />
</code></p>
<p>Come anticipato <strong>il metodo <em>getPassword() </em>si occupa del lavoro vero e proprio</strong>, vediamo quindi come si comporta. Innanzitutto <strong>andiamo ad inserire nell&#8217;array <em>random_char</em> un numero di caratteri alfabetici presi da <em>$alphabet</em> pari al valore di <em>$length</em> meno il valore di <em>$numbers</em>.</strong> In secondo luogo <strong>aggiungiamo dei caratteri numerici</strong> presi casualmente tra 0 e 9 fino a raggiungere una numerosità dell&#8217;array <em>random_char</em> pari a <em>$length. </em>A questo punto avremmo già una password composta da lettere (maiuscole e minuscole) con n=$numbers caratteri numerici in coda. <strong>Per rendere le password meno ripetitive ho deciso di rimischiare i valori interni all&#8217;array con la comoda funzione <a href="http://it.php.net/manual/it/function.shuffle.php" title="shuffle">shuffle</a></strong> prima di eseguire il return del metodo.<br />
<code><br />
public function getPassword() {<br />
$a = 0;<br />
while ($a &lt; ($this-&gt;length - $this-&gt;numbers)) {<br />
$random_char[$a] = $this-&gt;alphabet[rand(0,51)];<br />
$a++;<br />
}</code><br />
<code><br />
while ($a &lt; $this-&gt;length) {<br />
$random_char[$a] = rand(0,9);<br />
$a++;<br />
}<br />
</code><code><br />
shuffle($random_char);<br />
</code><code><br />
$a = 0;<br />
while ($a &lt; ($this-&gt;length + $this-&gt;numbers)) {<br />
$password .= $random_char[$a];<br />
$a++;<br />
}<br />
return $password;<br />
}<br />
</code></p>
<p>Come sempre potete <a href="http://php5blog.it/downloads/phpblog/randomPassword.class.php.txt" title="randomPassword.class.php">scaricare <strong>il codice completo della classe randomPassword.class.php</strong></a> in modo da studiarlo attentamente (l&#8217;indentazione lì è corretta) e provarlo ma soprattutto modificarlo e perfezionarlo in base a quello che vi ha insegnato la vostra esperienza.</p>
<p>Usate i commenti qui sotto per esprimere il vostro parere, i vostri dubbi, le vostre critiche e i suggerimenti che riteniate possano essere utili a me ed ai lettori.</p>
<p><strong>CREDITS<br />
</strong>L’immagine utilizzata nell’articolo proviene da <a href="http://www.flickr.com/">Flickr</a>, dove è stata <a href="http://www.flickr.com/photos/imaginedreality/399334773/" title="Padlock and Key">pubblicata da Imagined Reality</a> con <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.it" title="Attribuzione-Condividi allo stesso modo 2.0 Generico">licenza Creative Commons</a>.<a href="http://www.flickr.com/photos/imaginedreality/399334773/" title="http://www.flickr.com/photos/imaginedreality/399334773/"><br />
</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/18/classe-php5-generazione-password-casuali/' addthis:title='Generare password casuali '  ><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/18/classe-php5-generazione-password-casuali/feed/</wfw:commentRss>
		<slash:comments>4</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>Inspekt, la libreria firewall</title>
		<link>http://phpblog.it/2008/02/07/inspekt-libreria-di-filtering-e-validazione-per-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=inspekt-libreria-di-filtering-e-validazione-per-php</link>
		<comments>http://phpblog.it/2008/02/07/inspekt-libreria-di-filtering-e-validazione-per-php/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 06:00:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[filtering]]></category>
		<category><![CDATA[inspekt]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/07/inspekt-libreria-di-filtering-e-validazione-per-php/</guid>
		<description><![CDATA[Inspekt è una libreria per PHP (4 e 5) promossa dal Open Web Application Security Project (OWASP) in occasione del Spring of Code 2007 e realizzata da Ed Finkler sulla base di quello che era Zend_Filter_Input (ex componente del framework Zend). Lo stesso Ed afferma che dai dati di NIST NVD relativi al 2006 risulta [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/07/inspekt-libreria-di-filtering-e-validazione-per-php/' addthis:title='Inspekt, la libreria firewall '  ><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><a href="http://code.google.com/p/inspekt/" title="Inspekt"><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/02/inspekt.jpg" alt="Inspekt" /><strong>Inspekt</strong></a> è una libreria per PHP (4 e 5) promossa dal <a href="http://www.owasp.org/index.php/Main_Page" title="OWASP"><strong>Open Web Application Security Project</strong></a> (OWASP) in occasione del <strong><a href="http://www.owasp.org/index.php/OWASP_Spring_Of_Code_2007" rel="nofollow">Spring of Code 2007</a> </strong>e realizzata da <strong> Ed Finkler</strong> sulla base di quello che era Zend_Filter_Input (ex componente del framework Zend). Lo stesso Ed afferma che dai dati di <a href="http://nvd.nist.gov/" title="NIST NVD">NIST NVD</a> relativi al 2006 risulta che <strong>oltre il 40% di tutte le vulnerabilità riportate riguardano PHP</strong>, ma non il linguaggio in sè bensì le applicazioni sviluppate con esso e quindi il codice realizzato. E&#8217; quindi necessario seguire nuovi paradigmi che impongano in un certo qual modo l&#8217;applicazione di <strong>tecniche di filtering e validation</strong> necessarie a garantire il corretto funzionamento delle applicazioni.</p>
<p><span id="more-208"></span></p>
<p>Inspekt si piazza come <strong>una specie di firewall tra l&#8217;input dell&#8217;utente e l&#8217;applicazione vera e propria</strong>. La libreria si preoccupa di prendere gli array superglobali ($_GET e $POST), esegue l&#8217;incapsulamento dei dati contenuti in un oggetto definito &#8220;cage&#8221; (letteralmente &#8220;gabbia&#8221;)  e distrugge gli array superglobali. L&#8217;accesso ai dati è garantito da una <strong>vasta serie di metodi che si occupano già del filtering e da altri che permettono la validazione dei dati</strong> stessi. L&#8217;accesso ai dati originali (raw) può essere fatto solamente tramite il metodo &#8216;getRaw()&#8217; che obbliga quindi lo sviluppatore ad aver ben sotto controllo la situazione e quello che sta facendo.<br />
Dalla <strong><a href="http://funkatron.com/inspekt/user_docs/" title="documentazione di Inspekt">documentazione di Inspekt</a></strong> è facile capire quanto sia semplice da utilizzare e quali siano le sue potenzialità nel rendere anche più semplice e leggibile il codice piuttosto che avere tutti i controlli e la validazione direttamente nell&#8217;action dei form. <strong>Consiglio di dare un&#8217;occhiata agli esempi contenuti nell&#8217;archivio</strong> che scaricate assieme alla libreria, permettono di vedere in azione Inspekt e di lavorare direttamente su codice già pronto per eseguire i propri test e fugare i propri dubbi.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/07/inspekt-libreria-di-filtering-e-validazione-per-php/' addthis:title='Inspekt, la libreria firewall '  ><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/07/inspekt-libreria-di-filtering-e-validazione-per-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php4 è morto</title>
		<link>http://phpblog.it/2008/02/05/la-morte-di-php-4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-morte-di-php-4</link>
		<comments>http://phpblog.it/2008/02/05/la-morte-di-php-4/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 06:00:43 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[notizie]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[gophp5]]></category>
		<category><![CDATA[php 4]]></category>
		<category><![CDATA[php 5]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/05/la-morte-di-php-4/</guid>
		<description><![CDATA[In un comunicato del 13 luglio 2007 gli sviluppatori di PHP davano l&#8217;annuncio dell&#8217;end of life di PHP4, comunicando che dopo il 31 dicembre 2007 non avrebbero rilasciato ulteriori versioni di PHP4.4. Tuttavia si impegneranno fino al 08/08/08 per gli aggiornamenti sulla sicurezza per dare modo agli sviluppatori di migrare le proprie applicazioni a PHP5 [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/05/la-morte-di-php-4/' addthis:title='php4 è morto '  ><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>In un <a href="http://www.php.net/" title="php.net">comunicato del <strong>13 luglio 2007</strong></a> gli sviluppatori di PHP davano l&#8217;annuncio dell&#8217;<strong>end of life di PHP4</strong>, comunicando che dopo il 31 dicembre 2007 non avrebbero rilasciato ulteriori versioni di PHP4.4. Tuttavia si impegneranno <strong>fino al 08/08/08 per gli aggiornamenti sulla sicurezza</strong> per dare modo agli sviluppatori di <a href="http://www.php.net/manual/it/migration5.php" title="Migrazione da PHP 4 a PHP 5">migrare le proprie applicazioni</a> a PHP5 in tutta comodità.</p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/02/php4end.jpg" alt="php4end" /><br />
<span id="more-206"></span><strong>La campagna <a href="http://gophp5.org/" title="gophp5.org">GoPHP5</a> punta a far aggiornare tutte le installazioni di PHP presso service provider</strong>, non solo, ha imposto il <strong>termine del 5 febbraio</strong> (oggi)  per il passaggio all&#8217;ultima versione di PHP disponibile. Il problema di fondo è un <strong>circolo virtuoso</strong> dal quale si può uscire solamente imponendosi bloccando una variabile del sistema: gli sviluppatori non possono sfruttare le nuove potenzialità di PHP5 senza tagliare nettamente i ponti con il 4 che è ancora attualmente la versione più diffusa presso i servizi di hosting condivisi; i gestori di servizi di web hosting non possono passare alla versione 5 per non bloccare il funzionamento di tutte le applicazioni basate su PHP4; lo stesso team di sviluppo non può smettere di seguire completamente PHP4 dato il massiccio utilizzo che ne viene fatto dagli sviluppatori in tutto il mondo&#8230;</p>
<p>Ecco quindi che la comunità di sviluppatori PHP ha deciso di aderire e migrare i propri progetti verso PHP5, dall&#8217;altro lato hanno risposto gli hoster che si impegnano ad aggiornare le proprie macchine rendendo finalmente disponibili dei servizi basati su PHP5. Sulle pagine di <strong>goPHP5.org</strong> trovate l&#8217;elenco di chi ha già comunicato la propria adesione alla campagna.</p>
<p><strong>Credits</strong><br />
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/zackv/446415923/" title="flickr">http://www.flickr.com/photos/zackv/446415923/</a></li>
</ul>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/02/05/la-morte-di-php-4/' addthis:title='php4 è morto '  ><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/05/la-morte-di-php-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

