在.NET中隐藏私有字段以防反射

4

我有一个类,它在整个磁盘卷上执行一些敏感的I/O操作。所谓敏感是指如果操作出错,可能会损坏目标卷。

在一些发布后的测试中,我发现可以使用反射来操纵私有字段来损坏这个过程。该类设计上没有被 sealed,以便库的用户可以创建派生类。

有没有一种方法来安全地保护私有成员,以防止通过反射进行修改(从派生或用户代码)?

更新:我在旧问题的评论中找到了Hans Passant的一条评论,提到了[ReflectionPermission]。现在正在研究它。


4
你无法阻止别人使用反射。 - Arran
@Arran:当然没有。我的问题是关于CLR是否提供安全机制来防止访问标记为私有成员的内容。 - Raheel Khan
1
答案仍然是否定的! - Arran
2
如果您的客户想要损坏他们的卷,他们有比黑客攻击您的软件更容易的方法。 - Anton Tykhyy
4个回答

7

无法从反射中隐藏您的字段。 它可以用于访问和操作类型上的任何字段。 有一些步骤,例如混淆,可以使它更难以识别字段,进而更难通过反射进行更改。 然而,这只是一个速度障碍。 决心的开发人员可以使用反射打破您所有的解决方法。


4
简短回答:不行。

如果用户拥有特权,您无法阻止他们对您的程序进行更改。


3

我认为你最好的努力应该是混淆代码。否则,你无法阻止别人使用反射来修改一些东西。

这里有一个帖子,或许能给你一些关于如何继续的想法。


2

Private只是对使用你的类的开发人员私有。你无法通过反射阻止其访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接