Assurer la protection de ses scripts PHP
Lorsque vous développez en PHP, il est important de protéger vos scripts pour empêcher les internautes mal intentionnés de les modifier ou les copier n’importe comment. Voici ce que vous devez faire pour être à l’abri de telle manipulation.
Encoder ses scripts
L'encodage permet de rendre illisible le code source d'un script sans en changer son comportement, le script encodé continuera de s'exécuter comme avant. Il y a tout de même une contrainte : votre script doit entièrement être en PHP, pas de mélange PHP + HTML dans le même fichier.
Voici comment l’encodage fonctionne: On commence par lire entièrement le fichier à encoder et on enlève les balises <?php et ?>, normalement il n'y en a que deux, une au début et une à la fin du fichier.
Ensuite on fait un simple encodage en base 64 du script, on mélange le tout en utilisant une table de correspondance.
Enfin, il faut ajouter le décodeur et à enregistrer le tout dans un autre fichier. Le décodeur fait l'opération inverse : il remet les données dans le bon ordre, applique une base_64decode() et lance le script grâce à un eval()
Encoder ses scripts
L'encodage permet de rendre illisible le code source d'un script sans en changer son comportement, le script encodé continuera de s'exécuter comme avant. Il y a tout de même une contrainte : votre script doit entièrement être en PHP, pas de mélange PHP + HTML dans le même fichier.
Voici comment l’encodage fonctionne: On commence par lire entièrement le fichier à encoder et on enlève les balises <?php et ?>, normalement il n'y en a que deux, une au début et une à la fin du fichier.
Ensuite on fait un simple encodage en base 64 du script, on mélange le tout en utilisant une table de correspondance.
Enfin, il faut ajouter le décodeur et à enregistrer le tout dans un autre fichier. Le décodeur fait l'opération inverse : il remet les données dans le bon ordre, applique une base_64decode() et lance le script grâce à un eval()
Voici le code de l'encodeur :
$nom_fichier = 'mon_script_a_encoder.php';
$fichier = trim(file_get_contents($nom_fichier));
$fichier = preg_replace("/^<\?(php)?/", '', $fichier);
$fichier = preg_replace("/\?>$/", '', $fichier);
echo '<h1>Encodage</h1>';
echo '<p>Nom : '.$nom_fichier.'</p>';
$b64 = base64_encode($fichier);
echo '<p>Base 64 : '.$b64.'</p>';
$tr = strtr($b64, " kCV]4m.DNvM>lstIKLBE6}ghf8
[QAowPSR9ibX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd",
"ACv.sfKXY{dEn58wjIBToFUtb9>gL}=kqeZ0RuD[4lz
Om<12PyHSWJGp7MaiVQr/cN]h63x");
echo '<p>Translation : '.$tr.'</p>';
$enc = "\$__c='".$tr."';";
$enc .= "\$__s=strtr(\$__c,\"ACv.sfKXY{dEn58wjI
BToFUtb9>gL}=kqeZ0RuD[4lz Om<12PyHSWJGp7MaiVQr/
cN]h63x\",\" kCV]4m.DNvM>lstIKLBE6}ghf8[QAowPSR9i
bX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd\");";
$enc .= '$__d=strrev("edoced_46esab");eval(\'$__
x=$__d("$__s");\');eval($__x);';
echo '<h1>Résultat</h1>';
echo '<textarea cols="100" rows="10">';
echo '<?php '.$enc.' ?>';
echo '</textarea>';
$nom_fichier = 'mon_script_a_encoder.php';
$fichier = trim(file_get_contents($nom_fichier));
$fichier = preg_replace("/^<\?(php)?/", '', $fichier);
$fichier = preg_replace("/\?>$/", '', $fichier);
echo '<h1>Encodage</h1>';
echo '<p>Nom : '.$nom_fichier.'</p>';
$b64 = base64_encode($fichier);
echo '<p>Base 64 : '.$b64.'</p>';
$tr = strtr($b64, " kCV]4m.DNvM>lstIKLBE6}ghf8
[QAowPSR9ibX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd",
"ACv.sfKXY{dEn58wjIBToFUtb9>gL}=kqeZ0RuD[4lz
Om<12PyHSWJGp7MaiVQr/cN]h63x");
echo '<p>Translation : '.$tr.'</p>';
$enc = "\$__c='".$tr."';";
$enc .= "\$__s=strtr(\$__c,\"ACv.sfKXY{dEn58wjI
BToFUtb9>gL}=kqeZ0RuD[4lz Om<12PyHSWJGp7MaiVQr/
cN]h63x\",\" kCV]4m.DNvM>lstIKLBE6}ghf8[QAowPSR9i
bX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd\");";
$enc .= '$__d=strrev("edoced_46esab");eval(\'$__
x=$__d("$__s");\');eval($__x);';
echo '<h1>Résultat</h1>';
echo '<textarea cols="100" rows="10">';
echo '<?php '.$enc.' ?>';
echo '</textarea>';