Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

[Sécurité] Protéger une partie de mon code

par un système de license

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne metalking # Posté le 28/06/2011 à 17:45:32
Knowledge is Power
Avatar

Ville : Bulle
Pays : Suisse

Bonjour,

Je suis actuellement en train de développer un CMS, à la base open-source, mais pour lequel j'aimerais fournir des plugins propriétaires et payants, un peu à l'image de CKEditor par exemple, qui fournit un script gratuit, mais dont on peut étendre les capacités avec le plugin payant CKFinder.

Après quelques fouilles sur le web, je suis tombé sur quelques obfuscators qui visent à rendre le code illisible et difficilement modifiable, mais qui ne constituent pas une protection contre l'utilisation illégale du code. Je me demande donc comment implémenter un système qui protègerait efficacement mon code d'une utilisation non autorisée.

Des idées? Merci par avance! ;)
 
Publicité # Posté le 28/06/2011 à 17:45:32

Hors ligne Martin7738 # Posté le 28/06/2011 à 20:07:20

Ville : Serris
Pays : France métropolitaine

Tu peux inclure les fichiers qui sont sur tes serveurs ?

Image utilisateur
 
Hors ligne metalking # Posté le 28/06/2011 à 20:14:57
Knowledge is Power
Avatar

Ville : Bulle
Pays : Suisse

Hmm éventuellement, mais je vois deux problèmes :
- Le serveur sur lequel tourne mon CMS n'a peut être pas activé allow_url_fopen (ou allow_url_include), ce qui empêcherait de faire un include sur une url.
- Si mon serveur est down pour une raison ou pour une autre, le script ne fonctionne plus du tout. Dans l'idéal j'aimerais que le script fonctionne par défaut quand mon serveur est down.
Édité le 28/06/2011 à 20:19:13 par metalking
 
Hors ligne Ziteak # Posté le 29/06/2011 à 01:22:19
Avatar

Ville : Argeles sur mer
Pays : France métropolitaine

Salut, le problème c'est que pour exécuter le code il faut qu'il sois en clair. Il n'y a pas vraiment de système efficace, tout ce que tu peu faire c'est préciser qu'il s'agit d'un code source sous licence propriétaire et que toute utilisation illégal du code est interdite. La seule façon pour empêcher l'utilisation illégal est de ne pas donner le code, or tu est obligé de le donner. La seule solution reste celle de Martin7738 mais qui nécessiterai une infrastructure dédiée.

Image utilisateur
 
Hors ligne Christele # Posté le 29/06/2011 à 01:54:50
Avatar
Flux RSS

Bonjour,
Juste te dire qu'il n' est pas besoins d'étre hackeur de haut niveau
pour debuguer a la volée l'exécution d'un code.
Par ailleur, a moins d'avoir inventé un concepte révolutionnaire, du php
ça ne vaut pas un commerce !

Avis purement personnel, je te l'accordes :)
Hors ligne metalking # Posté le 29/06/2011 à 08:21:05
Knowledge is Power
Avatar

Ville : Bulle
Pays : Suisse

Ok merci pour ces avis! C'est vrai que c'est un peu critique à faire étant donné que c'est un langage interprété..

Sinon j'ai eu une idée pendant la nuit, dites-moi ce que vous en pensez :

Lorsqu'une personne achète mon script, je lui fournis :
- un fichier php qui est passé par un obfuscator (résultat différent pour chaque client) et qui sert à récupérer la license sur mon serveur
- un fichier encrypté avec une clé qui est en fait la license
- un serial qui me servira à valider la personne et le nom de domaine

Donc le type fait un include du premier fichier. Ce fichier, assez illisible, va faire appel à mon serveur avec le serial, je vais donc vérifier que le type a bien acheté le script, et que la requête vient du nom de domaine correspondant.

Ici je pensais ajouter encore un piège (à définir) pour que si le type essaie de faire la requête lui-même pour récupérer la clé de décryption, je lui autorise pas l'utilisation du script.

