Le problème d’un langage comme le PHP, c’est que le code source est intégralement disponible. Lorsque l’on est maître du serveur où sont hébergés les scripts, tout va bien, mais sinon comment faire pour protéger le code contre la modification ou la copie abusive.
Il existe actuellement 2 méthodes pour cela :
- l’obfuscation qui consiste à rendre illisible le code en supprimant les espaces, les commentaires et en renommant les variables/fonctions.
- transformer le code PHP en bytecode (fichier binaire exécuté par le moteur PHP)

Exemple d'obfuscation PHP
La seule technique vraiment valable est la deuxième car elle est réellement irréversible (voir commentaire). Par contre même si l’on ne voit pas le code, certaines données comme les chaînes de caractères sont en clair, mais la pluspart des encodeurs bytecode font aussi de l’obfuscation et dans ce cas pas de problèmes.
Il faut aussi savoir que pour interpréter du bytecode sur un serveur, il est obligatoire d’installer une extension php, et il faut donc avoir la main sur les fichiers de configuration du serveur (php.ini). Par conséquent cette solution n’est pas valable sur des hébergements mutualisés, à moins que l’hébergeur consente à le faire. (par exemple OVH propose Zend Optimizer et Ioncube sur ses mutu, à activer via htaccess).
Pour d’autres hébergeurs ne proposant pas ces fonctionalités, l’obfuscation peut néanmoins dépanner car le code reste tout de même assez dur à déchiffrer (voir la capture au dessus) même si ce n’est pas impossible.
A noter, il existe aussi des solution hybrides, mêlant obfuscation et chiffrage mais elles ne sont pas plus sures pour autant car il faut bien déchiffrer pour pouvoir interpréter le code PHP et donc on peut récupérer le code avant son exécution. De plus l’étape de déchiffrement est couteuse en temps de calcul et imposera au serveur une charge supplémentaire.
A l’inverse, les solutions à base de bytecode sont plus rapides à interpréter que du PHP normal.
Pour conclure cet article, je vous jette pêlemêle quelques liens que j’ai pu glaner. Si vous décidez d’adopter un de ceux-ci, faites attention car certains datent un peu (pas de support PHP5 par exemple) et d’autres sont très chers, mais ça c’est une autre histoire ;)
- http://www.ioncube.com/sa_encoder.php
- http://us2.php.net/manual/fr/ref.bcompiler.php
- http://www.sourceguardian.com/index.html
- http://www.semdesigns.com/index.html
- http://www.nusphere.com/products/nucoder.htm
- http://www.zend.com/fr/products/guard/
- http://www.rssoftlab.com/phpenc.php
- http://www.raizlabs.com/software/phpobfuscator/
- http://www.truebug.com
- http://www.phpshield.com/
- http://www.sourcecop.com
- http://www.byterun.com/
- http://pobs.mywalhalla.net/
- http://phplockit.com/
- http://www.gridinsoft.com/
- http://www.codelock.co.nz/









septembre 10th, 2009 à 10 h 02 min
Alors une petite remarque… le « byte code », c’est bien, mais on le retransforme très facilement en code source PHP (si, si).
C’est pour ça que les encodeurs proposent maintenant en plus l’obfuscation.
D’ailleurs, en cherchant sur le net, on trouve plein de service de décodage.
Je crains en fait que l’article ne soit à peu près complètement faux…
(Si on compare à Java, une classe compilé, c’est du Byte code, un petit coup de Jad et hop on a les sources).
Le résultat d’un « DeZend » par exemple est « impressionnant ».
On verra comme différence que « echo $a . $b » sera devenu « echo $a; echo $b; »… rien qui ne rende le code bien difficile à comprendre.
Enfin, pour plus d’info, se reporter par exemple à la doc de Zend Encoder qui explique pourquoi coder n’est pas sûr et donc pourquoi ils ont rajouté l’obfuscation.
septembre 14th, 2009 à 18 h 23 min
Bien d’abord merci de t’être donné la peine de laisser un commentaire. C’est de loin le plus constructif que j’ai eu. En fait je me doutais un petit peu quand même que nulle protection n’est inviolable.
Je corrigerai l’article quand j’aurai le temps.
@+ cher anonyme