Рішення ліцензійних ключів у веб-додатку, який найкращий підхід?


14

Мене спотикає запит мого менеджера. Я працюю для невеликого стартапу, і ми розробили веб-додаток за фіксованою ставкою з угодою про технічне обслуговування для МНОГО більшої компанії. Знаючи історії жахів про те, як великі компанії будуть платити свої рахунки лише до останньої секунди, ми вирішили, що хотіли б захистити себе, маючи можливість ліцензувати цю веб-програму таким чином, що якщо нам не виплатять, програмне забезпечення більше не працює.

Я вже бачив це раніше для настільних додатків, однак це буде веб-додаток, в якому вони розміщуватимуться всередині країни та не будуть доступні з Інтернету.

Який найкращий підхід для цього, ми хотіли б, щоб він мав невеликий слід і хотіли б можливість поновити ліцензійний ключ, який вони розповсюдили.

Хтось робив щось подібне? Ми зовсім не з розуму? Хтось має кращі пропозиції?


Для того, щоб зробити це правильно , ви будете мати потребу в БАГАТО часу (або вони просто розірвати його). Набагато дешевше купувати продукт, призначений для захисту програм Java. В іншому випадку просто зробіть ліцензію фрагмент коду байта Java, який програма зчитує, а потім діє вгору.

Це те, чого я боявся, я буду розглядати сторонні рішення, однак ми вже болісно переживаємо.
maple_shaft

Тоді просто змусьте пройти болісно повільно через 2 тижні після належної оплати.

@ Thorbjørn, LOL !! ^ _ ^ Наскільки спокусливим, як це було б, цей проект є лідером збитків, щоб спробувати створити додатковий бізнес з цією компанією. Найвища якість має НАЙБІЛЬШЕ значення. У той же час, ми не хочемо, щоб вони повністю перекрутили, поки ми шукаємо медовий горщик.
maple_shaft

@maple, звучить як поганий бізнес-план. Потім залиште зібрані гроші бухгалтерам і не розглядайте питання про доставку шкідливих програм.

Відповіді:


9

Існує багато способів реалізувати щось подібне, але ось такий, який не повинен бути надто важким:

Вам потрібен загальнодоступний веб-сайт, де розміщується файл, що містить хеші ліцензійних ключів, які потрапили у чорний список. Як ви керуєте цим файлом, залежить від вас, але для самого файлу потрібно мати лише хеш на рядок.

Потім на повторюваній основі ваше програмне забезпечення ініціює завантаження цього файлу (для цього передбачено більшість мов на сервері), а потім здійснює пошук у ньому хеша встановленого ліцензійного ключа. Якщо його знайдуть, то програма знає, що вона повинна померти, поки не буде видалено чорний список.

MD5 або подібний плюс секрет повинен бути достатнім для цього. Ви можете стати фантазією і змусити програму надіслати запит на ваш сайт, і ви під час пошуку шукаєте його в базі даних, але файл (на що я, мабуть, сподіваюся, це буде короткий список), сподіваємось, він залишиться невеликим і може бути найпростіший спосіб.

Важкою частиною буде збереження заявки мертвою. Зрештою, ви повинні зберігати це десь всередині, а це означає, що якщо це занадто очевидно, це може бути легко знищено, і навіть якщо це не надто очевидно, його можна легко повернути, відновивши відповідну таблицю / таблицю / файл (и). Тому я пропоную також другий спосіб захисту.

Цей метод зберігав би "LIVE" або "DEAD" (або щось досить схоже) у таблиці чи файлі, але знову HASHed. Це потрібно перемішати з сіллю І часовою позначкою. Щоразу, коли запускається сторінка вашої програми, перевіряйте це значення за допомогою хешованої версії "LIVE" + сіль + часова мітка, а потім дозвольте дійсний діапазон часових позначок (наприклад, один день, два дні, один тиждень, один місяць тощо). Майте на увазі, чим більший діапазон, тим складніше буде сприйняття.) Поки речі збігаються (або знайдено збіг), додаток живе; в іншому випадку, навіть якщо значення в спеціальному файлі або таблиці є "LIVE", воно все одно буде мертвим, якщо буде спроба відновлення з резервної копії, оскільки часова мітка випаде за ваш поріг.

