Запретить запуск формы в плагине dll третьей стороны (сервис c #) - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть служба, которая загружает несколько DLL и запускает функцию в каждой DLL. Каждый DLL содержит некоторые правила, которые также могут быть разработаны нашими клиентами (что-то вроде системы плагинов). Проблема заключается в том, что клиенты теоретически могут добавлять формы для вызова внутри dll. Таким образом, цель состоит в том, чтобы запретить это или, по крайней мере, заблокировать такие библиотеки.

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

Но я думаю, что это не так приятно. Пожалуйста, посоветуйте мне лучший метод. Thankx.

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

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

Единственным недостатком этого подхода является то, что он довольно нетривиаленреализовать.

0 голосов
/ 02 февраля 2012

Вы всегда можете использовать рефлексию для проверки их кода и обеспечения того, чтобы к определенным пространствам имен и классам (например, System.Windows.Forms. *) Не обращались и не ссылались.

SQLCLR ограничивает то, что разрешено использовать / ссылаться в сборках, установленных как расширения SQLCLR, и это, по-видимому, выполняется следующим образом: http://msdn.microsoft.com/en-us/library/ms403273.aspx

0 голосов
/ 02 февраля 2012

Это ОЧЕНЬ сложная проблема для защиты сервера от стороннего кода, который вам нужно выполнить.Я бы порекомендовал прочитать на подходе песочницы SharePoint (то есть http://msdn.microsoft.com/en-us/library/ff798382.aspx), который пытается решить эту проблему и связанные с ней проблемы.

Как сказал SLaks - вы неявно доверяете коду, просто выполняя его. Если вы не ожидаете, что код будетоткровенное зло, вы можете быть лучше, просто регистрируя, сколько времени занимают вызовы (и, возможно, время ожидания, если возможно), и предоставляя вашему клиенту эту информацию. Так как кажется, что клиент создает код для себя, маловероятно, что код будет явно сделан не-functional.

Другие интересные проблемы, связанные с отображением формы:

  • Исключение переполнения стека (легко создать, трудно обработать)
  • while(true); код, который никогда не будетвозвращает управление
  • доступ к собственному коду, если полное доверие включено.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...