8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis nouveau sur le forum, si mon topic n’est pas dans la bonne section, je m'en excuse.


Donc, je suis en train de réaliser un CMS non Open Source que je pense vendre par la suite, et j'ai quelle que questions au niveau sécurité, code source et sa vente.


En gros, j'aurais deux types de clients:

1 - La personne achète tout par moi, site, nom de domaine et hébergement.
2 - La personne achète juste le site par moi, vu qu'il dispose du reste (ndd, heb).

Dans le cas 1, j'effectuer une sorte de location du CMS. Et je dis dans le contrat de vente, que le CMS n'est pas Open Source, donc, il n'aura pas accès à ces fichiers présent sur le serveur.


Dans le cas 2, je ne peux pas effectuer une location de mon CMS, je suis obligé de lui vendre, et donc là, Open Source ou pas, il aura accès à ces fichiers. Et ce que je ne trouve pas bon, vu que c'est le même CMS pour tous les autres sites.


Je veux bien croire que tout cela parait confus, ou dur à comprendre.
Alors, selon vous, je peux dire au client 1 qu'il n'aura pas accès à ces fichiers.

Et pour le client 2, comment je peux faire.


J'espère que vous comprendrez, sinon, je suis à votre disposition.

En vous remerciant par avance

Cordialement

PS: si vous avez des liens juridique, ou autre, je suis preneur.
Hello, pour ta problématique du 2, vu que ton client a accès à tes fichiers, tu ne peux faire que du cryptage (ou encodage) et de l'obfuscation :

1) L'obfuscation de code. Ton code est fonctionnel, mais difficilement lisible (changement des noms de variables en d'autres moches et pas parlante, idem pour les fonctions, etc..), et tu perds en performance (ex: rajout d'instructions bidon pour rendre difficile le retro engineering).

2) Le cryptage de ton code par un algorithme maison. Seule la fonction de décodage reste disponible au sein de ton appli. Toutes tes pages de script ont du coup la forme :

<?php eval(decoder("MONCODECRYPTE")); ?>

Et "MONCODECRYPTE" vient de : encoder("CODE_CLAIR").


De cette manière, toi tu gardes tous les fichiers en clair, la fonction d'encodage et décodage, et tu ne file à tes clients que les fichiers eval(decrypter(...)) et seulement la fonction de décryptage.

Mais comme je l'ai déjà dit, ces techniques sont à éviter car contre performantes, et ne protègent pas à 100% ton code: le décryptage est toujours possible, et d'autant plus facile que ta fonction de cryptage est mauvaise !


Juste à titre d'information, le marché des CMS est déjà saturé, avec des références dans quasi tous les domaines, et des communautés nombreuses. Bonne chance pour imposer un inconnu à tes clients, qui seront d'autant plus dépendants de toi et des upgrades que tu voudras/pourras bien faire...
Modifié par Zed13 (01 Mar 2013 - 12:56)
Bonjour,

Je me doute bien que cela peux reduire les performances, mais bon, pas de beaucoup.

Après, le cryptage des fichiers HTML servent a rien, vue que c'est du statique, mais pour du code php, avec des variables, le cryptage prend tout sont sens.
Après, du moment qu'on a pas la clé de décryptage, impossible de voir le code en clair.


Après, je sais très bien qu'il existe plein de CMS, j'utilise Wordpress de tant en tant.
Mais bon, une fois créer mon cms, je compte pas le mettre OpenSource, et faire concurrence au autre (joomla, drupal...)



A l'heure actuel, je suis plus dans la recherche de comment crypter un fichiers php.
J'ai pus voir que certains fichiers été crypter en base64.
<?php $o=" ICI ";eval(base64_decode(" ET LA"));return; ?>

Ce type de cryptage a besoin d'une clé pour être décrypter ?


Encore merci pour votre aide
Modifié par alexis38 (01 Mar 2013 - 13:20)
J'ai fait de l'abus de langage, quand je parle cryptage, il faut plutôt voir ça comme de l'encodage. Mais rien ne t'empêche d'utiliser les 2 techniques pour brouiller les pistes.

Et ce qu'il faut comprendre c'est que ton code encodé doit être décodé par le système (ie si tu utilises du cryptage, il FAUT passer la clef à ton client dans les fichiers pour décrypter le message et exécuter le php). Donc le client peut quoiqu'il advienne finir par avoir le code source clean sous les yeux. C'est pourquoi il faut utiliser l'obfuscation de code en plus de l'encodage.

