Php,自我验证脚本(MD5),如何编写? 让我们考虑这个代码: if (md5_file(__FILE__) != 'MD5 CODE') { echo 'fail!'; }

Php,自我验证脚本(MD5),如何编写? 让我们考虑这个代码: if (md5_file(__FILE__) != 'MD5 CODE') { echo 'fail!'; },php,md5,Php,Md5,当然,如果有条件的话,给他写信总是失败的。或者有解决方案吗?您将永远无法正确执行该代码,因为每当您更新MD5\u代码时,文件的哈希值都会发生变化 检查文件的唯一方法是从另一个文件,而不是从文件本身。除非将哈希放入外部文件中: $hash = file_get_contents('myhash.txt'); if (md5_file(__FILE__) != $hash) { print "WARNING: Code modified!"; } 您将永远无法正确执行该代码,因为无论何时

当然,如果有条件的话,给他写信总是失败的。或者有解决方案吗?

您将永远无法正确执行该代码,因为每当您更新
MD5\u代码时,文件的哈希值都会发生变化

检查文件的唯一方法是从另一个文件,而不是从文件本身。除非将哈希放入外部文件中:

$hash = file_get_contents('myhash.txt');

if (md5_file(__FILE__) != $hash) {
    print "WARNING: Code modified!";
}

您将永远无法正确执行该代码,因为无论何时更新
MD5_代码
,文件的哈希值都将更改

检查文件的唯一方法是从另一个文件,而不是从文件本身。除非将哈希放入外部文件中:

$hash = file_get_contents('myhash.txt');

if (md5_file(__FILE__) != $hash) {
    print "WARNING: Code modified!";
}

有几种方法可以使用散列函数“自我验证”。其中一个技巧是将预期的md5哈希存储在php脚本的第一行中,然后在该行之后验证文件

<?php
$md5Expected="md5string"; $sizeExpected=<bytes>;
<Code to validate.  Includes last line.>
?>
请注意,您可能希望检查文件的大小,这将考虑前两行代码

有效的观点是,验证最好由外部第三方完成,如操作系统。查看
md5sum-c
sha1sum-c


此外,如果您担心服务器上的文件被不受控制地修改,那么您可能会遇到更大的问题。如果这是因为可以自由修改服务器上的文件,则可能需要重新评估该策略。

可以通过哈希函数进行“自我验证”。其中一个技巧是将预期的md5哈希存储在php脚本的第一行中,然后在该行之后验证文件

<?php
$md5Expected="md5string"; $sizeExpected=<bytes>;
<Code to validate.  Includes last line.>
?>
请注意,您可能希望检查文件的大小,这将考虑前两行代码

有效的观点是,验证最好由外部第三方完成,如操作系统。查看
md5sum-c
sha1sum-c



此外,如果您担心服务器上的文件被不受控制地修改,那么您可能会遇到更大的问题。如果这是因为可以自由修改服务器上的文件,则可能需要重新评估该策略。

问题是什么?您的md5输出永远不会等于文本字符串“md5_CODE”是的,但是我应该编写什么md5代码,以便它始终通过?如何计算?即使代码可以工作,恶意的人也可能同时编辑代码和MD5,从而使该技术失效。您需要预计算并将校验和哈希存储在某个地方。数据库、键/值缓存存储等仍然没有意义。生成散列的唯一方法是在比较的左侧执行散列的方式问题是什么?您的md5输出永远不会等于文本字符串“md5_CODE”是的,但是我应该编写什么md5代码,以便它始终通过?如何计算?即使代码可以工作,恶意的人也可能同时编辑代码和MD5,从而使该技术失效。您需要预计算并将校验和哈希存储在某个地方。数据库、键/值缓存存储等仍然没有意义。生成散列的唯一方法是在比较器左侧执行该操作。如果将散列文本文件放在某个位置,但不在web服务器路径中,则可以使其完全相同secure@hexereisoftware:它永远不会安全,想要修改代码的人可以删除
if
语句。对,但是你在这里试图抓住的不是重写完整代码的人,而是简单的暴力攻击脚本,它只是在文件末尾附加恶意代码,而不检查文件的内容。你也可以在一些包含的文件中外部化检查功能,给它一个不透明的名称,如
pdir(_u文件_u)
返回true或false。通过这种方式,必须检查完整的代码才能知道该函数的作用。如果您将哈希文本文件放在某个位置,但不在web服务器路径中,那么您可以使其完全正确secure@hexereisoftware:它永远不会安全,想要修改代码的人可以删除
if
语句。对,但是你在这里试图抓住的不是重写完整代码的人,而是简单的暴力攻击脚本,它只是在文件末尾附加恶意代码,而不检查文件的内容。你也可以在一些包含的文件中外部化检查功能,给它一个不透明的名称,如
pdir(_u文件_u)
返回true或false。通过这种方式,必须检查完整的代码才能知道这个函数的作用。