我正在编写一个小库,它将处理xml文件以存储一些数据,我只需要通过我在库中提供的方法处理这些数据。
我知道xml对于人类和机器都是可读的,如果有人真的想修改xml文件,他可能会这样做,所以......你们中有没有人有想法可行吗?
答案 0 :(得分:2)
您可以在其中存储更多信息,例如内容的哈希值(当然,在插入哈希值之前)。
当您重新加载此文件时,您可以检查哈希值。如果它与您文件的当前哈希值不匹配,那么它已被修改。
答案 1 :(得分:1)
好吧,没有明确的方法来阻止访问该文件。但是你可以使用几种方法来手动覆盖文件。
您可以做的第一件事就是锁定文件(需要确保操作系统兼容性),只要您的应用程序正在运行。任何人都可以规避操作系统文件锁定,但对普通用户来说这并非易事。
其次,您可以考虑在应用程序终止时加密文件。恢复密钥可以通过应用程序代码检查来完成,但同样重复 - 这是一项非常重要的工作。
答案 2 :(得分:1)
如上所述,您已经实现了一种检测文件更改的方法,并且想要一种如何阻止这些修改的方法。
通常,这是不可能的。我最后会解释一下。
你有几个选择:
但是所有这些可能性都存在一个问题 - 程序通常具有与用户相同的权限,因此程序执行的所有操作都可以由用户撤消。如果您的程序具有访问权限,则该用户也可以访问。
如果锁定文件,用户可以使用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,并且用户很难打开/修改它。
在这种情况下,你将不得不做一些额外的工作:
如何密码保护您的zip文件<{3}}
请注意,在这种方法中,xml文件甚至无法读取。
如果您希望您的文件可读,那么您可以使用您的应用程序的单独用户ID(unix用户ID或windows userid)作为文件的所有者。并且只允许该用户修改文件,但这仍然不是100%的解决方案。