代码之家  ›  专栏  ›  技术社区  ›  John Thomas

如何使文件真正不可变(不可删除且只读)?

  •  3
  • John Thomas  · 技术社区  · 17 年前

    我需要使一个文件真正只读-保持原样。没有删除,什么都没有。

    (设置 “只读” 属性不是选项)

    我现在看到一些方法:

    有什么想法吗?此外,一个示例代码(最好是Delphi)将不胜感激。

    更新:

    有些类似.txt的文件包含敏感信息。我们的客户希望确保这些文件不会在他们的计算机上“幕后”更改。我们应该提到的是,他们的电脑很容易感染专门针对这种行为的恶意软件。我们的客户应该能够用记事本、写字板等打开这些文件,但他们接受这些文件是只读的。如果我们的任何客户采取果断行动,如进入“安全模式”等,并从那里篡改文件是他们的责任。我们应该保护他们不受伤害 恶意软件,包括零日攻击。(因此,经典的防病毒解决方案并不那么合适)。

    你现在能给出一些想法吗?

    PS:我最诚挚的歉意是从一开始就不那么清楚。

    12 回复  |  直到 17 年前
        1
  •  17
  •   Mihai Limbășan    17 年前

    想象一下,有一种方法可以以某种方式创建一个不可变的文件。

    • 有什么可以阻止某人用不可变的文件(或其中的许多文件)填充文件系统?

    • 如果操作系统决定必须移动文件(例如,在对文件系统进行碎片整理或以其他方式重新组织时),该怎么办?

    我觉得这个问题像现在这样不完整。您能否对其进行编辑,以包含有关您试图解决的潜在问题的更多详细信息?

        2
  •  15
  •   Mason Wheeler    17 年前

    你不能这么做,原因很简单,你无论如何都不应该被允许这么做。正如米哈尔指出的,这有可能对计算机造成严重破坏。

    编程道德101:如果你的程序要在别人的计算机上运行,记住这是他们的财产,而不是你的。这意味着他们有权修改和/或删除他们想要的任何内容。试着像对待你的财产一样对待系统,他们会像对待恶意软件一样对待你的程序。

    如果您需要确保文件可用,最好的解决方案可能是Massif将其作为资源嵌入到您的程序中。这样,除非有人篡改EXE,否则任何东西都不会阻止您使用它,如果是这样的话 做 不管怎样,你有更大的问题要担心。

        3
  •  12
  •   Peter    17 年前

        4
  •  7
  •   Name    17 年前

    确保这些文件不会在“幕后”更改的一种方法是在文件中添加签名。

    要对文件进行签名,您可以执行以下操作,例如: 生成一个包含文件全部内容的字符串+一个秘密密码,并计算该字符串的SHA1哈希值。然后在文件的第一行或最后一行添加此哈希。

    要检查签名:

    要使用Delphi计算SHA-1-hash,您可以使用 MessageDigests

        5
  •  6
  •   Richard    17 年前

    买一个PROM和一个微控制器编程器套件,然后把你的文件烧录到ROM中。。。

        6
  •  4
  •   Massif    17 年前

    你命中注定了。如果我启动到安全模式,即使是windows也不能阻止我任意删除文件。

    在有问题的文件上设置一个监视程序,并在发生更改时将其替换为原始的监视程序,怎么样?或者将文件嵌入到需要它的程序的资源中?

        7
  •  4
  •   Aric TenEyck    17 年前

    如果我知道怎么做,我会把它作为一个bug报告给微软。

        8
  •  3
  •   Loren Pechtel    17 年前

    将其刻录为一次写入介质。

        9
  •  2
  •   Michael Lloyd Lee mlk    17 年前

    你为什么要这个?这对我来说是个奇怪的要求。

    我认为你做不到。我能想到的最好的相似物是:

        10
  •  2
  •   Community Mohan Dere    11 年前

    你可以使用windows security acls 以保护文件。但是,如果用户可以访问硬件,那么他们可以随时按照massif的说法启动到另一种模式或操作系统并删除它。

        11
  •  2
  •   Joshua    17 年前

    微软的Raymond Chen最近写了一篇与此密切相关的文章: The way to stop people from copying files to a folder is to use NTFS security, not to block drag/drop

    要正确保护文件并防止篡改,可以将文件上的ACL设置为具有读取权限,但拒绝写入、删除和更改权限。您可以为特定的用户、组甚至所有人设置该选项!文件的所有者将 拥有更改权限的权限,因此您不能永久地将自己锁定在外(即使您试图拒绝 CREATOR OWNER (特殊对象)。请记住,要从“安全性”对话框中手动设置这些权限,您必须进入“高级权限”区域,它们在“标准”页面中不可用。您可能还希望中断继承,以便该文件仅具有您设置的权限,而不具有来自其父级的权限。

    File Security and Access Rights (MSDN) . 您可以在调用第一个时提供权限 CreateFile SetNamedSecurityInfo 或 SetSecurityInfo .

    编辑: 为了解决恶意软件的问题,你甚至可以否认 SYSTEM 系统 账户在我努力清除病毒时,病毒无法传播。

        12
  •  2
  •   Tim Cooper    12 年前