防止编辑文件

防止文本文件(例如xml)被用户编辑的最明智的方法是什么? 我需要确保我存储用户名的文件和桌面应用程序的权限不能简单地编辑。

也许我可以生成文件的证书,桌面应用程序检查这个?

我在WinForms应用程序中使用C#。

您可以使用文件系统权限来阻止编辑。

您可以使用加密来进行编辑

您可以获取文件的哈希值以检测编辑。

我认为加密文件,然后解密它将是最容易的。 尽管如果用户足够聪明,他们仍然可以阅读文件的内容。 例如,从内存中读取纯文本

最简单的方法可能是使用具有用户名和密码身份validation的数据库。

最聪明的是加密它,以便数据不可用。

但是,如果用户真的想要访问他们机器上的文件,他们就会得到它。 您可以将其设置为无法读取任何有用的内容或进行有用的编辑,但如果他们愿意,他们将能够编辑该文件。

由于您的目标是将用户的权限直接存储在XML文件中,因此除了阻止用户编辑文件之外,还需要一定程度的安全性。 即使您(假设)可以在操作系统级别对编辑文件施加一些限制,任何管理用户都可以在另一台计算机上编辑该文件,然后覆盖您的受保护版本。

因此,您必须假设用户可以编辑该文件。 您拥有的唯一办法是能够识别他们何时拥有,并忽略他们的编辑。

您建议创建证书的方法听起来完全正确。 您可以计算整个文件的哈希值,也可以逐个用户地计算(在您的上下文中最合适的位置),在任何一种情况下都使用私钥或密钥来确保编辑文件的人不能只需重新计算哈希值。

恕我直言,你不能保证没有人可以编辑它,但你可以加密文件以保护信息。

你无法保证任何人都可以使用磁盘启动来启动机器,例如编辑文本文件。

我个人认为在这种情况下,XML不是用于存储安全信息的适当格式。 与二进制格式相比,XML的重点在于它是人类可读/可编辑的。 使用某种带有已知散列/ crc的加密二进制格式,如果您想要完全安全,则会告诉您它是否受到干扰。

您可以使用加密技术,但使用Windows内置的DPAPI,因为您还必须安全地存储加密密钥,这又是另一个麻烦。

使用DPAPI的好处是它使用了用户或计算机独有的密钥,并且从未向程序员公开过! 但是,如果您将文件移动到另一个用户的配置文件或计算机上,它将是不可读的。

如果必须将该数据保存在XML文本文件中,则可以考虑每次修改时应用程序对其进行数字签名,并在读取文件时检查数字签名。

有关如何签署XML文件以及如何validation签名的更多详细信息。

但我认为最好只保留不同格式的数据 – 数据库,加密文件,应用程序属性……