Настройка FileIOPermissions в ASP.NET incode - PullRequest
1 голос
/ 21 июля 2009

У меня есть небольшое приложение, которое загружает компоненты типа плагина, которые другие пользователи могут свободно загружать на сервер. Но я не хочу, чтобы пользователи имели доступ к файлам других пользователей. Мне нужно настроить доступ каждого компонента плагина к ограниченному доступу.

Я пытался установить доступ внутри базового класса классов плагинов, но даже тогда у загруженных классов плагинов, похоже, есть полный доступ к файлам.

Я не могу установить разрешение с атрибутом, потому что путь меняется в зависимости от того, кто загружает страницу.

Вот фрагмент кода:

public abstract class PluginBase<T>
{
public PluginBase
{
PermissionSet ps = new PermissionSet(System.Security.Permissions.PermissionState.None);
            ps.AddPermission(new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.PathDiscovery | System.Security.Permissions.FileIOPermissionAccess.Read, HttpContext.Current.Server.MapPath("/app_data/www_somesite_com")));
            ps.PermitOnly();
}
}
public class SomePlugin : PluginBase<SomePlugin>
{
public SomePlugin
{
File.WriteAllText("c:\test.txt", "This should not be possible, but it is.. why?");
}
}

Заранее большое спасибо!

1 Ответ

0 голосов
/ 31 августа 2009

Решение на самом деле довольно простое, поскольку вы можете реализовать свой собственный атрибут (который позволяет вам разрешить разрешенный путь программно, вместо того, чтобы использовать константу для атрибута decorator).

using System.Security;
using System.Security.Permissions;

public sealed class CustomFileIOPermission : CodeAccessSecurityAttribute
{
    public CustomFileIOPermission(SecurityAction action)
        : base(action)
    {
    }

    public override IPermission CreatePermission()
    {
        // You can use your `HttpContext` or similar at this point to resolve the path
        string allowedPath = @"D:\test";

        return new FileIOPermission(FileIOPermissionAccess.Write, allowedPath);
    }
}

Приведенный выше класс позволит использовать [CustomFileIOPermission(SecurityAction.PermitOnly)] и эффективно защитить файлы в других местах.

...