I'm currently working on a plugin system for a modding framework and I want to add some security to the plugins.
I need to detect whenever an assembly or class accesses a class, for example System.IO.File
, so I can block this.
How can I do this?
private bool IsSecure(Assembly assembly, string path)
{
if (assembly.IsFullyTrusted)
{
// PermissionSet perms = new PermissionSet(PermissionState.None);
// perms.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
// perms.AddPermission(new FileIOPermission(FileIOPermissionAccess.NoAccess, assembly.Location));
// perms.AddPermission(new ReflectionPermission(PermissionState.None));
assembly.PermissionSet.SetPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
assembly.PermissionSet.SetPermission(new FileIOPermission(FileIOPermissionAccess.NoAccess, path));
assembly.PermissionSet.SetPermission(new ReflectionPermission(PermissionState.None));
return true;
}
return false;
}