前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php校验文件md5防止二次修改源码

php校验文件md5防止二次修改源码

作者头像
MoLeft
发布2022-08-30 11:23:23
7120
发布2022-08-30 11:23:23
举报
文章被收录于专栏:用砖头敲代码

思路来源

这几天一直在想,不加密源码怎么防止源码被二次修改。后来突然想到了云授权v2里面用到的方法,可以先生生成一个文件md5的数组,然后转换成json,放到服务器上,客户端只需要校验md5就可以判断出文件有没有被修改。 想要获取文件的md5的话,我们当然不可能一个一个的去获取,所以我的思路是先获取某个文件夹的文件树,然后在通过foreach来循环获取md5.

定义函数

首先我们先利用glob函数来定义一个获取文件树的函数,因为我也测试了很多的函数,最后发现glob比较适合这个项目,而scandir会迷之错误,所以就被我弃坑了。 至于为什么要定义成函数,因为方便获取二级,三级或者...级的目录。

代码语言:javascript
复制
//获取文件树
function get_filetree($path){
    $tree = array();
    foreach (glob($path.'/*') as $single) {
        //判断是否为目录
        if (is_dir($single)) {
            $tree = array_merge($tree, get_filetree($single));
        } else {
            //判断是否为php文件
            if(explode('.',$single)[count(explode('.',$single))-1] == 'php'){
                $tree[] = $single;
            }
        }
    }
    //返回文件树
    return $tree;
}

使用函数

函数定义好了之后,我们开始利用这个函数来获取文件的md5,这里我推荐用绝对路径来获取,而不是相对路径

代码语言:javascript
复制
foreach (get_filetree(str_replace("\\",'/',dirname(__FILE__))) as $v) {
    $data[$v] = md5_file($v);
}
exit(json_encode($data));

这样我们就获得了我们需要的md5,通过json来输出的就是下面这个样子

代码语言:javascript
复制
{
  "C:/Users/Administrator/Desktop/wwwroot/work/2.php": "8974536dbb2ed5568ed5253b7c867f19",
  "C:/Users/Administrator/Desktop/wwwroot/work/index.php": "cbfa332c3d8e41e375acb202adb57cf6",
  "C:/Users/Administrator/Desktop/wwwroot/work/list.php": "b870401f8195773a543bb79730b4b08a",
  "C:/Users/Administrator/Desktop/wwwroot/work/n.php": "c85c0f422604f0094ca0b5332f6b6773",
  "C:/Users/Administrator/Desktop/wwwroot/work/phpinfo.php": "d0c656451af101bdf4afc61ebef1a087",
  "C:/Users/Administrator/Desktop/wwwroot/work/qrpay.php": "8ac9631854dfb05933ffede5161375fa",
  "C:/Users/Administrator/Desktop/wwwroot/work/sid/login.class.php": "433a4083c55e555a7d302e2d537de1a8",
  "C:/Users/Administrator/Desktop/wwwroot/work/sid/login.php": "1a47a4686a4e7947ea4b80def3729dfe",
  "C:/Users/Administrator/Desktop/wwwroot/work/sid/qrcode.php": "8465f4da0758d3d9facb75ce4f8d110d",
  "C:/Users/Administrator/Desktop/wwwroot/work/sid/test.php": "48c7d3ef3991f3d800b326dab144fab3"
}

校验思路

我们可以通过__FILE__获取当前文件的md5值再与云端的进行比较,这里只提供一个思路,具体的还靠大家去实现。

代码语言:javascript
复制
if(md5_file(__FILE__) != $data[str_replace("\\",'/',__FILE__)]){
    exit("md5校验失败");
}

如无特殊说明《php校验文件md5防止二次修改源码》为博主MoLeft原创,转载请注明原文链接为:https://moleft.cn/post-51.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路来源
  • 定义函数
  • 使用函数
  • 校验思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档