Joh*_*mas 3 windows delphi security winapi
我需要使文件真正只读 - 保持原样.没有删除,没有任何东西.
(设置'ReadOnly'属性不是一个选项)
我现在看到一些方法:
使用程序保持文件打开.缺点:可以杀死进程然后文件关闭.
使用程序设置安全属性.缺点:可以删除文件.此外,可以更改属性.
有任何想法吗?此外,将会感谢示例代码(最好在Delphi中).
更新:感谢目前为止的所有答案.他们真的很棒.我意识到我不是很清楚.我们要解决的问题是:
有一些类似.txt的文件包含敏感信息.我们的客户希望确保这些文件不会在其计算机上"幕后"更改.我们应该提一下,他们的PC很容易被恶意软件感染,专门用来做这件事.我们的客户应该能够使用记事本,写字板等打开这些文件,但他们接受这些文件是只读的.如果我们的任何客户采取决定性的行动,如进入"安全模式"等,并从他们的责任篡改文件.我们应该防范任何恶意软件,包括零日攻击.(因此,经典的防病毒解决方案并不合适).
你能给出一些想法吗?
PS:我最诚挚的道歉,从一开始就不那么清楚.
Mih*_*șan 17
这是"如果真的会发生什么?" 的问题.它与操作系统无关,这些要点同样适用于任何通用计算机.
想象一下,有一种方法可以以某种方式创建一个不可变的文件.
有什么能阻止某人用不可变文件(或其中许多文件)填满文件系统?
如果有人用操作系统需要的路径名创建不可变文件会怎样(Windows示例 - 某些用户使用NTUSER.DAT,*nix示例 - /bin/ls等)?
如果操作系统决定它必须移动文件(例如,在对文件系统进行碎片整理或重新组织时),该怎么办?
如果一个恶意软件用自己的副本替换系统文件然后使该文件不可变以防止任何人清理系统怎么办?
我觉得这个问题现在还不完整.您可以编辑它以包含有关您尝试解决的潜在问题的更多详细信息吗?
Mas*_*ler 14
你做不到这一点,原因很简单,你不应该被允许.正如米哈尔指出的那样,这有可能对计算机造成严重破坏.
编程伦理101:如果你的程序要在别人的计算机上运行,请记住它是他们的财产,而不是你的财产.这意味着他们有权修改和/或删除他们想要的任何内容.尝试像对待您的财产一样对待系统,他们会将您的程序视为恶意软件.
如果您需要确保文件可用,可能是最好的解决方案,Massif的想法是将其作为资源嵌入您的程序中.这样,只要有人篡改EXE,就会阻止你使用EXE,如果确实发生这种情况,那么无论如何你都会有更大的问题需要担心.
确保这些文件不会在"幕后"更改的方法是在文件中添加签名.
要对文件进行签名,例如:创建一个包含文件全部内容的字符串+一个密码,并计算字符串的SHA1-Hash.然后在文件的第一行或最后一行添加此哈希.
要检查签名:读取文件,删除带有散列的行,添加密码,重新计算散列并检查它是否与文件中的相同.
要使用Delphi计算SHA-1-Hashes,您可以使用MessageDigests.