Динамическая загрузка плагинов.Net с правами доступа
Какие рекомендации вы можете дать для системы, которая должна делать следующее:
Загружайте плагины (и, в конце концов, выполняйте их), но есть 2 способа загрузки этих плагинов:
- Загружать только авторизованные плагины (разработанные владельцем программного обеспечения)
- Загрузить все плагины
И мы должны быть достаточно уверены, что авторизованные плагины являются реальной сделкой (без изменений). Однако все плагины должны быть в отдельных сборках. Я рассматривал использование сборок со строгими именами для плагинов с открытым ключом, хранящимся в приложении загрузчика, но мне кажется, что слишком легко изменить открытый ключ в приложении загрузчика (если пользователь был склонен) независимо от того, любая запутанность приложения-загрузчика. Есть более безопасные идеи?
4 ответа
По сути, если вы размещаете свой код на чужой машине, нет абсолютной гарантии безопасности.
Вы можете посмотреть на все виды хитростей безопасности, но, в конце концов, код находится на их компьютере, поэтому он находится вне вашего контроля.
Сколько вы потеряете, если конечный пользователь загрузит неавторизованный плагин?
Подпишите сборки.
Подпись со строгим именем или строгое именование дает программному компоненту глобально уникальную идентификацию, которая не может быть подделана кем-то другим. Строгие имена используются для того, чтобы гарантировать, что зависимости компонентов и операторы конфигурации отображаются точно на правильный компонент и версию компонента.
http://msdn.microsoft.com/en-us/library/h4fa028b(VS.80).aspx
Сколько вы потеряете, если конечный пользователь загрузит неавторизованный плагин?
По общему признанию, это случается не часто, но когда / если это случается, мы теряем много, и я, хотя я понимаю, что мы не будем производить ничего на 100% безопасных, я хочу сделать это достаточным препятствием, чтобы люди перестали этим заниматься.
Раздражает то, что при простой динамической загрузке с полным строгим именем все, что требуется, - это простое изменение строкового литерала в приложении загрузчика для загрузки любой другой сборки, даже если плагины подписаны.
Вы можете расширить свой вопрос: "Как я могу защитить свои.net сборки от обратного инжиниринга?"
Ответ - вы не можете. для тех, кто еще этого не видел, просто найдите "отражатель" и запустите его на каком-нибудь наивном exe.
(кстати, это всегда ответ для кода, который у вас не в руках, если у вас нет аппаратного en/decryption, отправленного с ним),
запутывание пытается сделать реверс-инжиниринг сложнее (стоить больше денег), чем разработка, и для некоторых типов алгоритмов это удается.