首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自验证脚本(MD5),怎么写?

问自验证脚本(MD5),怎么写?
EN

Stack Overflow用户
提问于 2015-04-06 02:35:41
回答 2查看 676关注 0票数 1

让我们考虑一下这段代码:

代码语言:javascript
复制
if (md5_file(__FILE__) != 'MD5 CODE')
{
    echo 'fail!';
}

当然,在有条件的情况下,无论写什么,它都会失败。或者有解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-06 02:46:45

您将永远无法正确执行该代码,因为每当您更新MD5_CODE时,文件的哈希都会更改。

检查文件的唯一方法是从另一个文件检查,而不是从文件本身检查。除非您将散列放在外部文件中:

代码语言:javascript
复制
$hash = file_get_contents('myhash.txt');

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

Stack Overflow用户

发布于 2017-09-02 08:29:28

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

代码语言:javascript
复制
<?php
$md5Expected="md5string"; $sizeExpected=<bytes>;
<Code to validate.  Includes last line.>
?>

检查这一点的函数可能看起来有点像:

代码语言:javascript
复制
function validateMeContents( $md5Expected, $sizeExpected ) {
        $checkFilename = basename( $_SERVER['PHP_SELF'] );
        // the first 2 lines are not checked
        $fileContents = array_splice( file( $checkFilename ), 2 );
        $md5Contents = md5( implode( $fileContents ) );
        $mySize = filesize( $checkFilename );

        return( ( $md5Expected == $md5Contents ) and ( $sizeExpected == $mySize ) );
}

请注意,您可能希望检查文件的大小,这将考虑到代码的前2行。

已经提出了有效的观点,即验证可能最好由外部第三方完成,例如操作系统。查看md5sum -c或sha1sum -c。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29460803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档