Ich bin ratlos über eine Anfrage meines Managers. Ich arbeite für ein kleines Startup und wir entwickelten eine Webanwendung für einen festen Tarif mit einem Wartungsvertrag für ein VIEL größeres Unternehmen. In Kenntnis von Horrorgeschichten darüber, wie große Unternehmen ihre Rechnungen nur bis zur letzten Sekunde bezahlen, haben wir uns entschlossen, uns zu schützen, indem wir diese Webanwendung so lizenzieren können, dass die Software nicht mehr funktioniert, wenn wir nicht bezahlt werden.
Ich habe dies bereits für Desktop-Anwendungen gesehen, es handelt sich jedoch um eine Webanwendung, die intern gehostet wird und nicht über das Internet zugänglich ist.
Was ist der beste Ansatz, um dies zu tun, wir möchten, dass es einen kleinen Platzbedarf hat und die Möglichkeit, den Lizenzschlüssel, den sie verteilt haben, zu erneuern.
Hat jemand etwas Ähnliches gemacht? Sind wir völlig verrückt? Hat jemand bessere Vorschläge?
quelle
Antworten:
Es gibt viele Möglichkeiten, um so etwas zu implementieren, aber hier ist eine, die nicht zu schwierig sein sollte:
Sie benötigen eine öffentlich zugängliche Website, auf der eine Datei mit den Hashes der Lizenzschlüssel gehostet wird, die auf die schwarze Liste gesetzt wurden. Wie Sie diese Datei verwalten, bleibt Ihnen überlassen, aber die Datei selbst muss nur einen Hash pro Zeile enthalten.
Anschließend initiiert Ihre Software in regelmäßigen Abständen einen Download dieser Datei (in den meisten serverseitigen Sprachen ist dies vorgesehen) und durchsucht sie anschließend nach dem Hash des installierten Lizenzschlüssels. Wenn es gefunden wird, weiß die Anwendung, dass es abstürzen sollte, bis die schwarze Liste entfernt wird.
Hierfür sollte MD5 oder ähnliches plus ein Geheimnis ausreichen. Sie könnten schicker werden und die Anwendung die Anfrage direkt an Ihre Site senden lassen und sie in einer Datenbank nachschlagen, aber die Datei (für die ich davon ausgehe, dass es sich hoffentlich um eine kurze Liste handelt) würde hoffentlich klein bleiben und möglicherweise klein sein der einfachste Weg.
Der schwierigere Teil wird sein, die Anwendung tot zu halten. Schließlich muss dies irgendwo intern gespeichert werden, was bedeutet, dass es, wenn es zu offensichtlich ist, leicht unterlaufen werden kann, und selbst wenn es nicht zu offensichtlich ist, kann es leicht durch Wiederherstellen der entsprechenden Tabelle (n) wiederhergestellt werden. Datei (en). Deshalb schlage ich auch eine zweite Schutzmethode vor.
Diese Methode würde "LIVE" oder "DEAD" (oder etwas ausreichend Ähnliches) in einer Tabelle oder einer Datei speichern, aber wieder HASHed. Dies muss mit Ihrem Salz UND einem Zeitstempel gehasht werden. Überprüfen Sie diesen Wert jedes Mal, wenn eine Seite in Ihrer Anwendung ausgeführt wird, mit einer gehashten Version von "LIVE" + salt + timestamp und lassen Sie dann einen gültigen Bereich von Zeitstempeln zu (z. B. einen Tag, zwei Tage, eine Woche, einen Monat usw.). Denken Sie daran, je größer die Reichweite, desto schwerer wird die Leistung.). Solange die Dinge übereinstimmen (oder eine Übereinstimmung gefunden wird), ist die App aktiv. Andernfalls ist der Wert in der speziellen Datei oder Tabelle auch dann "LIVE", wenn versucht wird, eine Wiederherstellung von der Sicherung durchzuführen, da der Zeitstempel außerhalb Ihres Schwellenwerts liegt.
Zusammenfassend (dies setzt voraus, dass Sie über eine programmgesteuerte Methode zur Überprüfung der Gültigkeit eines Lizenzschlüssels verfügen , z. B. eine Prüfsumme oder eine andere Methode):
Nun, meine Güte, es gibt eine Million und eine Möglichkeit, wie dies scheitern kann. Berücksichtigen Sie alle möglichen Möglichkeiten und erstellen Sie ein zuverlässiges System (einschließlich eines, bei dem davon ausgegangen wird, dass der Client richtig ist, wenn die Blacklist-Datei nicht heruntergeladen werden kann). Testen Sie, testen Sie, testen Sie es und testen Sie es dann noch einmal, bevor Sie es bereitstellen. Wenn es schief geht, haben Sie das Vertrauen Ihres Kunden verloren.
quelle
license-server.example.com: no route to host
Was nun? Der Lizenzserver kann nicht einmal existiert irgendwann in der Zukunft - und erzählen Sie mir nicht , dass Ihr Unternehmen wird immer noch in zwanzig Jahren noch am Leben sein, die eher statistisch unwahrscheinlich ist.Die anderen Antworten haben bereits gute Arbeit geleistet, um die technische Seite abzudecken. Bitte beachten Sie aber auch die rechtliche Seite.
Hast du überhaupt ein Recht, ihre App zu blockieren, wenn sie nicht bezahlen? Wenn Sie dies nicht im Vertrag erwähnt haben, haben Sie möglicherweise kein Recht, dies zu tun, selbst wenn Zahlungen ausfallen (als ob Sie nicht unbedingt berechtigt wären, etwas zurückzuerobern, das Sie verkauft haben). Außerdem haben viele Länder spezielle Gesetze, die die "Manipulation von Computerprogrammen" verbieten - was Sie tun, könnte als solches angesehen werden und Sie sogar strafrechtlicher Verantwortung aussetzen.
Ich würde daher raten, dies zuerst mit einem Anwalt zu besprechen, um nicht in heißes Wasser zu geraten.
Am Ende ist es vielleicht besser, sich nur auf das Rechtssystem zu verlassen. Wenn sie nicht zahlen, verhandeln Sie, und wenn das nicht hilft, klagen Sie einfach. In vielen Ländern ist Klagen relativ schmerzfrei und billig, wenn die Vertragslage klar ist (in Deutschland erhalten Sie z Klagen bei zB Mahnbescheid für weniger als 20 € bekommen).
quelle
Inwiefern unterscheidet sich das interne Hosting von anderer Software, die Sie möglicherweise ausliefern? Finden Sie heraus, was Sie tun würden, wenn Sie beispielsweise eine Desktop-Inventar-Anzeigeanwendung ausliefern würden, und tun Sie dies.
quelle
Das hängt vom System ab. Haben Sie ein bestehendes Framework wie Magneto erweitert oder eine ganze Anwendung von Grund auf neu geschrieben? Wenn es das spätere ist, ist es nicht allzu schwierig, eine Lizenzanforderung einzurichten. Sie liefern die Anwendung nur mit einer kurzfristigen Lizenz, die 45 Tage nach Rechnungsstellung abläuft und später eine dauerhafte Lizenz gibt.
Dies setzt voraus, dass Sie die Quelle nicht auch umdrehen. :)
quelle
Da das System intern gehostet wird, funktionieren viele der oben genannten Lösungen, die die Kommunikation mit einem Remote-Server beinhalten, möglicherweise nicht.
Nehmen Sie stattdessen eine Lizenzdatei mit einem Ablaufdatum in das Projekt auf. Sobald die Systemuhr das Ablaufdatum überschreitet, funktioniert das System nicht mehr. Um die Datei zu sichern, verschlüsseln Sie den Inhalt, um Manipulationen zu verhindern. Wenn der Benutzer zahlt oder um ein weiteres Jahr verlängert, senden Sie ihm eine neue Lizenzdatei.
Beachten Sie, dass der Code bei Verwendung von PHP für den Benutzer leicht zu bearbeiten ist. Unabhängig von der Art der Sicherheit, die Sie eingerichtet haben, kann der Benutzer ihn problemlos aufrufen und entfernen. Wenn Sie ASP.NET oder eine andere kompilierte Sprache verwenden, ist dies kein Problem, da der Code nicht geändert werden kann.
quelle
(Offenlegung - Ich arbeite für Agilis Software, einen Anbieter von Lizenzmanagersystemen .)
Die effektivste Lösung besteht darin, die automatische Produktaktivierung mit einem Lizenzvertrag zu verwenden. Mit dieser Funktion können Sie:
quelle