Herself's Webtools

Scripts, HowTos, Templates, Plugins, Widgets, Tips

Check for altered files on webhost

without comments

Every time I change webhosts I have to dust off files and slightly re-arrange the way I do security.

Instead of running the file check through a WP plugin I decided to run it from a command line and email myself the results.

The following PHP code will check for altered files in the previous 7 days ( $days = 7 ) and email you the files altered.

You should give this code a random file name and place it somewhere off the beaten path on your server. I set permissions to r–r–r–.

<?php

/*
Tripwire for webserver to tell when files altered or have 777 permissions
Author: Linda MacPhee-Cobb
Author URI: http://timestocome.com
Support URI: http://herselfswebtools.com
*/

// date
date_default_timezone_set('UTC');

// info we need
$date = time();                        // current date+time
$one_day = 86400;                    // number of seconds in one day
$days = 7;                            // user selected number of days back to check files
$dir_count = 0;                        // init loop

$directories_to_read[0] = getcwd() . "/";    // start at the beginning
$i = 0;                                // loop counter

// time diff
$go_back = $one_day * $days;
$diff = $date - $go_back;

//email
$to = 'you@gmail.com';
$subject = 'file check';
$headers = "From: webmaster@your_domain.com";

$message = "";

while ( $i <= $dir_count ){

// get file info
$current_directory = $directories_to_read[$i];
$read_path = opendir( $directories_to_read[$i] );

while ( $file_name = readdir( $read_path)){

if (( $file_name != '.' )&&( $file_name != '..' )){

if ( is_dir( $current_directory . "/"  . $file_name ) == "dir" ){

// need to grab files from each directory all the way down to leaves
$d_file_name = "$current_directory" . "$file_name";
$dir_count++;
$directories_to_read[$dir_count] = $d_file_name . "/";

}else{

$file_name = "$current_directory" . "$file_name";

// if time modified newer than x days print - else skip
if ( (filemtime( $file_name)) > $diff  ){
$message .= "\nFILE ALTERED $file_name";

$date_changed = filectime( $file_name );
$pretty_date = date( "F j, Y g:i a", $date_changed);
$message .=  " ::: $pretty_date " ;
}

}
}
}

closedir ( $read_path );
$i++;

}

$mail_sent = @mail( $to, $subject, $message, $headers );

?>

Written by Linda MacPhee-Cobb

September 13th, 2009 at 11:59 am

Posted in php,security,tools

Leave a Reply

You must be logged in to post a comment.