Безопасные плагины
Самый очевидный подход - rhino для java с возможностью полного определения окружения
var evidence = new Evidence;
evidence.AddHostEvidence(new Zone(SecurityZone.Internet;
var permissions = SecurityManager.GetStandardSandbox(evidence);
var fileperm = new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read, full_path_to_plugin_assembly);
permissions.Add(fileperm);
var setup = new AppDomainSetup;
setup.PrivateBinPath = Path.GetDirectory(full_path_to_plugin_assembly);
setup.ApplicationBase = some_path;
var sandbox = AppDomain.Create("plugin sandbox", null, setup, permissions);
return (IPluginInterface)sanbox.CreateInstanceFromAndUnwrap(plugin_assembly_name, plugin_type_name);
Возможно где-то намудрил. Сейчас сам занимаюсь sandbox'ингом, обращайся если что.
На моно эта защита работать не будет - они так и не сделали Code Access Security.
Для того, чтобы найти plugin_type_name, загрузи сборку плагина в основной AppDomain только для рефлексии (Assembly.ReflectionOnlyLoadFrom).
Встрой туда интерпретатор скриптового языка в виде совсем виртуальной машины.
ну мой совет встроить яваскрипт народ не оценил
Встрой туда интерпретатор скриптового языка в виде совсем виртуальной машины.я думал об этом, но ни разу подобного не делал, даже не знаю с какой стороны подойти.
ну мой совет встроить яваскрипт народ не оценилв то время как хороший совет же!
в то время как хороший совет же!Встраивать Rhino для Java в .NET? Может быть, application domains всё-таки лучше?
ну мой совет встроить яваскрипт народ не оценилИ правильно! Потому что надо встраивать интерпретатор Схемы.
Встраивать Rhino для Java в .NET?
Есть JINT.
есть же вроде clojure?
Оставить комментарий
nik93
Прошу ткунуть ссылкой или советом по следующей теме:Хочу чтобы в моем приложении была реализованна БЕЗОПАСНАЯ система плагинов.
Под безопасной понимается то, что плагин, написанный сторонним разработчиком, не должен быть способен каким-либо образом навредить программе или пользователю (Найти все пароли, стереть все документы, накачать троянов)
Пишу на C#, вобщем-то плагины у меня уже работают (пользовался данной технологией http://www.cyberguru.ru/dotnet/reflection/dotnet-reflection...., но меня смущает, что в плагин можно засунуть код которому будет позволено делать все что захочется.
Есть ли еще какие-нибудь подходы?