我需要将不受信任的程序集加载到我的AppDomain中.我不希望Sandbox为此程序集执行新的AppDomain,因为它在内部需要访问某些功能,例如HttpContext.Current(在单独的沙盒AppDomain中为null).
我认为执行此操作的旧方法是使用一些自定义证据调用Assembly.Load,但看起来这已经被4.0中的CAS更改废弃了:
http://msdn.microsoft.com/en-us/library/ms145229.aspx
http://msdn.microsoft.com/en-us/library/ee191568(VS.100).aspx
我不太明白如何用新的安全模型完成我想要的东西......有人可以解释或建议一种替代方法吗?
谢谢.
我正在开发一个javascript小部件,允许用户注册列表.此小部件可嵌入客户网站.因为它是所有客户端驱动的,减去返回服务器的请求.我一直试图想出一些方法来使小部件"安全",基本上是一种限制仅在批准的站点上加载小部件的方法.
谷歌地图似乎能够使用他们提供给您的密钥来查看加载地图的网站.这样的效果会很完美.
小部件设计:Javascript将HTML插入DOM.还添加了一个iframe元素.iframe从我的站点加载表单来处理请求.将密钥传递给iframe URL以加载表单设置.
不是真正寻找代码,伪代码是完美的,只是丢失了技术.
我有一个名为Person包含属性的父类,父亲和儿童名单.
我希望每个人只使用AddChildMethod来添加子项,而不是List.Add方法,所以我如何限制它的使用?
public class Person
{
private List<Person> _children = new List<Person>();
public string Name { get; set; }
public Person Father { get; set; }
public List<Person> Children
{
get
{
return _children;
}
}
public void AddChild(string name)
{
_children.Add( new Person { Name = name, Father = this });
}
}
Run Code Online (Sandbox Code Playgroud) 我为公司编写内部软件.
我总是希望尽可能地利用OOP技术.在这个想法中,我想创建一个独立的数据访问层(DAL).DLL.
我该怎么做才能将DAL的访问权限限制在DLL我的业务逻辑层DLL?
我需要的最后一件事是公司中有一些人具有一点编程知识以及访问系统(通过Active Directory)来安装.NET Express,引用我的.DLL,并开始在真实系统之外启动数据访问代码.是否有任何.NET机制可以限制DLL只能由预先选择的主机应用程序/ DLL使用?
在shell应用程序中,我需要能够在运行时加载和执行其他.NET程序集,但不能给予它们完全的信任.本质上,我想限制它们(加载的程序集)接触任何系统资源(线程,网络等),唯一的例外是隔离存储.但是,来自"我"的程序集需要以完全信任的方式执行.
我一直在考虑代码访问安全性,但我不太确定这是我应该使用的.
你会怎么做?
我需要加密 ASP.NET 页面使用的 C# 代码。所以,当我编译创建一个 DLL 文件时,我确实需要加密我的 DLL 文件。请帮我如何加密DLL文件...
嗨,这更多是代码安全性问题,而不是直接与编码相关的问题。但我想知道是否有可能看到的代码ui.R和server.R和生成应用程序的Web浏览器页面?
例如,虽然我敢肯定,我可以问加勒特看到代码...是有可能,未经授权,以某种方式看到与此相关的URL代码http://glimmer.rstudio.com/gsee/TFX/这是运行一个闪亮的应用程序?因为如果放置敏感数据/代码等,这可能是一个问题。
有没有办法为闪亮的应用程序添加安全的用户名和密码?以便只有选定的用户才能访问该应用程序?
我知道很明显你可以从 gist 看到运行闪亮应用程序的代码,但对闪亮的应用程序更感兴趣。
PS Garrett(如果您看到这个),我只是将您的应用程序用作一个很好的应用程序示例...因为它使用了 glimmer...,在我看来它的代码很有吸引力。
目标:我需要在权限非常有限的 AppDomain 中运行一些代码 -除了我在其他地方定义的一些辅助方法之外,它不应该访问任何花哨或不安全的内容。
我所做的:我正在创建一个具有所需基本权限的沙箱 AppDomain,并创建一个运行代码的代理对象:
static AppDomain CreateSandbox()
{
var e = new Evidence();
e.AddHostEvidence(new Zone(SecurityZone.Internet));
var ps = SecurityManager.GetStandardSandbox(e);
var security = new SecurityPermission(SecurityPermissionFlag.Execution);
ps.AddPermission(security);
var setup = new AppDomainSetup {
ApplicationBase = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
};
return AppDomain.CreateDomain("Sandbox" + DateTime.Now, null, setup, ps);
}
public class Proxy : MarshalByRefObject
{
public Proxy() { }
public DoStuff()
{
// perform custom operation requiring permission
HelperAssembly.HelperMethods.Method1();
// do other stuff with low permission level
...
...
...
} …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
System.Security.PermissionSet PS = new System.Security.PermissionSet(PermissionState.None);
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess,Path));
PS.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup ADS = new AppDomainSetup();
ADS.ApplicationBase= Path;
AppDomain domain = AppDomain.CreateDomain("Pluging", null, ADS, PS, null);
Assembly asm = Assembly.LoadFrom(Path + "MacroBase.dll");
domain.Load(asm.FullName);
MacroBase.MacroBase em = (MacroBase.MacroBase)domain.CreateInstanceAndUnwrap(asm.FullName, "MacroBase.MacroBase");
em.Application(1);
Run Code Online (Sandbox Code Playgroud)
参数Path具有包含dll的floder的地址.现在它是"D:\ Programming Projects\Server3\Macros\c7b465b2-8314-4c7e-be3c-10c0185b4ac6"一个macrobase.dll的副本在Guid文件夹里面.Appdomain加载此dll并运行方法Application.
我期望最后一行不能访问c:\由于在开头应用的FileIOPermissionAccess,但提到的方法:
MacroBase.Application(int i)
{
System.IO.File.ReadAllBytes("c:\\test1_V.103.xls");
}
Run Code Online (Sandbox Code Playgroud)
好像完全不受限制地运行.
基于Microsoft的这篇文章: 如何:在Sandbox中运行部分可信代码 我也尝试了以下格式,没有更好的结果(它可以访问c :):
System.Security.PermissionSet PS = new System.Security.PermissionSet(PermissionState.None);
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess,Path));
PS.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup ADS = new AppDomainSetup();
ADS.ApplicationBase= Path;
AppDomain domain = AppDomain.CreateDomain("Pluging", null, ADS, PS, null);
Assembly asm = Assembly.LoadFrom(Path …Run Code Online (Sandbox Code Playgroud) 我正在调用ModelMetadataProviders.Current.GetMetadataForProperties来使用Visual Studio 2010获取WPF应用程序中的ModelMetadata列表.此调用执行正常,我得到IEnumerable <>作为回报.在代码行,我尝试迭代这个,我得到System.MethodAccessException.
有趣的是,只有在我使用F5进行调试时才会发生这种情况.如果我用Ctrl + F5运行代码,那么我不会得到这个异常,代码工作正常.如果我从Windows资源管理器运行exe,它运行良好.
当然,我错过了一些东西.可能是,System.Web.Mvc无法从WPF应用程序中使用?(为什么)有关visual studio调试器的东西吗?
任何帮助将不胜感激.
这是完整的例外:
尝试通过安全透明方法'System.Web.Mvc.TypeDescriptorHelper.Get(System.Type)'来访问安全关键方法'System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor(System.Type)'失败.
程序集'System.ComponentModel.DataAnnotations,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'是有条件的APTCA程序集,在当前的AppDomain中未启用.为了使该组件由部分信任或安全性的透明的代码中使用,请在创建应用程序域时添加组件名称"System.ComponentModel.DataAnnotations,公钥= 0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9"到的PartialTrustVisibleAssemblies列表.
c# ×5
.net ×3
security ×2
.net-4.0 ×1
appdomain ×1
architecture ×1
asp.net-mvc ×1
dll ×1
dllexport ×1
encryption ×1
javascript ×1
list ×1
properties ×1
r ×1
sandbox ×1
shiny ×1
trust ×1
vb.net ×1
widget ×1
wpf ×1