Martwi mnie prośba mojego kierownika. Pracuję dla małego startupu i opracowaliśmy aplikację internetową o stałej stawce z umową serwisową dla DUŻEJ firmy. Znając horrory o tym, jak duże firmy będą płacić rachunki tylko do ostatniej sekundy, zdecydowaliśmy, że chcielibyśmy się zabezpieczyć, mogąc licencjonować tę aplikację internetową w taki sposób, że jeśli nie otrzymamy zapłaty, oprogramowanie nie będzie już działać.
Widziałem to wcześniej w przypadku aplikacji komputerowych, jednak będzie to aplikacja internetowa, którą będą hostować wewnętrznie i nie będą dostępne z Internetu.
Jak najlepiej to zrobić, chcielibyśmy, aby miał mały ślad i chcielibyśmy odnowić dystrybuowany klucz licencyjny.
Czy ktoś zrobił coś podobnego? Czy całkowicie oszaleliśmy? Czy ktoś ma jakieś lepsze sugestie?
źródło
Odpowiedzi:
Istnieje wiele sposobów realizacji czegoś takiego, ale oto jeden, który nie powinien być zbyt trudny:
Potrzebujesz gdzieś publicznie dostępnej witryny, na której znajduje się plik zawierający skróty kluczy licencyjnych, które zostały umieszczone na czarnej liście. Sposób zarządzania tym plikiem zależy od Ciebie, ale sam plik musi mieć tylko skrót w wierszu.
Następnie oprogramowanie regularnie inicjuje pobieranie tego pliku (większość języków po stronie serwera to umożliwia), a następnie wyszukuje hash zainstalowanego klucza licencyjnego. Jeśli zostanie znaleziony, aplikacja wie, że powinna umrzeć, dopóki czarna lista nie zostanie usunięta.
MD5 lub podobny plus sekret powinny być do tego wystarczające. Możesz stać się bardziej kreatywny i poprosić aplikację o wysłanie żądania do Twojej witryny i przeglądanie go w bazie danych w locie, ale plik (na to, co, mam nadzieję, będzie krótką listą), pozostanie mały i może być najłatwiejszy sposób.
Najtrudniejsze będzie utrzymanie martwej aplikacji. W końcu musisz to gdzieś przechowywać wewnętrznie, co oznacza, że jeśli jest to zbyt oczywiste, można je łatwo obalić, a nawet jeśli nie jest to zbyt oczywiste, można je łatwo przywrócić, przywracając odpowiednie tabele / akta). Dlatego proponuję również drugą metodę ochrony.
Ta metoda przechowuje „LIVE” lub „DEAD” (lub coś wystarczająco podobnego) w tabeli lub pliku, ale ponownie HASHed. To musi być zaszyfrowane solą ORAZ datownikiem. Za każdym razem, gdy strona aplikacji jest uruchomiona, sprawdź tę wartość za pomocą zaszyfrowanej wersji „LIVE” + sól + znacznik czasu, a następnie zezwól na prawidłowy zakres znaczników czasu (na przykład jeden dzień, dwa dni, tydzień, miesiąc itp. Należy pamiętać, że im większy zasięg, tym mocniejsze uderzenie.). Tak długo, jak rzeczy się zgadzają (lub znaleziono dopasowanie), aplikacja jest aktywna; w przeciwnym razie, nawet jeśli wartość w specjalnym pliku lub tabeli to „NA ŻYWO”, nadal będzie martwa, jeśli nastąpi próba przywrócenia z kopii zapasowej, ponieważ znacznik czasu spadnie poza próg.
Podsumowując (zakłada to, że masz programową metodę sprawdzania ważności klucza licencyjnego, taką jak suma kontrolna lub inna metoda):
Teraz dobroć wie, że istnieje milion i jeden sposób, w jaki może to zawieść. Rozważ wszystkie możliwe sposoby i zbuduj niezawodny system (w tym taki, który zakłada, że klient ma rację, jeśli nie można pobrać pliku czarnej listy). Przetestuj, przetestuj, przetestuj, a następnie przetestuj jeszcze trochę przed wdrożeniem, ponieważ jeśli pójdzie nie tak, stracisz zaufanie klienta.
źródło
license-server.example.com: no route to host
Co teraz? Serwer licencji może nawet nie istnieć w przyszłości - i nie mów mi, że Twoja firma będzie nadal żyła za dwadzieścia lat, co jest raczej statystycznie nieprawdopodobne.Inne odpowiedzi już wykonały dobrą robotę, obejmując stronę techniczną. Ale proszę również wziąć pod uwagę stronę prawną.
Czy masz nawet prawo zablokować ich aplikację, jeśli nie zapłacą? Jeśli nie wspomniałeś o tym z góry w umowie, możesz nie mieć do tego prawa, nawet jeśli płatności wygasną (jakbyś niekoniecznie miał prawo do odzyskania czegoś, co sprzedałeś). Ponadto w wielu krajach obowiązują specjalne przepisy zabraniające „manipulacji programami komputerowymi” - to, co robisz, może być uznane za takie, a nawet narazić cię na odpowiedzialność karną.
Radzę więc najpierw porozmawiać o tym z prawnikiem, aby uniknąć wpadnięcia do gorącej wody.
W końcu lepiej byłoby polegać na systemie prawnym. Jeśli nie płacą, negocjują, a jeśli to nie pomoże, po prostu pozwać. W wielu krajach pozywanie jest stosunkowo bezbolesne i tanie, jeśli sytuacja w umowie jest jasna (w Niemczech np. Można dostać Mahnbescheida za mniej niż 20 €).
źródło
Jeśli hostują one wewnętrznie, czym różni się od innych programów, które możesz im dostarczyć? Zastanów się, co byś zrobił, gdybyś dostarczył, powiedzmy, aplikację do wyświetlania ekwipunku na komputery i zrób to.
źródło
To zależy od systemu. Czy rozszerzyłeś istniejący framework, taki jak Magneto, czy napisałeś całą aplikację od zera? Jeśli tak jest później, budowanie wymagań licencyjnych nie jest zbyt trudne. Po prostu dostarczasz aplikację z licencją krótkoterminową, która wygasa 45 dni po wystawieniu rachunku, a następnie dajesz ją na stałe później.
Zakłada się, że nie przerzucasz również źródła. :)
źródło
Biorąc pod uwagę, że system jest hostowany wewnętrznie, wiele wyżej wymienionych rozwiązań obejmujących komunikację ze zdalnym serwerem może nie działać.
Zamiast tego dołącz do projektu plik licencji zawierający datę wygaśnięcia. Gdy zegar systemowy przekroczy datę wygaśnięcia, system przestaje działać. Aby zabezpieczyć plik, zaszyfruj zawartość, aby zapobiec manipulacji. Gdy użytkownik płaci lub odnawia na kolejny rok, wysyłasz mu nowy plik licencji.
Pamiętaj, że jeśli używasz PHP, kod jest łatwo dostępny do edycji przez użytkownika, więc bez względu na to, jakie zabezpieczenia wprowadzisz, użytkownik może łatwo wejść i usunąć go. Jeśli używasz ASP.NET lub innego skompilowanego języka, nie stanowi to problemu, ponieważ kodu nie można zmodyfikować.
źródło
(Ujawnienie - Pracuję dla Agilis Software, dostawcy systemów zarządzania licencjami ).
Najskuteczniejszym rozwiązaniem jest użycie automatycznej aktywacji produktu z leasingiem licencji. Po wyjęciu z pudełka pozwala to na:
źródło