Proteggiamo il nostro lavoro PHP
Introduzione

Gli strumenti
Prima di tutto distinguiamo ogni strumento con 2 parametri:- il primo riguarda la necessità o meno di fare delle modifiche nei file di configurazione del server (generalmente php.ini)
- il secondo il costo dell'applicazione o del metodo utilizzato
Bcompiler - gratuito - poche modifiche
Bcompiler è un'estensione che consente sia di convertire i sorgenti Php in un bytecode dal quale è virtualmente impossibile ricostruire gli esatti originali, sia di elaborare tale bytecode come normale codice Php. Bcompiler è stato creato da Alan Knowles con tre obiettivi:- dare la possibilità di codificare classi e librerie di funzioni in un formato proprietario
- creare applicazioni Php-GTK che inglobino l'interprete php.exe
- studiare la realizzazione di un traduttore da Php a C
Zend Encoder - Guard - a pagamento (costo elevato) - poche modifiche
Zend Encoder è un'utility (a pagamento) che "offusca", codifica e semi-compila un programma PHP di modo da proteggerne il codice sorgente e la relativa proprietà intellettuale: riceve in ingresso uno o più script e invia indietro gli stessi codificati e non più modificabili. Zend Optimizer è il "player", che, installato sul server, si occuperà di interpretare gli script così ottenuti.
Esso rappresenta un'altra ottima e semplice soluzione, ma ad alto costo. Per quanto sia molto utilizzata (viste anche le prestazioni ottenute) vi consiglio, se necessitate di un altro livello di protezione del codice, di utilizzare Bcompiler. Una nota positiva è che l'estensione Optimizer è spesso installata di default nei server.
Riferimenti:
http://sicurezza.html.it/guide/lezione/3264/nascondere-il-codice-php/ - spiegazione veloce
http://www.zend.com/store/products/zend-encoder.php - pagina ufficiale
ionCube - a pagamento (basso costo) - nessuna modifica
ionCube PHP Encoder è uno dei più noti programmi per la codifica dei codici sorgenti nelle applicazioni scritte in PHP. Si tratta si uno strumento in grado di proteggere i listati oscurandoli e nello stesso tempo di non impedire l'esecuzione di alcuna funzione.
Dotato di un'interfaccia grafica (GUI) semplice ed intuitiva, si tratta di un software ideale per coloro che vogliono rilasciare le proprie applicazioni in prova senza la preoccupazione che qualcuno possa copiare il nostro lavoro.
Risulta forse una tra le soluzioni più semplici. Inoltre è possibile utilizzare il convertitore online (a pagamento) se si hanno pochi file da codificare. Potete anche provare una versione di valutazione (trial).
Riferimenti:
http://www.ioncube.com/sa_encoder.php - pagina ufficiale
Turck MMCache - gratuito - poche modifiche
Turck MMCache è un'applicazione open source gratuita che svolge le funzioni di acceleratore PHP, ottimizzatore, codificatore e caching dinamico per PHP. Aumenta le prestazioni degli script mettendoli in cache una volta compilati. Inoltre ottimizza alcune operazioni. In generale riduce il tempo di caricamento e aumenta la velocità di esecuzione del codice da 1 a 10 volte.
La migliore soluzione gratuita, peraltro compatibile con Zend nelle ultime versioni. Assolutamente consigliata.
Riferimenti:
http://turck-mmcache.sourceforge.net/index_old.html - pagina ufficiale
Pobs - PHP Obfuscator - gratuiti - nessuna modifica
Programmi/Script semplicissimi da utilizzare, permettono di proteggere il codice da occhi indiscreti senza trasformarlo in bytecode ma cambiando nomi di funzioni, variabili, ecc. con stringhe casuali, in modo da disordinare il più possibile il codice.
Pobs viene eseguito come uno script PHP e permette di settare molte configurazioni (nomi da non modificare, ecc) oltre che una directory da cui attingere ricorsivamente ai file e ad una di destinazione.
Phpobfuscator invece è un programma, disponibile per Windows, che svolge le stesse funzioni, ma che continua ad essere mantenuto dal suo produttore.
Esempio di codice generato da phpobfuscator:
function FC7321B391B6EF18F0711B835402E91D1($RE91192A00FF990477EE414AD5D708F08) { global $db_prefix; global $R695CD54D1F9CB31C11C71AF5EF74FDDB; $R9E9F3EDB7A84E99A0567F313F4EAC1BA = $RE91192A00FF990477EE414AD5D708F08; $R37A721F3B04CA577A7730084048F2BE3 = array_keys($R695CD54D1F9CB31C11C71AF5EF74FDDB); foreach($R37A721F3B04CA577A7730084048F2BE3 as $R90E8291866BD6CB7ED5089CE7E833D11) { $R9E9F3EDB7A84E99A0567F313F4EAC1BA = str_replace($R90E8291866BD6CB7ED5089CE7E833D11, $db_prefix . $R90E8291866BD6CB7ED5089CE7E833D11 , $R9E9F3EDB7A84E99A0567F313F4EAC1BA); } return $R9E9F3EDB7A84E99A0567F313F4EAC1BA;}.Vista la loro semplicità e velocità di utilizzo sono assolutamente consigliati a chi vuole una protezione non triviale, senza dover smanettare troppo per ottenerla. Riferimenti: http://pobs.mywalhalla.net/ - pagina ufficiale di Pobs (non più mantenuto) http://www.raizlabs.com/software/phpobfuscator/ - pagina ufficiale di PHP Obfuscator
Conclusione
Spero di aver dato una panoramica abbastanza generale dei mezzi a disposizione per proteggere la nostra proprietà intellettuale. Se qualcuno vuole aggiungere dei dettagli oppure consigliare nuovi programmi può esprimere nei commenti la propria opinione. Il mio consiglio è di informarsi bene su ognuno dei sistemi citati e utilizzare di volta in volta quello che più si adatta alla situazione.Infine non posso non citare PHPAudit. Chi ha orecchie per intendere..