Підсумовуючи це (це передбачає, що у вас є якийсь програмний метод перевірки дійсності ліцензійного ключа, наприклад, якась контрольна сума чи інший метод):

  • CheckBlacklist
    • Перетворіть ліцензійний ключ у хеш із сіллю
    • Запросити файл із чорного списку від сервера
    • Мій хеш у файлі?
    • Якщо так, то зберігайте хеш "DEAD" + сіль + часова марка (усічена до дня; не потрібно зберігати години + дні + хвилини)
    • Якщо НІ, то зберігайте хеш "LIVE" + сіль + часова марка (trunc'd)
  • IsKeyAlive
    • Створіть хеш із "LIVE" + сіль + trunc'd часова мітка
    • Завантажте хеш DeadAlive
    • Чи згодні вони?
    • Якщо ТАК, то ми живі; повернути ПРАВИЛЬНО
    • Якщо ні, то, можливо, ми померли, але ми все ще можемо знаходитись у вікні часової позначки:
      • Відняти день від мітки часу і повторити хеш.
      • Чи згодні ми зараз?
      • ТАК? Поверніть ІСТИНА
      • Додайте до мітки день і повторіть хеш
      • Чи згодні ми зараз?
      • ТАК? Поверніть ІСТИНА
    • На даний момент ми вийшли з діапазону часових позначок без відповідності. Повернути БАЖНО (Забити програму)

Тепер добро знає, що є мільйон, і один із способів цього може провалитися. Розглянемо всі можливі способи та створимо надійну систему (включаючи таку, яка передбачає, що клієнт має рацію, якщо файл чорного списку неможливо завантажити). Тестуйте, випробовуйте, тестуйте його, а потім ще раз протестуйте перед тим, як розгортатись, адже якщо це піде не так, ви втратили довіру свого клієнта.


+1 Для епічно складної відповіді O_o. Я можу помилятися, але я не думаю, що це має бути досить складним. Я не поширюю Microsoft Office, це спеціальний додаток для одного клієнта. Тут залишаються ті ж проблеми, що сервер, на якому розміщено цю програму, може не мати можливості спілкуватися із зовнішньою службою. Я не розумію, чому шифрування, хеші та солі тут справді необхідні. Те, що ми дійсно хочемо, - це ефективно перемикач убивств.
maple_shaft

Дякую ;-) Причина, яку я пропоную використовувати хеш, полягає в тому, що ніхто, хто нюхає трафік та / або дивиться на код / ​​таблиці / файли у вашого клієнта, не може сказати, що в світі відбувається. Хеші нічого не означають, якщо обидві сторони не перебувають на ньому, і клієнт навряд чи зрозуміє, що хеш - це фактично представлення їх ліцензійного ключа. (Якби це було передано в ясному порядку, вони могли б знати це відразу.) Так само це зменшує необхідність будь-якого шифрування або SSL у вашому файлі чорного списку - хеші самі по собі означають zip.
Керрі Шотц

Побічна примітка: якщо ви впевнені, що клієнт сприйме, що відновити певні таблиці / файли занадто складно, ви можете трохи зменшити складність, знімаючи чек щоразу, коли програма запускається. Однак це не знадобило б когось занадто довго, щоб зрозуміти, що відбувається, і розібратися в цьому шляху.
Керрі Шотц

1
CheckBlacklist: А license-server.example.com: no route to hostтепер що? Сервер ліцензій може навіть не існувати колись у майбутньому - і не кажіть мені, що ваша компанія все ще буде жива через двадцять років, що є статистично малоймовірним.
Пісквор вийшов з будівлі

1
Існує маса способів подолати це, в тому числі не використовувати власні сервери. Використовуйте Amazon або Google або щось подібне. Крім того, вбудуйте "довіру" до чека, так що якщо хост мертвий, користувачі можуть продовжувати користуватися додатком. Як я вже згадував у дописі, є мільйон способів його виходу з ладу, і це справді тому, що я проти такого роду перевірок. Я вважаю за краще довіряти своїм клієнтам, ніж придумати такий вид перевірки. (Ліцензійний ключ самостійно, я піду. За чорний список? Не варто докладати зусиль, ІМО.)
Керрі Шоттс

