防篡改php文件校验程序

<?php
/**
 * 校验线上源文件是否和本地的一致
 * User: Administrator
 * Date: 2015/11/26
 * Time: 9:30
 */
include_once ‘functions.php‘;

class SrcVerifier
{
    var $md5_files = array();
    var $total = 0;

    public function scan($dir, $prefix_len, $excepts=array())
    {
        if ( $handle = opendir($dir) ) {
            while ( ($file = readdir($handle)) !== false ) {
                if ( $file != ".." && $file != "." && $file != ".svn" && $file!=".buildpath" && $file!=".htaccess" && $file!=".idea" && $file!=".project" && $file!=".settings") {
                    $real_location = $dir . "/" . $file;
                    $relative_location = substr($real_location, $prefix_len);
                    if ( is_dir($real_location) ) {
                        echo "[dir] - $relative_location [end]\n";
                        //$files[$file] = scandir($file_location);
                        if(!in_array($relative_location, $excepts)) {
                            $this->scan($real_location, $prefix_len, $excepts);
                        }
                    }else {
                        $this->md5_files[$relative_location] = md5_file($real_location);
                        echo "[file] - $relative_location , ".$this->md5_files[$relative_location]." \n";
                        $this->total++;
                    }
                }
            }
            closedir($handle);
        }
    }

    public function list_file($dir, $except_dirs = array())
    {
        $list = scandir($dir); // 得到该文件下的所有文件和文件夹
        foreach ($list as $file) {//遍历
            $file_location = $dir . "/" . $file;//生成路径
            if (is_dir($file_location) && $file != "." && $file != ".." && $file != ".svn") { //判断是不是文件夹
                echo "[dir] - $file_location \n";
                $this->list_file($file_location); //继续遍历
            } elseif (is_file($file_location)) {
                echo "[file] - $file_location \n";
                $this->total++;
            }

        }
    }

    public function total_files(){
        return $this->total;
    }
}

$root_path = ‘d:/projects/php/test‘;
$start_time = microtime_float();

//step_1,扫描校验本地源文件,生成文件路径与其md5值之间的映射文件
$verifier = new SrcVerifier();
$verifier->scan($root_path, strlen($root_path), array(‘/data/files‘,‘/temp‘));

file_put_contents(‘md5_files.php‘, ‘<?php return ‘.var_export($verifier->md5_files,true));//校验结果写入本地文件

//统计数据
$scan_local_time = microtime_float() - $start_time;
echo "scan files: ".$verifier->total_files()."\n";
echo "total cost: {$scan_local_time} secs.\n";

//step_2,遍历刚取下的源文件,并和本地的线上源文件进行md5校验,如果存在不一致的,则写入日志

//step_3,输出校验结果

  

时间: 2024-10-02 14:12:05

防篡改php文件校验程序的相关文章

WebApi系列~安全校验中的防篡改和防复用

回到目录 web api越来越火,因为它的跨平台,因为它的简单,因为它支持xml,json等流行的数据协议,我们在开发基于面向服务的API时,有个问题一直在困扰着我们,那就是数据的安全,请求的安全,一般所说的安全也无非就是请求的防篡改和请求的防复用,例如,你向API发一个查询用户账户的请求,在这个过程中,你可能要传递用户ID,用户所在项目ID等,而现在拦截工具如此盛行,很容易就可以把它的请求拦截,然后篡改,再转发,这样你的API就是不安全的,而对于订单,账户模块这种糟糕的API设计更是致命的,可

CRC校验程序3:通过窗体程序打开txt文件获取数据源,进行逐字节CRC校验

在上一篇中,生成输出的CRC.exe将要成为这个窗体应用的内置模块. 新建一个windows窗体应用程序,叫做CRClick.将应用程序CRC.exe从Console应用程序中找到,复制到CRClick文件夹的Debuge文件夹下.同时还有测试用的Test.txt. 打开窗体设计页面,插入两个Textbox和一个按钮,长度Textbox用来显示被校验的文件的绝对路径,短Textbox显示最终校验码.按钮激发选择文件的窗口.设计如下: 对于按钮的触发事件,我们生成一个OpenFileDialog控

Rsync+inotify实现文件防篡改

Rsync+inotify实现文件防篡改 设计思路 A服务器作为防篡改源服务器,也就是正常的文件服务器 B服务器作为对外开放,也就是WEB目录服务器 同时将A服务器作为网站后台更新内容的服务器 在B服务器上配置好rsync + inotify 触发式实时同步 图例如下: 配置服务器A防篡改系统 安装rsync yum install rsync 配置rsync文件rsyncd.conf 服务器A(防篡改系统rsync配置) vi /etc/rsyncd.conf [test] uid = roo

使用数字签名实现数据库记录防篡改(Java实现)

本文大纲 一.提出问题 二.数字签名 三.实现步骤 四.参考代码 五.后记 六.参考资料 一.提出问题 最近在做一个项目,需要对一个现成的产品的数据库进行操作,增加额外的功能.为此,需要对该产品对数据库有什么操作进行研究(至于怎么监控一个产品的操作会引发什么数据库操作,以后会详细解说).本来已经对数据库的操作了如指掌的,无意中发现数据库表里的每条记录都会有这样一个字段: 这感觉不妙了,字段名叫signature,顾名思义,就是签名的意思呀.难道数据库表中的每条记录都会有签名?也就是说如果我不能正

Android安全-代码安全3-Dex文件校验

重编译apk其实就是重编译了classes.dex文件,重编译后,生成的classes.dex文件的hash值就改变了,因此我们可以通过检测安装后classes.dex文件的hash值来判断apk是否被重打包过. (1)读取应用安装目录下/data/app/xxx.apk中的classes.dex文件并计算其哈希值,将该值与软件发布时的classes.dex哈希值做比较来判断客户端是否被篡改. (2)读取应用安装目录下/data/app/xxx.apk中的META-INF目录下的MANIFEST

如何实现网页防篡改

最近想和朋友搞一个防篡改的东西,我自己罗列了一些,咨询下各位篡改网页的途径和相应的方法,小弟不才,不胜赐教. 一.网页篡改的途径(1)SQL注入后获取Webshell:黑客通过web应用程序的漏洞,通过SQL语句提交非法的语句到数据,通过系统以及第三方软件的漏洞获取web的控制权限或者服务器权限:(2)XSS漏洞引入恶意HTML界面:被动的跨站攻击可以在合法的地方引入非法的HTML或者JS代码,从而让访问者“正常”的改变页面内容:例如:校内网蠕虫:(3)控制了Web服务器:攻击者可能通过服务器或

网页防篡改系统的使用体验

年初上线一款市场占有率很高的网页防篡改系统,一个目的是真正了解一下防篡改系统的结构,二.当然提高网站的防篡改防护能力.三.合规.下面来简单说一下整体感受; (1)防篡改系统的结构 如图,防篡改系统分为两部分,分别部署于两台服务器. 一台作为信息上传发布的服务器,主要是由网站管理员更新网站页面文件,后台数据等. 另外一台作为对外的web服务器. web服务器和发布服务器的网站配置完全一样,包括web server配置,网站目录路径等,两台服务器如同一个镜像. web服务器,对互联网公开发布,互联网

政府网站防篡改解决方案

政府网站防篡改解决方案        互联网的出现,被誉为 20 世纪最伟大的发明,它彻底改变了人们传统的生活方式,对现代社会产生了巨大影响.政府网站已成为政府电子政务的数字门户,是对外宣传国家政策法规的手段,是与社会大众交互.向社会大众提供服务和展现国家民主政治的重要窗口.随着网站数量不断增加,与之相对应的是网站受攻击的情况也越来越多.网站被攻击的各类情况中,网站页面被篡改事件给政府带来的影响尤其恶劣,影响面最广.尤其是含有政治攻击色彩的篡改,会对政府形象造成严重损害. 2006 年 3 月

沙箱安全模型、类加载、class文件校验

本文主要用于自己学习的记录,参考了网上的一些博客,不再一一列出,谢谢前辈们的无私奉献 相比较C++而言,Java具有良好的安全性,使用Java进行开发,可以更好地减少出错的几率,为了使Java程序更健壮,JAVA提供了以下基本组件,组成了安全水箱模型,来为用户提供更好的安全性,也减少开发人员犯错的机率: 1.类装载器结构 2.class文件检验器 3.内置Java虚拟机的安全特性 4.安全管理器及JAVA API 下图显示了各部分包含的内容: 上图中深色的框框内(包含框框),组成了JAVA在运行