31-12-1969 alle 18:33
Segnalato!
31-12-1969 alle 18:33
Ottima panoramica sull'argomento, aggiungo un'ulteriore metodo che in realtà non penso abbia un nome specifico. Qualcuno considera questa tecnica comunque appartenente ai "code obfuscator", ma è, secondo me, ad un livello superiore. Tant'è che l'output di un normale "offuscatore" potrebbe essere l'input perfetto per quest'altra categoria di strumenti. Altri li chiamano "php encoder", ma questa è una definizione sicuramente azzardata. Io li chiamerei "eval-obfuscator". :) Questo metodo consite nel prendere il codice, convertirlo in un'altra stringa apparentemente priva di significato (in realtà è in genere una conversione base64) e il codice "offuscato" risultante diventa:
eval(base64_decode("#stringaBase64DelCodice#"));Se l'implementazione fosse così semplice basterebbe sostituire l'eval con un echo e si avrebbe il codice php che si voleva nascondere, ma in realtà annidando eval fra di loro e sfruttando qualche trucchetto si può rendere davvero la vita difficile a chi cerca di recuperare il codice originale. Svantaggi? La necessità di decodificare e interpretare questi eval (multipli) aumenta notevolmante il tempo di esecuzione del codice. Sempre meglio soluzioni più robuste quindi... Quando il cliente non ti obbliga a stare su hosting condiviso ;) Un esempio di questi "eval-obfuscators": http://www.rightscripts.om/phpencode/ Again: ottimo post31-12-1969 alle 18:33
@Andrea: Grazie mille per la segnalazione! In effetti non avevo considerato la possibilità degli eval. Probabilmente generano anche meno problemi di POBS e gli altri offuscatori che spesso non mascherano correttamente e creano errori difficili da debuggare. =)
31-12-1969 alle 18:33
Se volete una gui di bcompiler scaricate Bcompiler Gui da http://www.trustfm.net/GeneralTools/SoftwareBcompilerGUI.php?b2=1 Ricordate che bcompiler e un compilatore non un obfuscatore...
31-12-1969 alle 18:33
@TrustFm Ti ringrazio per la segnalazione e la precisazione :)
31-12-1969 alle 18:33
io vorrei sapere quando un file php viene offuscato da zend poi ce un programma che permettere di poter portare il file alle origini senza offuscamento?
31-12-1969 alle 18:33
No, non l'ho mai trovato, mi spiace..