4

Інші відповіді вже зробили хорошу роботу з висвітлення технічної сторони. Але, будь ласка, також врахуйте юридичну сторону.

Ви навіть маєте право заблокувати їх додаток, якщо вони не платять? Якщо ви не згадували про це в договорі, ви, можливо, не маєте права це робити, навіть якщо платежі прострочені (на кшталт того, що ви не обов'язково маєте право повернути назад що-небудь продане вами). Крім того, у багатьох країнах діє спеціальний закон, який забороняє "маніпулювати комп'ютерними програмами" - те, що ви робите, може вважатися таким і навіть може піддавати вас кримінальній відповідальності.

Тому я б радив спочатку обговорити це з юристом, щоб не потрапити в гарячу воду.

Зрештою, може бути краще просто покластися на правову систему. Якщо вони не платять, домовляються, і якщо це не допомагає, просто подайте в суд. У багатьох країнах позов є відносно безболісним та дешевим, якщо ситуація з контрактом є чіткою (у Німеччині, наприклад, ви можете отримати Mahnbescheid за менше 20 €).


Такий зв’язок відповідає на моє запитання про те, чи ми горіхи. У мене склалося чітке враження, що я не маю вибору, і це те, на чому наполягають мої начальники, хоча це не передбачено контрактом. На жаль, я живу і працюю в США, де ти не можеш взяти на себе велику корпорацію, навіть якщо ти маєш рацію. У них є армія адвокатів, які поховають все на папері досить довго, щоб вигнати нас з бізнесу, якщо вони справді цього захотіли.
maple_shaft

Я погоджуюся з @sleske щодо використання легальних каналів. Переконайтесь, що договір є надійним, а потім подайте до суду, якщо вони порушують умови. Або принаймні погрожувати позовом. Що я бачив у великих компаніях, вони дуже готові платити продавцям, щоб уникнути їх позову чи порушення договору.
RationalGeek

@maple_shaft: Не маю уявлення про правову ситуацію в США, але я сподіваюся, що правова ситуація не така безнадійна, як ви її малюєте. У будь-якому разі, якби вам сказали здійснити це, я би лише зазначив можливі проблеми. Якщо ви все-таки отримуєте подальше (письмово, звичайно), ви зробили все, що можете.
sleske

Не було б проблем із системою ліцензування з обмеженим часом, коли після закінчення терміну дії ліцензії додаток буде марним. Багато компаній це роблять, великі та малі - Adobe для одного прикладу.
Джеймс Снелл

2

Якщо вони розміщують всередині країни, чим вони відрізняються від будь-якого іншого програмного забезпечення, яке ви можете їх доставити? З'ясуйте, що б ви зробили, якщо б ви доставляли, скажімо, додаток для відображення на робочому столі, і робіть це.


Напевно, я просто розгублений, що робити взагалі. Я думаю, що програма повинна щомісяця перевіряти її ліцензійний ключ, надсилаючи запит зовнішньому веб-серверу з номером ліцензії. Відповідь буде успішною чи невдалою і зберігатиметься у змінній контексті програми. Додаток, по суті, "вимкнеться", якщо ліцензійний ключ недійсний. Таким чином, ми можемо просто "визнати недійсним" цей номер ліцензії, якщо це потрібно.
maple_shaft

Ви вважаєте, що ця проста сторінка автентифікації ліцензій повинна бути зашифрована SSL? Навіть якби хтось реалізував sniffer пакетів і міг отримати дійсний номер ліцензії, їм потрібно було б мати розповсюджену копію програми, щоб вона була корисною. Я не можу уявити, що він корисний нікому, крім мого прямого клієнта.
maple_shaft

1

Це залежить від системи. Ви розширили існуючий фреймворк, як Magneto, або ви написали цілу заявку з нуля? Якщо це пізніше, складати вимоги до ліцензування не надто складно. Ви просто доставляєте заявку з короткостроковою ліцензією, термін дії якої закінчується через 45 днів після виставлення рахунку, а потім надаєте постійну.

Це передбачає, що ви також не перевертаєте джерело. :)


