IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Protéger mon code php


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut Protéger mon code php
    Bonjour,

    Je ne sais pas si je poste au bon endroit.

    Je développe des application pour joomla. Il s'agit de modules et composants indépendants qui s'installent dans le CMS.

    Ma question est comment faire pour protéger mon travail? Par un code à saisir ou un enregistrement.

    En fait les gens qui téléchargent doivent s'inscrire, un solution consisterai par vérifier depuis le site du client si il est bien enregistré dans la db de mon site.

    Possible ?

    Merci Cédric

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Qu'entends-tu par protéger ton code ?
    Si quelqu'un achète ton module, tu voudrais qu'il lui soit ensuite impossible de revendre le code ou de le refiler à quelqu'un d'autre. C'est ça ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    tu voudrais qu'il lui soit ensuite impossible de revendre le code ou de le refiler à quelqu'un
    Oui dans ce genre là. Bien que le mot impossible soit un peu fort, disons mon but est d'être dissuasif.

    Existe t'il des classes à implémenter permettant ceci?

    Cédric

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Pour ce qui est de la dissuasion, c'est la licence qui fait office de copyight.
    Maheureusement, ça vaut ce que ça vaut...
    Pour le reste, je n'ai jamais commercialisé de code source php, je ne vais pas être d'une grande aide.
    Mais je vais suivre la conversation, ça peut m'intéresser...

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Il y a plusieurs façon pour vérifier si le script peut être utilisé. Mais cela est-ce vraiment nécessaire ? Car a partir du moment ou un utilisateur dispose du script PHP, il peut le modifier et donc faire sauter la protection.

    Enfin pour peut être faire un système de licence, tu pourrais essayer de passer par une simple fonction qui vérifie le contenu d'une page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    if(file_get_contents("http://tonsite.com/test.php?adresse=".$_SERVER['HTTP_HOST']) != "autorise")) {
          die("L'utilisation du script n'est pas autorisée sur ce domaine.");
    }
    ?>
    Ainsi, la page "test.php" qui reçoit en paramètre "adresse" qui contient l'hôte va effectuer un test dans ta base de donnée pour voir si le site est enregistré. Si c'est le cas, elle va ecrire "autorise".

    Cependant, cela présente quelques inconvénients. Par exemple, si ton site est lent, cela va affecter le script de l'utilisateur. De même, si ton module connait un grand succès, cela va impliquer une grande quantité de requêtes vers ta base de données ...

    Après si tu veux encore plus de sécurité, tu peux crypter ton fichier PHP en utilisant le module de Zend ou IonCube (je crois ?) mais cela nécessite que le serveur de l'utilisateur est le module permettant de lire ce code d'installé, peu pratique donc.

    Nicolas .

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Nicolas N. Voir le message
    Salut,

    Il y a plusieurs façon pour vérifier si le script peut être utilisé. Mais cela est-ce vraiment nécessaire ? Car a partir du moment ou un utilisateur dispose du script PHP, il peut le modifier et donc faire sauter la protection.

    Enfin pour peut être faire un système de licence, tu pourrais essayer de passer par une simple fonction qui vérifie le contenu d'une page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    if(file_get_contents("http://tonsite.com/test.php?adresse=".$_SERVER['HTTP_HOST']) != "autorise")) {
          die("L'utilisation du script n'est pas autorisée sur ce domaine.");
    }
    ?>
    Ainsi, la page "test.php" qui reçoit en paramètre "adresse" qui contient l'hôte va effectuer un test dans ta base de donnée pour voir si le site est enregistré. Si c'est le cas, elle va ecrire "autorise".

    Cependant, cela présente quelques inconvénients. Par exemple, si ton site est lent, cela va affecter le script de l'utilisateur. De même, si ton module connait un grand succès, cela va impliquer une grande quantité de requêtes vers ta base de données ...

    Après si tu veux encore plus de sécurité, tu peux crypter ton fichier PHP en utilisant le module de Zend ou IonCube (je crois ?) mais cela nécessite que le serveur de l'utilisateur est le module permettant de lire ce code d'installé, peu pratique donc.

    Nicolas .
    La vérification par url effectuée en deux lignes sera aussi virée en deux secondes.
    Le cryptage pour générer du pseudo-code est une idée qui me semble pas mal.
    Le reverse engineering n'est pas très difficile, mais cela en rebutera plus d'un.

    Un article sur le sujet : http://maxime-ohayon.developpez.com/...els/bcompiler/

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Oui, c'est ce que je dis, a partir du moment ou l'utilisateur dispose des sources, il peut virer ce qu'il souhaite. A moins que le module soit bien gros et que le script soit caché dans un des fichiers. A bout d'un certain temps, l'utilisateur arrêtera peut être de chercher, mais techniquement aucune solution comme ça n'est fiable à 100%, sauf peut être le cryptage de la source.

    Cependant, certains scripts commerciaux utilisent un système qui vérifient la licence, je pense notamment à IPB. Comment procèdent-ils ?

    Nicolas .

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    Merci de vos messages, mais je penses que la solution du 'file_get_contents' qui vient vérifier sur mon serveur est très bien, meme si la protection n'est pas efficace, cela permettra de dissuader plus d'un utilisateur, surtout si le code est un peu caché et tordu.

    La solution de iOncube me parait bien lourde pour une application vendu 30€ !

    Merci de vos messages, et si quelqu'un a une meilleure idée

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il existe aussi ZendGuard mais c'est le meme principe : la source est chiffrée.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    Non l'idée pour moi est simplement de dissuader car, sauf erreur avec une licence GPL (dev pour joomla), le code doit être clair.

  11. #11
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 476
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 476
    Points : 4 687
    Points
    4 687
    Par défaut
    salut,
    je suis peut-etre a cote de la plaque.... l'obfuscation ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    Je précise, je cherche une solution linux, mais l'obfuscation serai un excellent début.

  13. #13
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Et pourquoi pas monter un web service ?
    REST ou SOAP peu importe.

  14. #14
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    En tant que simple noob, mon avis vaut ce qu'il vaut:
    La solution à base de file_get_contents telle qu'elle est proposée ici ne fonctionnerait que si allow_url_fopen est activée dans php. C'est loin d'être le cas sur toute les configs.

    Si le code source n'est pas crypté avec une extension (payante) comme ionCude Encoder (par exemple), tu ne pourras jamais être sûr qu'il n'y a pas un petit malin qui utilise ton code malhonnètement.
    Rendre le code illisible (obfuscation) compliquera ton developpement et, qui sait, galvanisera ce même petit malin qui se fera un plaisir de "casser" ta protection.

    Communiquer avec ton serveur distant pour vérifier que l'utilisateur "a le droit" d'utiliser le code (le principe du file_get_contents) sera un gouffre en terme de performance si une telle vérification se fait redondante et que ton module joomla n'a rien d'autre à faire avec ton serveur (tu ne fournis pas un service distant).

    D'après ce que j'ai vu à droite et à gauche, quand les sources ne sont pas chiffrées (encodées) sérieusement, il s'agit surtout d'une question de licence et de confiance.

  15. #15
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    La vérification par url effectuée en deux lignes sera aussi virée en deux secondes.
    Le cryptage pour générer du pseudo-code est une idée qui me semble pas mal.
    Le reverse engineering n'est pas très difficile, mais cela en rebutera plus d'un.

    Un article sur le sujet : http://maxime-ohayon.developpez.com/...els/bcompiler/
    Après réflexion la solution du file_get_contents() ne me semble pas contournable, tu pensais à quoi s.n.a.f.u ?
    [edit] Ah ok, l'idée était juste de vérifier l'autorisation mais de donner quand même le code source. De mon côté je pensais évaluer le code à la volée. Mais en fait, après re-réflexion (lol) rien n'empêche l'utilisateur d'afficher le code au lieu de l'évaluer.

    Les seuls problèmes que je vois sont le allow_url_fopen (souvent via le safe mode) et le trafic sur le serveur source.
    Y a aussi la possibilité d'évaluer du code stocké dans une BDD mais il faut un accès externe au serveur de BDD ce qui est encore plus rare que le allow_url_fopen à on, il me semble.

  16. #16
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Donc,
    il y aurait peut-être une solution, c'est d'évaluer le code ou une partie sur le serveur distant, puis d'évaluer à nouveau sur le serveur du client, ou un truc du style. Dans ce cas ça devient vraiment lourd.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2007, 18h05
  2. Erreur dans mon code php que j'arrive à voir
    Par babouba dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2007, 16h48
  3. Réponses: 6
    Dernier message: 19/07/2006, 13h48
  4. Réponses: 2
    Dernier message: 12/05/2006, 11h08
  5. Erreur dans mon code PHP
    Par jack_1981 dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo