上篇文章说的PHP文件保护系统,感觉挺高大上,其实真做起来没什么难度,本文大致上把需要用到的知识和函数说一下,附上部分代码.
为了简单起见,就做了一个简单的例子,仅仅只检测当前脚本目录下的文件.
一.数据库
表名: protection 字段: 文件名:file varchar(64), 最后修改时间: time int(64) , 初始sha1: sha1 text(32), 当前sha1: now_sha1 text(32),
二.关键代码
1.初始化
if ($handle = opendir('./')) { mysql_query('TRUNCATE TABLE protection'); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if(!mysql_query('insert into protection (file,time,sha1)value(\''.$file.'\',\''.time().'\',\''.sha1_file($file).'\')')) die(mysql_error()); } } }
2.再次检测文件
if ($handle = opendir('./')) { mysql_query('update protection set now_sha1=\'\''); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { mysql_query('update protection set now_sha1=\''.sha1_file($file).'\' where file =\''.$file.'\''); mysql_query('insert into protection (file,now_sha1) value (\''.$file.'\',\''.sha1_file($file).'\')'); } } }
3.文件状态判断条件
//首先读取数据库 $result = mysql_query('select * from protection'); //然后依次检测每条数据: while($row = mysql_fetch_array($result)){ //检测代码 } //以下是检测过程中对文件状态的判断条件,具体判断过程可根据自己需要来写. //新增文件: $row['sha1']==null && $row['now_sha1'] != null //删除文件: $row['sha1']!=null && $row['now_sha1'] == null //正常文件: $row['sha1']==$row['now_sha1'] && $row['sha1'] && $row['now_sha1'] //初始化时没有的文件,之前检测存在而现在检测不存在的文件(可能是上传的后门,利用好了后被攻击者删除了) !$row['sha1'] && !$row['now_sha1'] //其他情况就是被修改过的文件了.
由于我的保护系统对接了其他程序,里面有一些乱七八糟的接口,检测结果的输出方式也很混乱,不方便直接全部贴出来,而且直接贴出来这么凌乱的代码估计新手也看不大明白,要是有空,我把代码整理一下在上传好了,要是有什么疑问,可以留言.