Je suis déconcerté par une demande de mon manager. Je travaille pour une petite startup et nous avons développé une application web à tarif fixe avec un contrat de maintenance pour une BEAUCOUP plus grande entreprise. Connaissant des histoires d'horreur sur la façon dont les grandes entreprises ne paieront leurs factures qu'à la dernière seconde, nous avons décidé que nous aimerions nous protéger en étant en mesure de concéder sous licence cette application Web de manière à ce que si nous ne sommes pas payés, le logiciel ne fonctionne plus.
J'ai déjà vu cela pour des applications de bureau, mais ce sera une application Web qu'elles hébergeront en interne et ne seront pas accessibles depuis Internet.
Quelle est la meilleure approche pour ce faire, nous aimerions qu'elle ait une petite empreinte et souhaiterions pouvoir renouveler la clé de licence qu'ils ont distribuée.
Quelqu'un a-t-il fait quelque chose de similaire? Sommes-nous complètement fous? Quelqu'un a-t-il de meilleures suggestions?
la source
Réponses:
Il existe de nombreuses façons d'implémenter quelque chose comme ça, mais en voici une qui ne devrait pas être trop difficile à faire:
Vous avez besoin d'un site Web accessible au public quelque part qui héberge un fichier contenant les hachages des clés de licence qui ont été mises sur liste noire. La façon dont vous gérez ce fichier dépend de vous, mais le fichier lui-même n'a besoin que d'un hachage par ligne.
Ensuite, de manière récurrente, votre logiciel lance un téléchargement de ce fichier (la plupart des langues côté serveur le prévoient), puis le recherche pour le hachage de la clé de licence installée. S'il est trouvé, l'application sait qu'il doit mourir jusqu'à ce que la liste noire soit supprimée.
MD5 ou similaire plus un secret devraient être suffisants pour cela. Vous pourriez devenir plus sophistiqué et demander à l'application d'envoyer la demande à votre site et de la rechercher dans une base de données à la volée, mais le fichier (pour ce que je suppose serait une courte liste, espérons-le) resterait petit et pourrait être la manière la plus simple.
La partie la plus difficile sera de maintenir l'application morte. Après tout, vous devez stocker cela quelque part en interne, ce qui signifie que si cela est trop évident, il pourrait être facilement renversé, et même si ce n'est pas trop évident, il peut être facilement annulé en restaurant les tables appropriées / des dossiers). C'est pourquoi je suggère également une deuxième méthode de protection.
Cette méthode stockerait "LIVE" ou "DEAD" (ou quelque chose de suffisamment similaire) dans une table ou un fichier, mais encore HASHed. Cela doit être haché avec votre sel ET un horodatage. Chaque fois qu'une page de votre application s'exécute, vérifiez cette valeur avec une version hachée de "LIVE" + sel + horodatage, puis autorisez une plage valide d'horodatages (par exemple, un jour, deux jours, une semaine, un mois, etc. Gardez à l'esprit que plus la plage est large, plus les performances seront difficiles.). Tant que les choses correspondent (ou qu'une correspondance est trouvée), l'application est vivante; sinon, même si la valeur dans le fichier ou la table spéciale est "LIVE", elle sera toujours morte en cas de tentative de restauration à partir de la sauvegarde car l'horodatage tombera en dehors de votre seuil.
En résumé (cela suppose que vous avez une méthode programmatique pour vérifier la validité d'une clé de licence, telle qu'une sorte de somme de contrôle ou une autre méthode):
Maintenant, Dieu sait qu'il y a un million et une façon dont cela peut échouer. Considérez toutes les manières possibles et construisez un système fiable (y compris celui qui suppose que le client a raison si le fichier de liste noire ne peut pas être téléchargé). Testez, testez, testez-le, puis testez-en plus avant de déployer, car si cela se passe mal, vous aurez perdu la confiance de votre client.
la source
license-server.example.com: no route to host
maintenant? Le serveur de licences n'existera peut-être même pas à l'avenir - et ne me dites pas que votre entreprise sera toujours en vie dans vingt ans, ce qui est plutôt improbable statistiquement.Les autres réponses ont déjà fait du bon travail en couvrant le côté technique. Mais veuillez également considérer le côté juridique.
Avez-vous même le droit de bloquer leur application s'ils ne paient pas? Si vous ne l'avez pas mentionné d'avance dans le contrat, vous pourriez ne pas avoir le droit de le faire, même si les paiements expirent (comme vous n'êtes pas nécessairement en droit de reprendre possession de quelque chose que vous avez vendu). En outre, de nombreux pays ont des lois spéciales interdisant la "manipulation de programmes informatiques" - ce que vous faites pourrait être considéré comme tel et pourrait même vous exposer à une responsabilité pénale.
Je vous conseille donc d'en discuter d'abord avec un avocat, pour éviter de vous mettre dans l'eau chaude.
En fin de compte, il serait peut-être préférable de se fier uniquement au système juridique. S'ils ne paient pas, négocient et si cela n'aide pas, poursuivez. Dans de nombreux pays, poursuivre est relativement indolore et bon marché si la situation du contrat est claire (en Allemagne, par exemple, vous pouvez obtenir un Mahnbescheid pour moins de 20 €).
la source
S'ils hébergent en interne, en quoi est-ce différent de tout autre logiciel que vous pourriez leur envoyer? Découvrez ce que vous feriez si vous expédiez, disons, une application d'affichage d'inventaire de bureau, et faites-le.
la source
Cela dépend du système. Avez-vous étendu un framework existant comme Magneto ou avez-vous écrit une application entière à partir de zéro? Si c'est la dernière, la construction d'une exigence de licence n'est pas trop difficile. Vous venez de livrer l'application avec une licence à court terme, une qui expire 45 jours après la facturation, puis vous en donnez une permanente plus tard.
Cela suppose que vous ne retournez pas également la source. :)
la source
Étant donné que le système est hébergé en interne, la plupart des solutions mentionnées ci-dessus impliquant la communication avec un serveur distant peuvent ne pas fonctionner.
Pourquoi ne pas inclure à la place un fichier de licence dans le projet qui inclut une date d'expiration. Une fois que l'horloge système dépasse la date d'expiration, le système cesse de fonctionner. Pour sécuriser le fichier, cryptez le contenu pour éviter toute falsification. Lorsque l'utilisateur paie ou renouvelle pour une année supplémentaire, vous lui envoyez un nouveau fichier de licence.
Notez que si vous utilisez PHP, le code est facilement disponible pour que l'utilisateur puisse le modifier, donc quel que soit le type de sécurité que vous mettez en place, l'utilisateur peut facilement le retirer et le supprimer. Si vous utilisez ASP.NET ou un autre langage compilé, ce n'est pas un problème car le code ne peut pas être modifié.
la source
(Divulgation - Je travaille pour Agilis Software, un fournisseur de systèmes de gestion de licence ).
La solution la plus efficace consiste à utiliser l' activation automatique du produit avec un bail de licence. Hors de la boîte, cela vous permet de:
la source