Base64 n'utilise pas de clef, c'est du codage. L'utiliser en l'état ne sert strictement à rien, d'autant plus que tu indiques dans le code source comment décrypter la chaine codée.
Il faut utiliser des chaines de caractères mais codées avec un autre formalisme (hexadécimal, valeur décimale ASCII....), dans le styme :

$z7klmlklm123457jl="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";
@eval($z7klmlklm123457jl("CHAINE_ENCODEE"));



Plus en détails:

La fonction d'encodage


function encode($chaine_clair);

echo encode("<?php function test(){echo 'toto';}  test();");

//Retour à l'écran -exemple- : a235frsglxgjtlkg/;557765sqeazpoaezp



La fonction de décodage (à obfusquer pour éviter que le client ne trouve l'algo de codage trop facilement, et puisse lui même faire des modifs).


function decode($chaine_decodee);

echo decode("a235frsglxgjtlkg/;557765sqeazpoaezp");

//Retour à l'écran : <?php function test(){echo 'toto';}  test();
//On a donc accès au code source


Pour les personnes ayant fait cette bidouille, si tu veux leur cacher ton code, il faut l'obfusquer.



function obfusquer($chaine_clair);

echo obfusquer("<?php function test(){echo 'toto';}  test();");

//Retour à l'écran : <?php function 1234597(){$456789=0;for($456789;$456789<3;$456879++){echo '';}echo "\x74 \x6f \x74 \x6f";}  1234597();
//On a donc accès au code source, mais pas exploitable tel quel


Et la fonction de désobfuscation. Quand tu la donnes au client, il faut elle même l'obfusquer pour éviter qu'il remonte trop facilement à la fonction d'obfuscation (tu gardes la version en clair pour toi).

function desob($chaine_ob);
echo desob("<?php function 1234597(){$456789=0;for($456789;$456789<3;$456879++){echo '';}echo "\x74 \x6f \x74 \x6f";}  1234597();");

//Retour à l'écran de :  <?php function test(){echo 'toto';}  test();



Pour coder ta page claire en codée:
$chaine_encodee = encode(obfusquer($code_en_clair));


Et du côté client :
<?php eval(desob(decode($chaine_encodee)));


En résumé
L'obfuscation c'est le côté vers lequel tu dois orienter tes recherches, et pour le mettre en place, il faut, entre autres, utiliser l'encodage.
Mettre au point un système d'obfuscation efficace n'est pas facile, il faut avoir un système d'encodage qui résiste à l'analyse (du coup, faut utiliser les mathématiques pour concevoir un système: accessible en temps polynomial à partir de sa fonction decode, mais remontable à sa fonction encode en temps exponentiel).
Donc pour faire simple, si tu es suffisamment balèze pour protéger ton code, fais le, sinon, laisse le tel quel et évite de perdre du temps sur des protections inutiles, et tourne toi plutôt vers la solution des licences... (ça n'empêchera pas les modifs, mais tu auras la loi de ton côté)

Théorie de l'obfuscation: http://www.unixgarden.com/index.php/misc/techniques-dobfuscation-de-code-chiffrer-du-clair-avec-du-clair
Site d'obfuscation automatique: http://fopo.com.ar/
Discussion sur son déplombage (ie contre l'obfuscation de merde):
http://www.seoblack-inside.com/decoder-automatiquement-code-php-obfusquer/
Autres sources: tout ce qui touche à la création de code malicieux
Dacord.

Mais c'est quand même bizarre, dans un logiciel, j'ai juste accepter l'encodage, et j'ai eu le rendu suivant:

<?php $OOO000000=urldecode('%66%67%36%73%62%65%68%70%72%61%34%63%6f%5f%74%6e%64');$GLOBALS['OOO0000O0']=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5}.$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$GLOBALS['OOO0000O0'].=$GLOBALS['OOO0000O0']{3}.$OOO000000{11}.$OOO000000{12}.$GLOBALS['OOO0000O0']{7}.$OOO000000{5};?><?php /* Copyright 2013 */$GLOBALS['OOO000O00']=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};$GLOBALS['O0O000O00']=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14};$GLOBALS['O0O000O00']=$O0O000O00.$OOO000000{3};$GLOBALS['O0O00OO00']=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};$GLOBALS['OOO00000O']=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};$OOO0O0O00=__FILE__;$OO00O0000=0x6c;eval($GLOBALS['OOO0000O0']('JE8wMDBPME8wMD0kR0xPQkFMU1snT09PMDAwTzAwJ10oJE9PTzBPME8wMCwncmInKTskR0xPQkFMU1snTzBPMDBPTzAwJ10oJE8wMDBPME8wMCwweDUxOCk7JE9PMDBPMDBPMD0kR0xPQkFMU1snT09PMDAwME8wJ10oJEdMT0JBTFNbJ09PTzAwMDAwTyddKCRHTE9CQUxTWydPME8wME9PMDAnXSgkTzAwME8wTzAwLDB4MWE4KSwnYVMxeWV4b2xuZnJpMkNBRVZjazl2Ump0MDVzOElOVEpMS09GWFlCYkRkR2dIaE1tUHBRcVV1V3daejM0NjcrLz0nLCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJykpO2V2YWwoJE9PMDBPMDBPMCk7'));return;?>gqsyfe7E2ySE2ySE2yuqNlfJIBRP8oxF5kLbtu7okvpxtu6bi1nbnOZX9U7E2e6P9qaPiOnbnOPXcUpEVXx2vuHb9U7E2yaP2e6PfuUDfeN29UfS9xC8fU7E9qaP2yaP9QNNr1cl9e71Vvp9jQNE2e6P2e7E2yabtkLX9qaP2e6P9qaPi1cE9qaP9qaP2yadi1NKvqxz5tKm8ozBIBXQVUxxRBCgAt5ksbVPCt2ZkvzvkXpi9U50jvfOcocl5UKD9juVIxxpRtRtNud32qVWCQHmEkIHfUx1VUcxcXNnkvdi9euA9uScvYCvRR5tjxYs0jfF5oRB5WKdsBhH8jzmIlxQIwcuNbNZTtDP29nqCyvWCqLzrQ6brkXdAW5F8o7q5kLX9qaP2e6P9qaPr9hYNBxHr1cE9qaP9qaP9qadAP==yVdd8BCHNjcYn1cl9e71Vvp9jQNE9U6P2yaP9qabtkLbj9nzNRdh8oz22XzW0BusIxdzCtNKkee7fQX4yVdY0WKmn1cfkvYfkvYfkvYfkjP4uExiiZhORShQ


