2011-12-21 7 views
3

У меня возникла ситуация, когда приложение (C#) может загружать внешние DLL (не написанные мной) и выполнять код из этих библиотек. Библиотеки могут быть C# или CPP.Как предотвратить доступ к локальной файловой системе

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

Как я могу это сделать?

+2

http://msdn.microsoft.com/en-us/library/bb763046.aspx –

+0

В противном случае вы не можете использовать собственный код на языке C++, который использует winapi напрямую, кроме запуска процесса с учетной записью пользователя, которая ограничивает доступ к файловой системе , –

+0

Вы говорите C# или CPP .. они всегда управляли libs? –

ответ

0

Запустите приложение как ограниченную учетную запись пользователя и предоставите пользователю доступ к этой конкретной папке.

+0

Это хорошее решение, но теперь у меня другая проблема - я должен иметь возможность подключаться к каналу, созданному с помощью Java-процесса, от пользователя Administrator. Я получаю ошибку отказа в доступе. –

+0

имеют пользовательский процесс администратора, создающий канал с привилегиями, которые позволяют ограниченному пользователю получить к нему доступ – Paralife

0

Безопасные файлы через объектов ОС (файловая система privs), создать учетную запись, которая может получить доступ только те файлы и использовать эту учетную запись для запуска приложения

0

Это зависит от вашей структуры, но вы можете использовать Caspol (код Access Security Policy) до .Net 3.5 (и I думаю, C++ DLL также), чтобы указать привилегии безопасности, включая доступ к IO.

Надежда, что помогает :)

0

Я видел сторонний код, который делает это; например, Jint позволяет вам писать сценарии JavaScript, которые управляют объектами CLR, но не позволяет любым кодам JavaScript, инициированным кодом, обращаться к файловой системе, Reflection и т. д. с помощью разрешений.

Вы можете прочитать документацию JINT и протыкать их исходный код для получения более подробной информации, но суть его, кажется, это:

PermissionSet myPermissionSet = new PermissionSet(PermissionState.None); 
// or some other permission set, depending on your requirements 

try { 
    myPermissionSet.PermitOnly(); 
    // run untrusted code 
} finally { 
    CodeAccessSecurity.RevertPermitOnly(); 
} 

Много вещей, которые я читал говорят, что нужно, чтобы создать sandboxed Appdomain (что-то, с чем я никогда не имел большого успеха), но подход Jint, похоже, работает очень хорошо. Возможно, вам придется следить за тем, как сторонний код запускает статические события, которые будут срабатывать позже, хотя тогда они могут избежать области PermitOnly.

0

Посмотрите на Molebox, возможно, он подойдет вашим потребностям. Molebox позволяет вам обертывать модули в их песочницу.

Смежные вопросы