2009-07-21 45 views
1

我有這個加載插件類型組件的小應用程序,其他用戶可以免費上傳到服務器。但我不希望用戶能夠訪問其他用戶文件。我需要將每個插件組件的訪問權限設置爲受限制的訪問權限。在ASP.NET中設置FileIOPermissions incode

我試圖設置插件類基類內的訪問,但即使如此,加載的插件類似乎有完整的文件訪問。

我無法設置具有屬性的權限,因爲路徑會根據誰加載頁面而發生變化。

下面是一個代碼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?"); 
} 
} 

提前非常感謝!

回答

0

該解決方案實際上非常簡單,因爲您可以實現自己的屬性(它允許您以編程方式解析允許的路徑,而不必爲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)]和其他地方將有效地保護文件。

+0

這幾乎做我需要的一切。問題是我正在創建軟件,用戶可以自由地上傳usercontrol,並且需要檢查他們是否實際實現了該屬性。出於某種原因(可能是通過設計?)我無法檢查該安全屬性是否實際實現,因爲它沒有顯示在GetCustomAttributes方法返回的列表中。任何人都知道如何檢查該屬性是否被執行。 – Gabfine 2009-09-02 18:11:02