網站目錄防篡改程序,perl web目錄md5文件驗證

       有時候站點有bug,很容易會被人修改,添加其餘亂七八糟的東西,針對這類問題,常見的作法:一、修改升級程序漏洞。二、用WAF主動防護(用第三方免費cdn,也提供這類防護)。git

       本文咱們介紹第三種方法(若是網站固定文件不變的狀況下)網站部署好後,經過對站點全部文件的計算MD5值,並保存在一個文件中。而後之後能夠手動或者crontab,監控程序等按期對保存文件中的文件生成md5值和已有的md5值對比,若是發現值對不上,則說明文件被篡改了。web

use strict;
use warnings;
use Digest::MD5 qw(md5_hex);
 
 
my $dir=shift;
# 此處默認爲檢查md5值。
md5check($dir);
# 若是須要開始生成web目錄的md5值,註釋掉上面一句,把下面一句啓用
#md5init($dir);
sub md5_sum {
 
 my ($file_name,$mode)=@_;
 my ($FD,$ctx, $md5);
   open ($FD,$file_name) or die "Can't open /'$file_name/': $!";
     $ctx = Digest::MD5->new;
       binmode($FD) if $mode;
     $ctx->addfile($FD) || die "$!\n";
    $md5 = $ctx->hexdigest;
   close $FD;
 return $md5;
}
 
sub md5check {
my $file=shift;
open(my $fd, '<',$file) or die "$file: $!\n";
print $file;
while (<$fd>){
        my ($name, $sum) = split /\s+/;
        if ($sum eq md5_sum($name,1)){
                print "$name OK\n";
        }
        else{
          print "$name FAILED\n";
        }
}
 
close $fd;
 
}
# 遍歷目錄計算md5值
sub md5init {
 
    my $fd=shift;
    my $md5value;
    if ( -f $fd ){
            if ( -T $fd ) {
                #print "按照文本模式進行計算MD5!\n";
                $md5value =md5_sum($fd,0);
                print "$fd\t$md5value\n";
            }elsif( -B $fd ){
                #print "二進制文件用binmod計算MD5!\n";
                $md5value =md5_sum($fd,1);
                print "$fd\t$md5value\n";
            }else{
                #print "其餘文件,按照bimmod計算!\n";
                $md5value = md5_sum($fd,1);
                print "$fd\t$md5value\n";
            }
     }
     elsif( -d $fd ){
        my $file_md5;
      # print "開始驗證目錄下全部文件:\n";
       opendir (my $DH,$fd) or die "Can't open dir $fd: $!";
         for(readdir $DH ){
         my $file=$fd.'/'.$_;
      # 上級目錄..,本目錄. 以及鏈接文件跳過
         next if ($file =~ m{/.$} || $file =~ m{/..$} || -l $file );
         md5chek($file);
        }
       closedir $DH;
    }
 
}

 

以上程序保存成文件,好比filemd5check.pl網站

 注意以上代碼,筆者已經寫成模塊MD5sum,能夠經過oschina的git庫:.net

http://git.oschina.net/ijz/MD5Checkcode

同時能夠經過perl cpan庫安裝文件進行安裝。cpanm MD5Checkcdn

1、生成web的md5驗證文件:crontab

註釋掉md5

#md5check($dir);部署

md5init($dir);it

而後執行  web目錄  > webmd5-20160920

web目錄換成本身實際的web目錄 webmd5-20160920 爲保存計算結果的文件,能夠自定義

2、檢查時候,用默認文件

perl filemd5check.pl  webmd5-20160920

相關文章
相關標籤/搜索