【问题标题】:How to check the integrity of a bunch of files?如何检查一堆文件的完整性?
【发布时间】:2015-06-12 12:58:50
【问题描述】:

我需要一种合理的方式来使用 PHP 来检查特定服务器上目录下存在的大量文件的完整性(大量这里表示 6000 或更多)。

基本上,我想知道它们是否已被更改。我想出的解决方案是计算所有文件的哈希值,如下所示:

$accnum = 1;
$modulo = PHP_INT_MAX >> 5;
foreach ($files as $file) {
  $crc32 = crc32(md5_file($file));
  $accnum = ($accnum % $modulo) * 31 + $crc32;
}
$hash = md5($accnum);

然后我将哈希值记录在入侵者无法到达的地方。

然后,为了检查篡改,我重新计算哈希并将其与记录的值进行比较。如果不同,我知道至少有一个文件已被更改。

问题:
- 这是一个合理的方法吗?
- 如果没有,如何监控大量文件的完整性?

【问题讨论】:

  • 为了加快速度,您可能还想存储文件的最后修改日期,并且仅在日期更改时才比较哈希值。这应该会加快应用程序的速度,因为日期检查应该比检查哈希消耗更少的时间。我不知道这是否是您的情况的最佳解决方案,但这是值得考虑的事情。
  • 另一种可能性是“监视”目录中的“文件系统”事件。 inotify-tools 之类的东西可能有用吗?
  • 您的“哈希”方法可以正常工作。还要保留您自己网站的“离线备份”以及“托管服务提供商”提供的“备份”。

标签: php integer integrity


【解决方案1】:

你为什么不使用Git 呢?保留一个远程存储库,让您的“入侵者”无法访问并监视本地更改或将您的代码与远程存储库进行比较。

【讨论】:

  • 我在其他一些上下文中使用 Git 来监控本地更改。在这种情况下,我只想监控文件的一个子集,而维护.gitignore 将是一场噩梦。 (我不是反对者。)
  • 没有问题。我相信 git 是一种跟踪更改并同时检查完整性的好方法,因为 git 中的所有内容都使用 SHA-1 哈希进行校验和,并且实现非常快。您也可以选择将 .gitignore 中的文件列入白名单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多