Ми не перевертаємо джерело. Ми контролюватимемо вихідний код та розповсюджуватимемо регулярні випуски та виправлення помилок у разі потреби.
maple_shaft

1
@maple_shaft: Ну, завжди є можливість просто відмовитись від виправлення будь-яких виправлень або оновлень, поки рахунок не буде сплачено, як я підозрюю, що технічне обслуговування вбудовано або в первісну покупку, або продається як річна річ, з регулярними датами платежів ( зазвичай, але не завжди, щорічно).
Ватін

Для подальшої роботи на @Vatine. Для попередніх проектів, яким не вистачало чітких ліцензій, ми використали дефекти як опорний пункт для отримання плати. Деякі з дефектів, можливо, не були повними аваріями.
Крістофер Біббс

@maple_shaft - Якщо у вас є лише один клієнт. Рішення просте. Не надайте оновлення для зазначеної програми, якщо їх баланс не дорівнює 0 доларам.
Рамхаунд

1

Зважаючи на те, що система розміщена внутрішньо, багато згаданих вище рішень, пов’язаних із спілкуванням з віддаленим сервером, можуть не працювати.

Чому б замість цього не включити файл ліцензії в проект, який включає дату закінчення терміну дії. Як тільки системний годинник перевищує термін придатності, система перестає функціонувати. Щоб захистити файл, зашифруйте вміст, щоб запобігти його підробці. Коли користувач платить або продовжує додатковий рік, ви надсилаєте їм новий файл ліцензії.

Зауважте, що якщо ви використовуєте PHP, код легко доступний для редагування користувача, тому незалежно від того, який тип безпеки ви встановите, користувач може легко зайти та видалити його. Якщо ви використовуєте ASP.NET або іншу компільовану мову, це не викликає занепокоєння, оскільки код неможливо змінити.


Це гарна пропозиція, але це пакетна та розгорнута програма Java. Надати їм новий файл ліцензії - це довіряти їм або вставити його правильно у файл WAR, або надати їм зовсім новий файл WAR, який буде дратувати всіх. У них є папір на папері та декілька ІТ-людей, яким потрібно виправдовувати своє існування у своїй організації шляхом залучення кожного разу, коли з’являється нова версія третьої програми. Я не оскаржую вашу пропозицію лише тому, що це може бути найменш образливою пропозицією.
maple_shaft

Я здогадуюсь, навіть з більшістю складених мов, таких як java, баночку можна легко скласти, оновити, перекомпілювати і потім включити у війну, так як же це впоратися?
Сударшан

1

(Розкриття інформації - я працюю в Agilis Software, постачальнику систем управління ліцензіями ).

Найефективнішим рішенням є використання автоматизованої активації товару з лізинговою орендою. Це дозволяє вам:

  • Автоматично активуйте ліцензію клієнта. У час активації кожен екземпляр автоматично блокується до обраних параметрів цільової системи, і ліцензійні ліміти, які ви встановили для них, будуть застосовані у вашій програмі (наприклад, налаштування функцій, встановлення загального пробного періоду або обмеження часу підписки).
  • Встановіть "інтервал оренди", який є максимальним строком дії будь-якої події активації. Для клієнтів, які мають підозрілий кредит, ви можете встановити це, скажімо, на два тижні, а це означає, що кожні два тижні ваш додаток автоматично буде "телефонувати додому" у фоновому режимі, щоб підтвердити ліцензію. Якщо вони прострочені в оплаті, ви можете відключити їх ліцензію на розміщеному сервері, і він припинить роботу на наступному будинку телефону.
  • Якщо підключення до мережі від цільової системи не відбувається, відбувається процес активації самообслуговування користувача шляхом обміну зашифрованими файлами на будь-якому веб-терміналі. Якщо ваш користувач знаходиться в такому положенні, то, можливо, ви захочете збільшити інтервал оренди довше, щоб вирівняти незручності для них з вашою потребою отримати плату. Після того, як вони заплатять, ви можете робити інтервал оренди скільки завгодно, аж до безстрокового.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.