Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET incode中设置FileIOPermissions_Asp.net_File Permissions - Fatal编程技术网

在ASP.NET incode中设置FileIOPermissions

在ASP.NET incode中设置FileIOPermissions,asp.net,file-permissions,Asp.net,File Permissions,我有一个小应用程序,可以加载插件类型的组件,其他用户可以自由上传到服务器上。但我不希望用户能够访问其他用户的文件。我需要将每个插件组件的访问设置为受限访问 我试图在插件类基类中设置访问权限,但即使这样,加载的插件类似乎也具有完全的文件访问权限 我无法使用属性设置权限,因为路径会根据加载页面的用户而变化 下面是一个代码snippest: public abstract class PluginBase<T> { public PluginBase { PermissionSet ps

我有一个小应用程序,可以加载插件类型的组件,其他用户可以自由上传到服务器上。但我不希望用户能够访问其他用户的文件。我需要将每个插件组件的访问设置为受限访问

我试图在插件类基类中设置访问权限,但即使这样,加载的插件类似乎也具有完全的文件访问权限

我无法使用属性设置权限,因为路径会根据加载页面的用户而变化

下面是一个代码snippest:

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?");
}
}
公共抽象类插件库
{
公共插件库
{
PermissionSet ps=新的PermissionSet(System.Security.Permissions.PermissionState.None);
ps.AddPermission(新建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();
}
}
公共类SomePlugin:PluginBase
{
公共SomePlugin
{
writealText(“c:\test.txt”,“这应该是不可能的,但它是..为什么?”);
}
}

非常感谢

解决方案实际上非常简单,因为您可以实现自己的属性(这允许您以编程方式解析允许的路径,而不必为decorator属性使用常量)


上面的类将启用
[CustomFileIOPermission(SecurityAction.PermitOnly)]
的使用,并将有效地保护其他地方的文件。

这几乎满足了我的所有需要。问题是,我正在创建一个软件,用户可以自由上传一个usercontrol,我需要检查他们是否实际实现了该属性。出于某种原因(可能是设计原因),我无法检查该安全属性是否实际实现了,因为它没有显示在GetCustomAttributes方法返回的列表中。任何人都知道如何检查该属性是否已实现。我认为您应该为此问题创建一个新问题。我认为重要的是将问题分成更小的任务,以保持其他人对问题的兴趣,而不是为非常独特的问题提供精确的解决方案,我相信这也会给你更多的答案。你是对的,这应该属于另一个问题。我在这里添加了一个新问题:谢谢你的第一个答案:)
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);
    }
}