如何防止外部xml文件修改?

时间:2010-08-24 21:13:41

标签: java xml security file-io

我正在编写一个小库,它将处理xml文件以存储一些数据,我只需要通过我在库中提供的方法处理这些数据。

我知道xml对于人类和机器都是可读的,如果有人真的想修改xml文件,他可能会这样做,所以......你们中有没有人有想法可行吗?

5 个答案:

答案 0 :(得分:2)

您可以在其中存储更多信息,例如内容的哈希值(当然,在插入哈希值之前)。

当您重新加载此文件时,您可以检查哈希值。如果它与您文件的当前哈希值不匹配,那么它已被修改。

答案 1 :(得分:1)

好吧,没有明确的方法来阻止访问该文件。但是你可以使用几种方法来手动覆盖文件。

您可以做的第一件事就是锁定文件(需要确保操作系统兼容性),只要您的应用程序正在运行。任何人都可以规避操作系统文件锁定,但对普通用户来说这并非易事。

其次,您可以考虑在应用程序终止时加密文件。恢复密钥可以通过应用程序代码检查来完成,但同样重复 - 这是一项非常重要的工作。

答案 2 :(得分:1)

如上所述,您已经实现了一种检测文件更改的方法,并且想要一种如何阻止这些修改的方法。

通常,这是不可能的。我最后会解释一下。

你有几个选择:

  • 如果要在程序运行时阻止修改,可以锁定文件。这将阻止应用程序访问它,但是当程序退出时,锁定将被释放。 (Example
  • 如果要在程序未运行时阻止访问,则必须更改文件系统权限以禁止用户编辑文件。由于它与文件系统相关,因此更加困难,而像FAT这样的某些文件系统根本没有文件权限。
  • 您可以编写一个“守护程序”脚本来监视文件更改并将其还原。

但是所有这些可能性都存在一个问题 - 程序通常具有与用户相同的权限,因此程序执行的所有操作都可以由用户撤消。如果您的程序具有访问权限,则该用户也可以访问。

如果锁定文件,用户可以使用Unlocker之类的工具释放锁定,并进行编辑。如果您的程序设置了文件权限,则用户只需将其更改回来即可。在某些系统上,可能会阻止这种情况,但您的程序也会失去访问权限。坏。如果您编写守护程序,则用户可以将其删除。

唯一的可能性是让程序以比用户更多的权限运行,并将数据存储在用户无法访问的位置。例如,在Windows上,您可以将其作为服务运行。这要求用户没有管理员权限(或Unix系统上的root用户)。

如果用户是管理员或root用户,则您已经丢失,因为他拥有对系统的完全访问权限而您无法隐藏。 (在Windows上,还有一个级别,即SYSTEM用户,但管理员用户也可以轻松获得这些权限。)

答案 3 :(得分:1)

将与密钥连接的文件的哈希附加到文件的末尾。像XML评论一样

<!-- 0123456789abcdefabcdef0123456789 -->

打开文件后,再次使用附加的密钥对其进行哈希处理并验证它。

一些伪造的代码要澄清。

# Read
secret  = "Secret key"
file    = get_file_contents("file.xml")
content = strip_trailing_comment(file)
hash    = get_content_hash(file)
if sha1(content + secret) == hash:
    # File is valid

# Write
secret            = "Secret key"
content           = content_to_xml()
hash              = sha1(content + secret)
content_with_hash = append_comment(hash)
write_to_file("file.xml", content_with_hash)

希望能够消除潜在的误解。这样代码仍然是人类可读的,如果你想要的话,很难篡改。

答案 4 :(得分:0)

正如我从讨论和您的问题中所理解的那样,您希望将数据存储为xml,并且用户很难打开/修改它。

在这种情况下,你将不得不做一些额外的工作:

  • 使用Colin HEBERT
  • 建议的哈希信息创建xml文件
  • 使用密码保护压缩文件,只有您的应用知道的密码

如何密码保护您的zip文件<{3}}

请注意,在这种方法中,xml文件甚至无法读取。

如果您希望您的文件可读,那么您可以使用您的应用程序的单独用户ID(unix用户ID或windows userid)作为文件的所有者。并且只允许该用户修改文件,但这仍然不是100%的解决方案。