是否可以阻止某人使用Reflection来获取内部类变量的值?
我有一个内部(VB中的朋友)类级变量,只有在调用者知道密码时才能访问它。有一种方法可以公开这个接受密码的变量,但是可以使用Reflection直接访问变量。我可以防止这种情况发生吗?
更多细节,可能正在攻击此变量的代码作为插件加载到主应用程序中。
答案 0 :(得分:3)
您可以通过obfuscating源代码使反射变得更难(但并非不可能)。这通常会将代码中使用的名称更改为难以猜测的难以辨认的名称。但是,它没有提供任何保证,任何坚定的程序员都可以找到这些名称并反映他/她想要的所有名称。
或者,您可以通过以非.NET语言(例如非托管C ++)实现代码的这一部分(整个类)来实现反射。例如,在mscorlib
中,InternalGetHashCode
方法为not implemented in managed code,因此无法反映它是如何工作的。
您可以使用PInvoke从托管代码调用非托管功能。