防止在.NET中对内部字段进行反射访问

时间:2013-02-19 21:11:20

标签: .net security reflection

是否可以阻止某人使用Reflection来获取内部类变量的值?

我有一个内部(VB中的朋友)类级变量,只有在调用者知道密码时才能访问它。有一种方法可以公开这个接受密码的变量,但是可以使用Reflection直接访问变量。我可以防止这种情况发生吗?

更多细节,可能正在攻击此变量的代码作为插件加载到主应用程序中。

1 个答案:

答案 0 :(得分:3)

您可以通过obfuscating源代码使反射变得更难(但并非不可能)。这通常会将代码中使用的名称更改为难以猜测的难以辨认的名称。但是,它没有提供任何保证,任何坚定的程序员都可以找到这些名称并反映他/她想要的所有名称。

或者,您可以通过以非.NET语言(例如非托管C ++)实现代码的这一部分(整个类)来实现反射。例如,在mscorlib中,InternalGetHashCode方法为not implemented in managed code,因此无法反映它是如何工作的。

您可以使用PInvoke从托管代码调用非托管功能。