<?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; programmazione</title>
	<atom:link href="http://phpblog.it/category/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>sfFacebookConnectPlugin all&#8217;opera</title>
		<link>http://phpblog.it/2011/01/01/sffacebookconnectplugin-visto-da-vicino/</link>
		<comments>http://phpblog.it/2011/01/01/sffacebookconnectplugin-visto-da-vicino/#comments</comments>
		<pubDate>Sat, 01 Jan 2011 14:33:22 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[sfFacebookConnectPlugin]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=386</guid>
		<description><![CDATA[sfFacebookConnectPlugin è un plugin per symfony che permette in modo relativamente semplice l'integrazione del Facebook Connect ad un sito esistente. Riporto alcuni suggerimenti sul suo funzionamento che credo possano essere utili ai più.]]></description>
			<content:encoded><![CDATA[<p><strong>sfFacebookConnectPlugin</strong> è un plugin per symfony che permette in modo relativamente semplice l&#8217;<strong>integrazione del Facebook Connect </strong>ad un sito esistente. Il <a title="sfFacebookConnectPlugin su Github" href="http://https://github.com/fabriceb/sfFacebookConnectPlugin" target="_blank">codice del plugin è disponibile su Github</a> dove è stato forkato già da qualche sviluppatore che nel tempo ha dato il suo contributo per migliorarlo e cercare di tenerlo al passo con l&#8217;avanzamento della piattaforma di sviluppo di Facebook che procede piuttosto velocemente (si pensi solo al passaggio dall&#8217;api REST al Graph che ha cambiato totalmente le carte in tavola).</p>
<p>Nel libro &#8220;<a title="The more with symfony" href="http://www.symfony-project.org/more-with-symfony/1_4/en/">The more with symfony</a>&#8221; un <a title="sfFacebookConnectPlugin su The more with symfony" href="http://www.symfony-project.org/more-with-symfony/1_4/en/12-Developing-for-Facebook">capitolo viene dedicato a questo plugin</a> come mezzo per sviluppare applicazioni per Facebook oltre che per integrare facilmente Facebook Connect. Io lo sto utilizzando per questo secondo scopo integrandolo su un sito con una base utenti già consolidata ed a cui vorrei dare comunque il vantaggio di accedere con un semplice click o trovarsi loggati nel momento in cui fossero già loggati su Facebook.</p>
<p>Ma vediamo un po&#8217; come funziona il connect e cosa si deve fare perchè tutto fili liscio (parto dal presupposto che seguendo la documentazione si sia modificato lo schema del db per introdurre i nuovi campi necessari al plugin).</p>
<h2>Utente non iscritto al sito</h2>
<p>Il primo caso è quello di un <strong>utente non ancora iscritto al sito</strong> che vuole accedervi sfruttando il fatto di essere iscritto a Facebook. Semplicemente cliccando sul pulsante, che avrete posizionato da qualche parte vicino all&#8217;area di login, viene richiamata l&#8217;azione di signin del plugin che si occupa di recuperare la sessione ed i dati di Facebook per verificare l&#8217;eventuale esistenza di un utente già presente a database ed associato al corrente utente Facebook.</p>
<p>Dato che stiamo analizzando il caso dell&#8217;utente non iscritto non verrà trovata nessuna corrispondenza, il plugin quindi creerà un nuovo utente sfGuard con username del tipo &#8220;Facebook_123456789&#8243; (dove la parte numerica è lo uid di FB per l&#8217;utente) e facebook_uid corrispondente all&#8217;uid dell&#8217;utente. Fatto. Da questo momento l&#8217;utente è loggato ed ha una registrazione base al sito dato che spesso nella registrazione &#8220;tradizionale&#8221; vengono richiesti più dati.</p>
<p>Nel progetto in questione andrò a compilare anche il campo del nickname permettendo così all&#8217;utente di utilizzare alcune funzionalità di base, completando invece il proprio profilo avrà l&#8217;accesso completo ad altre funzionalità. Così facendo si accontenta sia l&#8217;utente (che si iscrive con poco) che il cliente (che vuole sì l&#8217;utente ma anche i suoi dati).</p>
<h2>Utente già registrato in passato</h2>
<p>Il secondo caso è quello dell&#8217;<strong>utente iscritto al sito tramite la registrazione tradizionale</strong> che vuole comunque connettere il proprio account a quello di Facebook per sfruttare l&#8217;autenticazione rapida (ed eventuali funzioni di pubblicazione che verranno implementate). Cliccando sul pulsante del connect (da loggato o meno) viene eseguita l&#8217;azione di signin che come prima cerca una corrispondenza tra gli utenti presenti; questa volta la trova e invece di creare un nuovo utente modifica quello esistente aggiungendo l&#8217;uid dell&#8217;utente della sessione Facebook completando così la connessione. Fatto.</p>
<p>Per far funzionare questo <strong>ho dovuto aggiornare il metodo</strong> invocato per utilizzare il nuovo php-sdk. Il <a title="Fork di sfFacebookConnectPlugin su Github" href="https://github.com/dlondero/sfFacebookConnectPlugin" target="_blank">mio fork</a> lo trovate sempre su Github. Ho già richiesto il pull quindi non dovrebbe passare molto tempo prima di vedere tale modifica nel codice &#8220;ufficiale&#8221; del plugin.</p>
<h2>Ok ma il plugin cosa cerca per trovare l&#8217;utente corrispondente a quello restituito dalla sessione di Facebook?</h2>
<p>Il tassello mancante è rappresentato dal campo email_hash aggiunto, in fase di setup del plugin, al profilo dell&#8217;utente. Facebook passa alla nostra applicazione un hash dell&#8217;email utilizzata per l&#8217;iscrizione (non in chiaro quindi) rappresentata dalla stringa crc32(email)_md5(email) che quindi andrà utilizzata come ricerca sulla tabella degli utenti.</p>
<p>E&#8217; quindi importante fare due cose per disporre di questo hash: per gli <strong>utenti già presenti</strong> sarà necessario calcolare tale hash e inserirlo nel profilo di ogni singolo utente in modo batch (c&#8217;è un task per questo che però al momento non è aggiornato per funzionare con il nuovo php-sdk), per i nuovi iscritti (via registrazione &#8220;tradizionale&#8221;) andrà calcolato al momento della registrazione andando quindi a modificare il processo utilizzato o invocando un evento che calcola tale hash.</p>
<p>Fatto questo sarà possibile identificare gli utenti tramite l&#8217;email_hash evitando così la creazione di utenti duplicati (tradizionale + creato dal plugin).</p>
<h2>Fine</h2>
<p>Risolto abbastanza velocemente vero? Chiaramente si possono fare molte altre cose: pensate solo ad una versione modificata della registrazione in cui il form viene precompilato partendo dai dati dell&#8217;utente recuperati direttamente da Facebook (trovate qualcosa sul capitolo di More with symfony). Se pensate di fare qualche esperimento fate attenzione al fatto che l&#8217;applicazione deve essere pubblica (non in lan, raggiungibile da Internet) per permettere a Facebook di comunicare con il plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/01/01/sffacebookconnectplugin-visto-da-vicino/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduzione al refactoring</title>
		<link>http://phpblog.it/2008/12/29/introduzione-al-refactoring-in-php/</link>
		<comments>http://phpblog.it/2008/12/29/introduzione-al-refactoring-in-php/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 09:47:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[leggibilità]]></category>
		<category><![CDATA[manutenzione]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/12/29/introduzione-al-refactoring-in-php/</guid>
		<description><![CDATA[Segnalo un&#8217;interessante serie che sta per iniziare sul blog di Sameer Borate, uno sviluppatore PHP freelance, che parlerà di un tema importante: il refactoring del codice. Quando si parla di refactoring si deve pensare subito a quel processo di modifica in termini di leggibilità e chiarezza strutturale che non vanno ad intaccare quelle che sono [...]]]></description>
			<content:encoded><![CDATA[<p>Segnalo un&#8217;<a href="http://www.codediesel.com/refactoring/introduction-to-refactoring-in-php/" title="interessante serie che sta per iniziare sul blog di Sameer Borate">interessante serie che sta per iniziare sul blog di Sameer Borate</a>, uno sviluppatore PHP freelance, che parlerà di un tema importante: il <strong>refactoring del codice</strong>. Quando si parla di refactoring si deve pensare subito a quel processo di modifica in termini di leggibilità e chiarezza strutturale che non vanno ad intaccare quelle che sono le funzionalità offerte dalla porzione di codice in esame. I risultati prodotti per lo stesso input saranno gli stessi prima e dopo il refactoring, <strong>la leggibilità del codice e la sua manutenibilità</strong> ci si augura che ne avranno tratto giovamento. In questo modo ritornando sul codice a distanza di mesi, o dovendo farlo fare ad altri, il compito non sarà così doloroso come un tempo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/12/29/introduzione-al-refactoring-in-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>10 suggerimenti per migliorare il proprio codice</title>
		<link>http://phpblog.it/2008/11/24/10-suggerimenti-per-migliorare-il-proprio-codice/</link>
		<comments>http://phpblog.it/2008/11/24/10-suggerimenti-per-migliorare-il-proprio-codice/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 06:00:32 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smashingmagazine]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/11/24/10-suggerimenti-per-migliorare-il-proprio-codice/</guid>
		<description><![CDATA[Smashing Magazine è sempre una fonte interessante di articoli su vari aspetti del mondo informatico ed oggi vi segnalo una lettura che riguarda chiaramente la programmazione in PHP ed è stata scritta da Glen Stansberry. Nell&#8217;articolo vengono proposti 10 suggerimenti per migliorare la propria qualità di programmazione o quantomeno del codice prodotto, alcuni sono davvero [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.smashingmagazine.com/" title="Smashing Magazine"><strong>Smashing Magazine</strong></a> è sempre una fonte interessante di articoli su vari aspetti del mondo informatico ed oggi vi segnalo una lettura che riguarda chiaramente la programmazione in PHP ed è stata scritta da Glen Stansberry. <a href="http://www.smashingmagazine.com/2008/11/18/10-advanced-php-tips-to-improve-your-progamming/" title="10 advanced PHP tips to improve your programming">Nell&#8217;articolo vengono proposti <strong>10 suggerimenti</strong></a><strong> per migliorare la propria qualità di programmazione</strong> o quantomeno del codice prodotto, alcuni sono davvero interessanti.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/11/24/10-suggerimenti-per-migliorare-il-proprio-codice/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Password: questione di sicurezza</title>
		<link>http://phpblog.it/2008/10/17/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 [...]]]></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>
]]></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/</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 [...]]]></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>
]]></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/</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 [...]]]></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>
]]></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>L&#8217;ambiente di sviluppo preferito per symfony</title>
		<link>http://phpblog.it/2008/10/06/lambiente-di-sviluppo-preferito-per-symfony/</link>
		<comments>http://phpblog.it/2008/10/06/lambiente-di-sviluppo-preferito-per-symfony/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 05:00:23 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[jedit]]></category>
		<category><![CDATA[komodo]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[textmate]]></category>
		<category><![CDATA[zend studio]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/06/lambiente-di-sviluppo-preferito-per-symfony/</guid>
		<description><![CDATA[Per ogni linguaggio di programmazione esiste sicuramente un ambiente di sviluppo più adatto rispetto agli altri. Anche utilizzando un particolare framework di sviluppo esisterà un ambiente che più si addice alle necessità di tale framework ed alle necessità del programmatore che ci deve lavorare. Ho così deciso di chiedere le proprie preferenze agli utenti del [...]]]></description>
			<content:encoded><![CDATA[<p>Per ogni linguaggio di programmazione esiste sicuramente un ambiente di sviluppo più adatto rispetto agli altri. Anche utilizzando un particolare framework di sviluppo esisterà un ambiente che più si addice alle necessità di tale framework ed alle necessità del programmatore che ci deve lavorare.</p>
<p>Ho così deciso di chiedere le proprie preferenze agli utenti del gruppo symfony su <a href="http://www.linkedin.com/" title="LinkedIn">LinkedIn</a> e le molteplici risposte sono state interessanti.</p>
<p><span id="more-178"></span> Alla mia domanda &#8220;<strong><em>What&#8217;s your favourite environment to work with symfony?</em></strong>&#8221; hanno risposto 24 utenti appartenti al gruppo symfony, qui di seguito riepilogo brevemente i risultati.</p>
<p>Eclipse + PDT  13<br />
Textmate 6<br />
jEdit 2<br />
Zend Studio 6.1 1<br />
NetBeans 1<br />
Komodo 1</p>
<p><strong>E tu cosa preferisci?</strong> Aiutami ad allargare questa ricerca!</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/06/lambiente-di-sviluppo-preferito-per-symfony/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Getting Real</title>
		<link>http://phpblog.it/2008/10/03/getting-real/</link>
		<comments>http://phpblog.it/2008/10/03/getting-real/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 05:00:14 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[getting real]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/03/getting-real/</guid>
		<description><![CDATA[Nei giorni scorsi ho avuto modo di leggere &#8220;Getting Real: The smarter, faster, easier way to build a successful web application&#8221; un libro creato dalla 37signals per esprimere i propri principi aziendali in tema di business, design, programmazione e marketing. Una lettura che cercavo da tempo, non parlo tanto del titolo o degli autori, parlo [...]]]></description>
			<content:encoded><![CDATA[<p>Nei giorni scorsi ho avuto modo di leggere &#8220;<strong>Getting Real: The smarter, faster, easier way to build a successful web application</strong>&#8221; un libro creato dalla <a href="http://www.37signals.com/" title="37signals">37signals</a> per esprimere i propri principi aziendali in tema di business, design, programmazione e marketing. Una lettura che cercavo da tempo, non parlo tanto del titolo o degli autori, parlo piuttosto dei contenuti e degli argomenti trattati.</p>
<p><span id="more-177"></span><strong>37signals</strong> basandosi sui principi descritti in Getting Real <strong>ha realizzato 5 applicazioni web</strong> (Basecamp, Campfire, Backpack, Writeboard, Ta-da List) che hanno riscosso un grande successo tra gli utenti (privati e aziende), attualmente oltre un milione. Va inoltre ricordato che 37signals con <a href="http://www.loudthinking.com/about.html">David Heinemeier Hansson</a> ha dato vita al <strong>framework di sviluppo <a href="http://www.rubyonrails.org/" title="Ruby on Rails">Ruby on Rails</a></strong>.</p>
<p>Il libro è disponibile in 3 formati:</p>
<ol>
<li><a href="https://gettingreal.37signals.com/purchases/new" title="Getting real in pdf">Getting Real in pdf</a> 19$</li>
<li><a href="http://www.lulu.com/content/383343" title="Getting Real in copia cartacea">Getting Real in copia cartacea</a> 25$<a href="http://www.lulu.com/content/383343" title="Getting Real in copia cartacea"><br />
</a></li>
<li><a href="http://gettingreal.37signals.com/toc.php" title="Getting Real online">Getting Real online</a> Gratis</li>
</ol>
<p>I sedici capitoli del libro propongono <strong>idee interessanti per tutto il processo di progettazione-sviluppo-rilascio</strong> di un progetto, in particolare nel settore web restando tuttavia ad un livello piuttosto alto in modo da poter applicare i principi espressi anche il altri settori senza grossi problemi.</p>
<p>E così che si parte dall&#8217;idea (alla base di tutto chiaramente) focalizzando le proprie energie per definire il core dell&#8217;applicazione ignorando nelle prime fasi i dettagli ed evitando di fasciarsi la testa pensando ad un futuro che non potrebbe mai arrivare con problemi di scalabilità e gestione dei costi. Restare semplici per poter cambiare con maggiore facilità.</p>
<p>Per restare semplici al grido di <strong>less is more</strong> è importante capire quali feature sviluppare e come gestire le possibili richieste valutando i costi nascosti che esse comporterebbero. Dopotutto quello che si vuole è realizzare qualcosa che si possa gestire, gli sforzi sono concentrati verso la creazione di un progetto sano. Piuttosto è meglio cercare di scoprire cosa gli utenti non vogliano vedere nell&#8217;applicazione.</p>
<p>Si passa quindi ai primi passi dell&#8217;applicazione vera e propria, è importante avere qualcosa di funzionante in breve tempo. Partendo dal brainstorming, passando per delle simulazioni (prototipizzazione) in html per poi passare finalmente alla scrittura del codice vero e proprio. Per restare semplici è importante prendere alcune decisioni direttamente senza lasciarle agli utenti, alcune preferenze non sono di vitale importanza ecco quindi che basterà prendere una decisione una volta per tutte piuttosto che aver a che fare con la gestione di esse. Fondamentale è la fase di test durante la quale è bene dare l&#8217;applicazione in pasto agli utenti con delle sessioni di utilizzo reale, lo sviluppatore userebbe degli schemi ben precisi di utilizzo e questo non è ciò che avviene con un nuovo utente.</p>
<p>La parte centrale del libro si occupa della <strong>messa in pratica del progetto</strong> dall&#8217;organizzazione del lavoro e alla scelta dello staff necessario per la crescita del progetto. Utili consigli vengono trasmessi per cercare di ottenere il massimo dalla proprie capacità. Si passa quindi al design dell&#8217;applicazione in termini di <strong>interfaccia come punto fondamentale da definire prima</strong> di scrivere codice, vedere realmente come il progetto si presenterà agli utenti permette di capire molte cose e correggerne altre. Si chiude la parte tecnica con un capitolo dedicato interamente al codice: mantenerlo semplice per gestirlo meglio e poter cambiare più rapidamente, aprire le porte agli altri con rss e api, usare tool e linguaggi che piacciano agli sviluppatori. <strong>A happy programmer is a productive programmer. </strong></p>
<p>Si chiude quindi con quella che è la fase meno tecnica e più commerciale/promozionale parlando di preview e facilità di registrazione/cancellazione, passando al lancio vero e proprio dopo aver generato il giusto hype e cavalcando l&#8217;onda del buzz grazie al quale capire la direzione presa dal progetto in termini di immagine. Passato il lancio non è tutto finito, si continua a lavorare per migliorare il prodotto dando le giuste priorità ai problemi comparsi man mano che gli utenti utilizzano il servizio. Essere pronti al cambiamento è fondamentale.</p>
<p><strong>Il mio consiglio? Leggetelo, leggetelo, leggetelo. Tutto, questo fine settimana. Non ci vorrà molto e di sicuro alla fine avrete una carica in più, se anche una sola delle idee lette vi farà dire &#8220;interessante!&#8221; non sarà stato tempo sprecato. Poi tornate su questo post e parliamone assieme!</strong></p>
<p>Per chi avesse problemi con l&#8217;inglese c&#8217;è la <a href="http://gettingreal.37signals.com/GR_ita.php" title="traduzione in italiano">traduzione in italiano</a> (ma non avendola letta non posso garantire che tutto renda come in lingua originale).</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/03/getting-real/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Call the expert: A refactoring story</title>
		<link>http://phpblog.it/2008/10/01/call-the-expert-a-refactoring-story/</link>
		<comments>http://phpblog.it/2008/10/01/call-the-expert-a-refactoring-story/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 05:00:02 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[call the expert]]></category>
		<category><![CDATA[fabien potencier]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/01/call-the-expert-a-refactoring-story/</guid>
		<description><![CDATA[Si intitola così una breve serie di post realizzati da Fabien Potencier e pubblicati sul blog di symfony a seguito di una richiesta di &#8220;aiuto&#8221; pervenutagli da un esperto sviluppatore PHP alle prese con il suo primo progetto con il framework symfony. Fabien (il papà di symfony) ha invitato lo sviluppatore a presentarsi da SensioLabs [...]]]></description>
			<content:encoded><![CDATA[<p>Si intitola così una <strong>breve serie di post realizzati da Fabien Potencier</strong> e pubblicati sul <a href="http://www.symfony-project.org/blog/" title="blog di symfony">blog di symfony</a> a seguito di una richiesta di &#8220;aiuto&#8221; pervenutagli da un esperto sviluppatore PHP alle prese con il suo primo progetto con il <a href="http://www.symfony-project.org/blog/" title="framework symfony">framework symfony</a>. Fabien (il papà di symfony) ha invitato lo sviluppatore a presentarsi da SensioLabs per una <strong>sessione di refactoring</strong> e visto che gli errori commessi gli sono parsi comuni ha deciso di pubblicare una serie di 5 puntate in cui ha analizzato i problemi principali fornendone le soluzioni e le motivazioni.</p>
<p>La <a href="http://www.symfony-project.org/doc/1_1/" title="documentazione di symfony">documentazione di symfony</a> è già molto completa (tra le migliori indubbiamente) e l&#8217;esperienza dello sviluppatore è una componente aggiuntiva fondamentale per la buona riuscita di un progetto. Tuttavia <strong>poter vedere analizzati problemi comuni da chi un framework l&#8217;ha ideato e sviluppato non ha prezzo</strong> e permette di abituarsi a lavorare con metodo rispettando delle best-practice sicure.</p>
<p>Qui l&#8217;accesso diretto alle cinque puntate:</p>
<ul>
<li><a href="http://www.symfony-project.org/blog/2008/09/18/call-the-expert-a-refactoring-story-part-1-5" title="Parte 1">Parte 1</a></li>
<li><a href="http://www.symfony-project.org/blog/2008/09/19/call-the-expert-a-refactoring-story-part-2-5" title="Parte 2">Parte 2</a></li>
<li><a href="http://www.symfony-project.org/blog/2008/09/20/call-the-expert-a-refactoring-story-part-3-5" title="Parte 3">Parte 3</a></li>
<li><a href="http://www.symfony-project.org/blog/2008/09/21/call-the-expert-a-refactoring-story-part-4-5" title="Parte 4">Parte 4</a></li>
<li><a href="http://www.symfony-project.org/blog/2008/09/22/call-the-expert-a-refactoring-story-part-5-5" title="Parte 5 ">Parte 5 </a></li>
</ul>
<p><strong>E voi studiate il codice altrui per migliorarvi? Io lo faccio e mi diverto parecchio.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/01/call-the-expert-a-refactoring-story/feed/</wfw:commentRss>
		<slash:comments>0</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/</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 [...]]]></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>
]]></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>
	</channel>
</rss>