Si tout est en ordre, je lui fournis la license qui permettra de décrypter le second fichier (il faudrait qu'il soit stocké dans la mémoire après décryptage et non sur le serveur histoire que le type ne puisse pas en apprécier le contenu).
Finalement le fichier décrypté est exécuté via eval().

L'idée c'est que le type ne doit jamais mettre la main sur la clé de décryption, car la logique du script est dans le fichier encrypté. OK ce n'est pas 100% fiable, mais ça pourrait en décourager certains non?
Concernant eval(), vous pensez que c'est un risque niveau sécurité?

Qu'en pensez-vous?
Édité le 29/06/2011 à 10:41:09 par metalking
 
Hors ligne Ziteak # Posté le 29/06/2011 à 12:51:26
Avatar

Ville : Argeles sur mer
Pays : France métropolitaine

Salut,

La seule "sécurité" efficace dans ton système c'est l'obfuscator. Passer ça c'est très simple de trouver le code. De plus un tel système, pour ne pas que le code sois disponible, il faudrait faire un appel sur ton serveur a chaque chargement du script, ce qui serai très lourd pour ton serveur.

Image utilisateur
 
Hors ligne Christele # Posté le 29/06/2011 à 12:52:13
Avatar
Flux RSS

Oui alors si en plus tu ne comprends rien a la logique serveur / client,
tu n'as aucune chance de progresser !

Dans quelle mmoire tu charge cela :( tu semble oublier que le visiteur de ton "client"
va appeler un PHP sur le serveur du client. Alors il te faut juste lui laisser le modul chez toi
prenons un exemple: La recherche sur un site, je ne connais pas les moteurs de google mais il me
rempli mes pages dans mon style ... a aucun moment je n'ais accés au code
Va sur un des sites que je géres, cherches par exemple karpov
http://www.chess-theory.com/ctw_recherche.php

C 'est sans doute la bonne piste pour toi !
Hors ligne Ziteak # Posté le 29/06/2011 à 12:55:49
Avatar

Ville : Argeles sur mer
Pays : France métropolitaine

Par "client" je pense qu'il voulai parler de la personne qui acheté le plugin, et donc l'administrateur du site qui a donc accès au code.
Mais pour compléter la remarque de lavarenne, en php il est impossible de charger le code en mémoire, il doit FORCEMENT être en claire a un moment ou a un autre, et l'utilisation d'un système de chiffrement serai très superflue puisque l'interception de la clé de déchiffrement serai extrêmement simple.

Image utilisateur
 
Hors ligne Christele # Posté le 29/06/2011 à 14:11:15
Avatar
Flux RSS

Citation : Ziteak

Mais pour compléter la remarque de lavarenne, en php il est impossible de charger le code en mémoire, il doit FORCEMENT être en claire a un moment ou a un autre, et l'utilisation d'un système de chiffrement serai très superflue puisque l'interception de la clé de déchiffrement serai extrêmement simple.

Reste tout de même si tu es trés bon, tu peux développer ton plugin en C++ puis le compiler sous forme de DLL
Il sera alors sur le serveur de son client, qui y fera appel comme par exemple TOUT PDO qui est sous cette forme. :)
Hors ligne metalking # Posté le 30/06/2011 à 11:48:16
Knowledge is Power
Avatar

Ville : Bulle
Pays : Suisse

Merci pour vous réponses.

Je veux pas développer un pugin en C++ car tout le monde n'a pas la possibilité de modifier sa config serveur. Je veux que ce soit utilisable sur la majorité des serveurs.

Mais pour ce qui est du code en mémoire, tu sembles oublier que je peux encrypter le code (je pensais à XOR ou mieux si Mcrypt est dispo) avec une clé secrète, puis faire un eval() sur le code décrypté, du coup le code en clair n'est stocké nulle part à part dans la ram du serveur.. si je me trompe pas.
Mais tu as raison c'est lourd pour le serveur s'il doit à chaque fois le décrypter. Pas une solution viable à long terme.

Des autres idées?

Sinon Ziteak a un peu mieux compris mon problème, en effet le "client" est la personne qui a acheté mon script et qui utilise mon CMS en tant que développeur, pas le visiteur du site (lui ne verra jamais mon code)!

Voila !
Édité le 30/06/2011 à 11:50:46 par metalking
 
Hors ligne Christele # Posté le 30/06/2011 à 21:25:24
Avatar
Flux RSS

Oui j'ais compris cela aussi,
juste je t'ais analysé, (enfin essayé) le parcour entre son client (visiteur de son site)
il ne sait même pas que PDO est la et que ton client a toi aurait implenté ta DLL
C' était pas tout a fait idiot, je crois.Et tout hébergeur pourrait sur les sites ajouter une dll testée !

Mais pas grave, ton choix semble pas mal :)
Hors ligne metalking # Posté le 02/07/2011 à 12:01:35
Knowledge is Power
Avatar

Ville : Bulle
Pays : Suisse

Il y a toujours une question en suspens :

Est-ce que l'utilisation de eval() dans ce contexte est dangereuse? Et puis est-ce que ce ne sera pas un peu gourmand en bande-passante et/ou ressources de faire appel à mon serveur à chaque fois pour obtenir la clé de déchiffrement et de décrypter le code à exécuter?

Merci pour vos réponses!
Édité le 02/07/2011 à 12:06:33 par metalking
 
Hors ligne Christele # Posté le 03/07/2011 à 12:08:16
Avatar
Flux RSS

Bon je reviens aprés réflexion ...
En fait si tu es pret a investir 250 Euros il existe un systéme PRO de développement qui te donne
un résultat complétement crypté !
http://shop.zend.com/fr/studio-server-offer.html

En fait

1) il faudrait que tu développes tes modules
2) tu vends ton module a un client ton_prix :)
3) toi avant de le compiler avec ta clé, tu mets dans ton PHP
Code : PHP
1
2
3
4
<?php
$b=$_SERVER['SERVER_NAME'];
if ( $b!="www.sondomaine.com")   {//=tu le jetes======}
?>

Édité le 03/07/2011 à 12:09:05 par Christele

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx


Lire aussi