Check for altered files on webhost
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 );
?>
Leave a Reply
You must be logged in to post a comment.
