A quanti di voi sarà capitato di dover cifrare del codice PHP scritto di vostro pugno, magari perchè contenente informazioni sensibili, quali, ad esempio, username e password di accesso al database?
Ebbene, un metodo semplice per ottenere quanto sopra consiste nell’installare il modulo PHP BLENC (che è ancora in versione beta – qui trovate il manuale). Tale operazione può essere effettuata in modo semiautomatico utilizzando il tool pecl presente sulla nostra macchina.
Prima di procedere, è necessario verificare che il suddetto applicativo sia già installato, digitando il comando:
[root@linuxbox ~]# which pecl
il cui output dovrebbe essere:
/usr/bin/pecl
Successivamente, potremo procedere con l’installazione vera e propria del modulo BLENC, lanciando il comando:
[root@linuxbox ~]# pecl install -f blenc
A questo punto potremo creare il file blenc.ini da posizionare all’interno della dir /etc/php.d, il cui contenuto dovrà essere simile al seguente:
; Enable blenc extension module extension=blenc.so
All’interno del file /etc/php.ini, utilizzando la entry blenc.key_file, possiamo definire il percorso in cui trovare le chiavi per decifrare gli scrip criptati, ovvero:
[blenc] blenc.key_file = /usr/local/etc/blenckeys
Ora passiamo alla creazione del file encrypt.php, il cui contenuto dovrà essere:
<?php $file_to_crypt=file_get_contents("security.php"); $key=blenc_encrypt($file_to_crypt, "connect.php"); $key_file = ini_get('blenc.key_file'); file_put_contents($key_file, $key."\n", FILE_APPEND); ?>
il quale ci consentirà di cifrare gli scrip di nostro interesse.
In particolare, security.php contiene il codice sorgente che vogliamo criptare, connect.php sarà il nostro file cifrato e la chiave generata mediante la funzione blenc_encrypt() verrà salvata all’interno dell’apposito file /usr/local/etc/blenckeys, ricavato mediante il parsing della direttiva blenc.key_file presente in /etc/php.ini.
Da notare che all’interno della funzione file_put_contents(), il secondo argomento contiene il carattere \n (newline), poichè per il corretto funzionamento del modulo è necessario che per ogni riga sia presente una sola chiave (dove ogni chiave si riferisce univocamente ad un file cifrato). Tale “accortezza” non è presente all’interno del manuale ufficiale.
Eseguiamo, quindi, il file encrypt.php da linea di comando:
[root@linuxbox ~]# php encrypt.php
il quale genererà il file cifrato connect.php.
Come ultimo step riavviamo httpd:
[root@linuxbox ~]# service httpd reload
ed abbiamo finito.
Alla prossima.