Безопасность - перестать использовать мою программу без авторизации - PullRequest
2 голосов
/ 15 декабря 2009

Я разрабатываю программу, которой хочу поделиться с определенными людьми, однако, если я передумаю об этих людях, я хочу иметь возможность «отозвать» их доступ к программе.

В идеале это должно быть для каждого пользователя, а не просто блокировать все экземпляры программы. Что-то вроде учетных записей пользователей, но в настоящий момент у меня нет доступа к серверу, где эти учетные записи могут быть аутентифицированы, поэтому, возможно, нужен более простой метод.

Я слишком амбициозен?

(Если уместно, я использую Java.)


Извините, я пропустил несколько важных деталей:

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


Спасибо за все ответы, жаль, что ТАК позволяет мне выбрать только один лучший ответ. :) Спасибо вам ребята.

Ответы [ 10 ]

3 голосов
/ 15 декабря 2009

Нет способа сделать это со 100% гарантией. За исключением аппаратного решения (которое также можно обойти), программным обеспечением можно манипулировать.

В качестве очень простого примера возьмем программу для Windows (на Java еще проще), которая проверяет дату, чтобы узнать, может ли она работать (подумайте, пробная версия). Даже не устанавливая время назад, вы можете победить его - выясните, какие вызовы он выполняет, чтобы проверить дату, а затем предоставьте альтернативную DLL, которая изменяет этот вызов, чтобы всегда возвращать дату, которая будет работать.

Если вы используете сервер, к которому должны подключиться клиенты, он будет работать лучше, поскольку вы можете выполнять всю проверку достоверности на стороне сервера. Но вы не можете просто вернуть истину / ложь, так как вы можете изменить вещи на сетевом уровне, чтобы изменить ложь на истину. Чтобы обойти это, вам нужно использовать SSL для шифрования сетевого трафика.

«Лучше» (вне головы), чтобы сервер выполнял работу программы, а программа отображала результаты. Тогда для клиентов, которые не имеют доступа к серверу, он просто отказывается возвращать им результаты.

2 голосов
/ 15 декабря 2009

Если ваша программа использует сетевой доступ к информации через веб-службы или какой-либо другой механизм, вы можете просто внести черный список учетных записей, которые вы хотите отключить.

Если это полностью автономное приложение, вы, насколько мне известно, SOL. Единственный контроль над приложением после развертывания - сетевые запросы к ресурсам, которые вы все еще контролируете.

EDIT

Отнюдь не безупречно, но, по-другому, в автономном приложении и только для менее технически опытных пользователей вы можете попытаться контролировать доступ к приложению с помощью механизма обновления, который сделает недействительным приложение через зашифрованный список имен пользователей. и т. д. Хотя это легко обойти и, возможно, полностью изменить, поскольку вся эта информация хранится на клиентском компьютере. И это зависит от них, что позволяет вам обновлять программное обеспечение.

1 голос
/ 16 декабря 2009

Не беспокойся. Пока вы распространяете реальное программное обеспечение среди клиентов, всегда есть способ обойти любые схемы, которые вы можете придумать. В конце концов, это сделает ваше программное обеспечение менее надежным и более громоздким для работы, так что потенциальные клиенты будут напуганы - все проиграют.

1 голос
/ 15 декабря 2009

Полагаю, это реальное приложение, работающее на компьютере пользователя.

Самым простым подходом, который я могу придумать, является использование Java Web Start, которое может гарантировать, что ваше приложение загрузит файлы jar из Интернета, если вы обновите их. Это включает в себя лицензию для каждого пользователя (т. Е. Файл jnlp зависит от пользователя, загружающего его, включая правильный jar-файл), и эта лицензия должна позволять пользователю работать с вашим приложением в течение нескольких дней даже без доступа к Интернету, после чего новая лицензия должен быть загружен (так как файл JNLP изменился для этого пользователя). Примечание. Будьте уверены, чтобы изменить URL-адрес измененного файла лицензии, в противном случае кэш Java может быть поврежден.

Файл лицензии может содержать только один класс, который просматривает дату и сообщает true / false, чтобы продолжить. Это должно быть подходящим знаком для создания запечатанных банок.

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

1 голос
/ 15 декабря 2009

Создание серийных номеров на основе идентификаторов оборудования ЦП. Периодически обновляйте свою программу и вносите в нее черный список определенных идентификаторов CPUS. Конечно, вам придется просрочить срок действия вашей программы, если периодическое обновление не получено.

1 голос
/ 15 декабря 2009

Без серверного компонента то, что вы запрашиваете, будет трудным и ненадежным.

Лучший способ гарантировать возможность отзыва доступа к вашему программному обеспечению - через интернет-приложение "программное обеспечение как услуга" . Если вы не предоставляете доступ, они не используют программное обеспечение. Если это приложение для настольного компьютера, то некоторые ключевые функциональные возможности все равно должны быть где-то на онлайн-сервере.

Если у пользователя есть все приложение на его локальной машине, оно может быть переработано и каким-то образом «взломано». Единственный способ преодолеть это - убедиться, что какая-то часть функциональности никогда не установлена ​​на их компьютере.

1 голос
/ 15 декабря 2009

Обычным способом является предоставление файла лицензии, который позволяет использовать его в течение определенного периода. По истечении этого периода пользователи должны будут запросить новый файл лицензии. Это единственный способ, если вы хотите разрешить использование без прямого подключения к серверу. Но это раздражает всех сторон - пользователи вынуждены запрашивать новые файлы лицензий, а вы вынуждены создавать и распространять их.

Аутентификация на сервере возможна, но, пока вы используете Java, не слишком безопасна. Даже если вы запутываете код, можно удалить часть аутентификации из приложения или перехватить трафик аутентификации и просто создать фиктивный сервер для постоянной активации программного обеспечения. Вы можете предотвратить это с помощью криптографических методов, но это становится все более и более сложным.

Самый простой способ сохранить строгий контроль - предоставить как минимум часть приложения в качестве службы, но для этого, конечно, требуется сервер.

1 голос
/ 15 декабря 2009

Поскольку у вас нет доступа к какому-либо независимому ресурсу для аутентификации пользователя, единственный ответ, который я могу придумать, - это «переключение мертвецов», когда вы отправляете пользователю файл лицензии в указанное времяинтервал.Приложение «истекает» в этом интервале и должен иметь новый файл для запуска.Не хотите, чтобы пользователь использовал программное обеспечение?Не отправляйте им новый файл.

Это неоптимально по ряду причин:

  1. Все ваши пользователи должны будут получить этот файл по расписанию, что приведет ксделать много работы поддержки.
  2. Поскольку система полностью живет на компьютере пользователя, меры обхода будут варьироваться от тривиальных до "хлопот", но всегда будут возможны.Это будет зависеть от алгоритма, выбранного вами для шифрования и доставки файла.
  3. Некоторое ненулевое число пользователей будет «ложным срабатыванием», и их установки перестанут работать из-за какой-то ошибки в процессе.
  4. Если вы не встраиваете в файл информацию о пользователе, пользователи смогут поделиться ею друг с другом.
0 голосов
/ 15 декабря 2009

Каждый месяц пользователь должен вводить новое имя пользователя, соответствующее имени пользователя для соответствующего месяца, который хранится в вашей программе. Если вы хотите запретить пользователю использовать вашу программу, просто прекратите посылать ему новые имена пользователей, и они не смогут использовать программу после конца месяца.

0 голосов
/ 15 декабря 2009

Каждый пользователь может иметь уникальное имя пользователя, и вы можете проверить его в веб-сервисе, чтобы увидеть, есть ли этот конкретный пользователь в списке льгот.

...