Как запретить доступ к локальной файловой системе - PullRequest
3 голосов
/ 21 декабря 2011

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

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

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

Ответы [ 5 ]

1 голос
/ 21 декабря 2011

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

Вы можетеПрочитайте документацию 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();
}

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

0 голосов
/ 21 декабря 2011

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

0 голосов
/ 21 декабря 2011

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

0 голосов
/ 21 декабря 2011

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

Надеюсь, это поможет:)

0 голосов
/ 21 декабря 2011

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

...