【问题标题】:Hiding a private field from reflection in .net在.net中隐藏一个私有字段以防止反射
【发布时间】:2014-04-13 21:14:47
【问题描述】:

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

在一些发布后的测试中,我发现使用反射来操纵私有字段可能会破坏该进程。该类并非设计为sealed,因此库的使用者可以创建派生类。

有没有办法保护私有成员以防止通过反射(来自派生或消费者代码)进行修改?

更新:我发现从 Hans Passantold question 的评论提到了 [ReflectionPermission]。现在正在调查。

【问题讨论】:

  • 你不能阻止别人使用反射。
  • @Arran:当然不是。我的问题是关于 CLR 是否提供安全机制来防止访问标记的私有成员。
  • 答案还是没有!
  • 如果您的客户想要破坏他们的卷,他们有比破解您的软件更简单的方法。

标签: c# .net reflection private private-members


【解决方案1】:

没有办法从反射中隐藏你的领域。它可用于访问和操作类型上的任何字段。您可以采取一些步骤,例如混淆,这使得识别字段变得更加困难,进而更难通过反射进行更改。不过,这只是一个减速带。坚定的开发人员可以使用反射来解决您的任何变通方法

【讨论】:

    【解决方案2】:

    我相信您将尽最大努力混淆代码。否则,您无法阻止某人使用反射来破坏一些东西。

    this post 可能会让您对如何进行操作有所了解。

    【讨论】:

      【解决方案3】:

      Private 对使用您的类的开发人员来说是私有的。您不能通过反射阻止其访问。

      【讨论】:

        【解决方案4】:

        简短回答:

        如果他们有特权,你不能阻止他们弄乱你的程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-23
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          • 2015-01-24
          • 1970-01-01
          • 1970-01-01
          • 2011-03-15
          相关资源
          最近更新 更多