C# 限制程序集可以调用的程序集

C# 限制程序集可以调用的程序集,c#,security,C#,Security,我们需要确保Child1只能由Parent1调用,而不能由任何试图从Child1调用数据的恶意软件或恶意应用程序调用 我的Parent1和Child1都有相同的证书。我在Child1类中使用下面的属性行 [PublisherIdentityPermission(SecurityAction.Demand, CertFile = @"calltest.cer")] 我在parent1程序集中没有添加代码或属性,只是使用与Child1程序集相同的证书对其进行了强命名 问题是我编写了另一个程序集Ev

我们需要确保
Child1
只能由
Parent1
调用,而不能由任何试图从
Child1
调用数据的恶意软件或恶意应用程序调用

我的
Parent1
Child1
都有相同的证书。我在
Child1
类中使用下面的属性行

[PublisherIdentityPermission(SecurityAction.Demand, CertFile = @"calltest.cer")]
我在parent1程序集中没有添加代码或属性,只是使用与
Child1
程序集相同的证书对其进行了强命名

问题是我编写了另一个程序集
Evil1
,它没有任何签名,它仍然可以调用
Child1
程序集

子组件

namespace Child1
{
   [PublisherIdentityPermission(SecurityAction.Demand, CertFile = @"C:\calltest.cer")]
   public class Child1
   {
       public int AddNumber(int x, int y)
       {
          return x + y;
       }
   }
 }
public class Parent1
{
    public int DoMath1(int x, int y)
    {
        Child1.Child1 chd = new Child1.Child1();
        return chd.AddNumber(x, y);
    }
}
父程序集

namespace Child1
{
   [PublisherIdentityPermission(SecurityAction.Demand, CertFile = @"C:\calltest.cer")]
   public class Child1
   {
       public int AddNumber(int x, int y)
       {
          return x + y;
       }
   }
 }
public class Parent1
{
    public int DoMath1(int x, int y)
    {
        Child1.Child1 chd = new Child1.Child1();
        return chd.AddNumber(x, y);
    }
}

我以前没有使用过权限,但我以前看到过类似的事情,通过将子项设置为内部,并使用
InternalsVisibleToAttribute
使它们对父程序集可见。不知道你是否可以用你正在尝试的方式来做。你正在使用CAS机制,这在.NET 4.0中是不推荐的。特别是,
PublisherIdentityPermission
的文档中说“从.NET Framework 4开始,不使用身份权限”。但是,我有一个问题要问您:您试图通过拒绝访问
Child1
库来保护哪个系统?例如,如果您试图保护的系统是用户硬盘上的一个文件,那么恶意软件无论如何都可以直接修改该文件。子DLL是某些数据的网关,当机器被严重锁定时,安全组正在寻找这种额外的安全性。感谢您提到CAS不在.NET4中。我错过了。我们是.NET 4,我将寻找替代品基本问题是,如果您在该机器上拥有具有给定用户访问权限的恶意软件,那么您根本无法阻止该恶意软件执行该用户授权执行的任何操作。坦率地说,你似乎期待着一次非常有针对性的攻击——我严重怀疑一个普通的恶意软件是否会自行检查DLL,以尝试发现其中是否有值得黑客攻击的。如果您是知道以您的
Child1
库为目标的攻击者的受害者,并且他已经拥有与
Parent1
应用程序具有相同信任级别的恶意软件,那么您所能提供的任何保护都不会起作用-如果出现最坏情况,攻击者将从RAM中提取加载的内存映像,检查它以移除任何保护,并运行其修改版本。