小编Ali*_*ice的帖子

.NET Framework 4.x中的插件系统安全性(无CAS)

我想要实现的是一个具有以下功能的插件系统:

  • 从我可能不信任的来源(开发人员)加载外部插件,但是安装插件的最终用户信任
  • 授予特定范围内的每插件权限; 例如,一个插件可能具有从特定位置读取文件的许可,而其他插件可能被允许连接到特定的网站位置
  • 每个插件权限的一个特例:与另一个对象交互,很可能作为接口实例提供,而不访问任何非公共成员(甚至没有偷偷摸摸的反射技术)
  • 在插件代码可以造成任何伤害之前,防止最终用户不同意的操作,例如访问非公共成员或操作文件系统

在我的搜索过程中,我发现大多数SO解决方案涉及代码访问安全性,据我所知,从.NET 4.x开始已经过时了.我还在MSDN页面上阅读了一些关于新安全模型的内容,看来有必要公开受保护资源的库代码 ; 但是,我找不到任何显示如何应用此类代码的示例.我的猜测是,它将涉及创建单独的AppDomains并可能使用Principal权限,但这就是我所知道的.

另外,我还发现只提到强烈命名的集会,但我不相信这就足够了.如果我没有弄错的话,强大的命名优势之一就是插件开发人员可以通过使用自己的私钥对组件哈希进行签名来证明自己的身份,而其他人可以使用知名且可信的公钥进行检查.然而,仅此一点似乎太不灵活,因为它要么要求开发人员亲自决定应该信任哪些代码,要么只信任任何学会签署其程序集的人.

我将非常感谢使用最新安全模型的安全管理代码的一个很好的例子.我目前的想法:

  • 用于暴露潜在敏感操作(例如A和B)的服务接口
  • 服务的虚拟实现,重点是防止未经授权执行这些操作
  • 来自不同程序集的两个插件,一个具有执行操作A的权限,另一个具有操作B的权限
  • 设置服务的应用程序,使用插件加载程序集并尝试对每个程序执行操作,以便阻止未经授权的操作并正确执行授权操作
  • 当在应用程序中运行时,它们本身的插件都不应该能够访问常规敏感API,例如文件I/O或网络,但是应该可以通过服务来完成
  • 所有这些都尽可能地遵循这些建议(与2010年的SO问题的基于CAS的解决方案相反)

当然,如果它以更好的方式实现目标,欢迎您建议另一种架构.

.net c# security permissions plugins

12
推荐指数
1
解决办法
604
查看次数

自动属性初始化器Singleton实现

因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然其他人也有这个想法.

public sealed class Singleton
{
    public static Singleton Instance { get; } = new Singleton();
    private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 它的线程安全性如何?
  2. 它是多么懒惰,或者实际创建实例的时候?(不是优先考虑,但对未来的参考会有好处)
  3. 总体来说这是一个好主意吗?

(它可能看起来与这个问题类似,但事实并非如此)

.net c# singleton automatic-properties c#-6.0

8
推荐指数
1
解决办法
1284
查看次数