是否可以阻止某人使用反射来获取内部类变量的值?
我有一个内部(VB中的Friend)类级变量,只有当调用方知道密码时才可以访问。有一种方法公开了这个需要密码的变量,但也可以使用Reflection直接访问该变量。我能阻止这种情况发生吗?
更详细的信息是,可能攻击该变量的代码作为插件加载到主应用程序中。
您可以通过混淆源代码使反射更加困难(但并非不可能)。这主要是将代码中使用的名称更改为不易猜测的难以辨认的名称。然而,它并没有提供任何保证,任何有决心的程序员都可以找到这些名字,并反映出他/她想要的一切。
或者,您可以通过在非.NET语言(如非托管C++)中实现代码的这一部分(整个类)来使反射变得不可能。例如,在mscorlib
中,InternalGetHashCode
方法没有在托管代码中实现,因此无法对其进行反思以了解其工作原理。
您可以使用PInvoke从托管代码中调用非托管功能。