公共类的私有属性是否在DLL中安全

时间:2017-04-19 21:10:40

标签: c# security dll

我理解公共和私人之间在可访问性和一般编程实践方面的区别。我更具体地询问DLL中的安全性。

DLL看起来像这样......

public static class OrphanAnnieDecoderRing
    {
        private const string _secretCode = "Drink More Ovaltine";

        private int OvaltineDrinkCount = 0;

        public void DrinkOvaltine() => OvaltineDrinkCount += 1;

        public string RevealSecret
        {
          get
            {
              if (OvaltineDrinkCount >= 500)
                {
                  return _secretCode;
                }
              else
                {
                  return "Unable to reveal secret!";
                }
           } 
        }
    }

我的_secretCode和OvaltineDrinkCount属性是否可以被访问DLL的任何人的可见性或操作保护(除了符合某些条件的条件限制之外)?我知道DLL文件可以解决一些安全问题,我不确定私有属性或私有常量是否需要注意这些问题。

1 个答案:

答案 0 :(得分:2)

没有

Access-Modifiers用于限制成员对您的类的调用者的访问。 这对于强制封装非常有用,封装是面向对象编程OOP(隐藏实现细节等)引入的主要目标之一。

当您将代码编译为DLL时,它会在程序集中转换为中间语言(IL)(在技术上与经典非托管(Win32动态链接库)几乎没有关系,它在运行时被编译为机器代码目标机器(通过即时编译器,JIT)。

然而,IL可以使用像ILSpy这样的工具轻松地进行“逆向工程”,所以每个有权访问你的程序集的人都可以“读取”这个秘密。

(更进一步,甚至可以使用反射从类外部修改私有只读字段,但这本身就是一个主题。)