Как обернуть ненадежное приложение? - PullRequest
0 голосов
/ 11 сентября 2009

Представьте себе ненадежное приложение (плагин) , которое читает со стандартного ввода и записывает на стандартный вывод.

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

Например, если приложение удаляет файл на диске, оно должно быть обнаружено, и эта попытка должна быть отменена.

Это какое-то приложение-оболочка . Можно ли его построить?

Менее сложная задача слишком интересна: создайте эту обертку, используя .NET (и хост, и клиент написаны на языке .NET).

1 Ответ

5 голосов
/ 11 сентября 2009

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

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

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

Я бы посоветовал создать прототип, освежить в главе AppDomain в CLR Via C # и прочитать как можно больше об этом предмете.


Вот тестовое приложение, которое я сделал для исследования событий между доменами.
http://cid -f8be9de57b85cc35.skydrive.live.com / self.aspx / Public / appdomainevents.rar

...