Et quand j'essaye de décoder avec des base64, ou autre, j'obtient pas ma source lisible.

Regarder, et dite moi si vous arriver a trouver la source lisible.

Encore merci
Je trouve ça en décodant ta source :


include 'config/config.php';
echo $IIIIIIIIIIIl;


Je sais pas si tu as nommé ta variable '$IIIIIIIIIIIl' ou si c'est parce que tu as encodé le fichier config aussi. Mais c'est ton code source.
Modifié par jb_gfx (01 Mar 2013 - 19:52)
Dacord, c'est sa

Peux tu me dire comment tu a trouver cela ?
Un site qui decode le base64 ? Sur quelle partie du code tu a trouver sa aussi ?

Encore merci pour ton aide

Sinon, il existe aussi un site qui vend un CMS crypter: WHMCS.
Un de leurs fichier resemble a sa: ICI

Et la, pour le decoder, je pense pas que cela soit facile
Modifié par alexis38 (01 Mar 2013 - 21:24)
Je pense qu'il y a un mal entendu, je m'étonne pas du fait du base64 qui est dur à rendre lisible. Au contraire, c'est ce que je veux.

Ensuite, j'ai bien vue que le code de WHMCS à été crypter par ioncube. Je sais encore lire.

Et enfin, merci pour le lien, je vais le regarder
alexis38 a écrit :

Peux tu me dire comment tu a trouver cela ?


J'ai juste regardé ce que faisais le code pour déchiffrer la source et j'ai affiché le résultat. Pour le base64 tu as une fonction en PHP qui permet de le décoder (base64_decode()).

De toute façon avec ce genre d'encodage, le script décode la source avant de l’exécuter donc niveau protection c'est zéro. Si tu veux protéger ton code source il faut passer par un encodeur genre Zend Guard.
Modifié par jb_gfx (02 Mar 2013 - 14:57)
alexis38 a écrit :
Je pense qu'il y a un mal entendu, je m'étonne pas du fait du base64 qui est dur à rendre lisible. Au contraire, c'est ce que je veux.


En effet désolé !