Как обезопасить .NET DLL - PullRequest
       6

Как обезопасить .NET DLL

7 голосов
/ 13 декабря 2010

Каков наилучший способ защиты DLL для проектов, над которыми вы работаете?Некоторые библиотеки DLL, которые я заинтересован в разработке, будут иметь функциональные возможности уровня доступа к данным (DAL) и уровня бизнес-логики (BLL).Может быть несколько приложений, которые могут в конечном итоге попасть в эти библиотеки DLL для выполнения специфических бизнес-функций.

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

Желательны как защита от несанкционированного использования библиотек DLL, так и защита от возможной декомпиляции.

Ответы [ 4 ]

5 голосов
/ 13 декабря 2010

Один из вариантов может заключаться в том, чтобы пометить все открытые классы в вашей DLL как «внутренние» вместо «public», а затем использовать атрибут «InternalsVisibleTo» в вашей DLL, чтобы явно назвать библиотеки DLL (и, возможно,exes), которым разрешено использовать ваши внутренние типы.Это может потребовать, чтобы у всех участников были строгие имена, но в любом случае это хорошая вещь.

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

Лучший способ приблизиться к безопасности кода - это задать вопрос: «Насколько сложно нам сделать так, чтобы кто-то использовал этот код без лицензии или авторизации, и сколько времени / денег мы готовы потратить надостичь этого?Если вы ничего не делаете, кому-то очень легко использовать ваши DLL в другом проекте.Если вы делаете несколько простых вещей, вы можете сделать неудобным для кого-то использование ваших DLL в другом месте.Если вы потратите месяцы усилий, вы, возможно, сможете сделать так, чтобы кто-то очень неправильно использовал ваш код, но вы никогда не сделаете это невозможным.

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

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

1 голос
/ 14 декабря 2010

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

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

1 голос
/ 14 декабря 2010

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

1 голос
/ 13 декабря 2010

Установить аутентификацию с использованием механизма Open Key. Функции в DLL будут работать, только если вы предоставите действительный ключ и токен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...