Über den Author / Sicherheit / WordPress Datei Integritätsprüfung

WordPress Datei Integritätsprüfung

~2 Min. Lesezeit

Wie kann man schnell prüfen, ob in der WordPress Installation sich Dateien befinden die nicht vorhanden sein sollten, oder Dateien verändert wurden die nicht sollten? Hier zu stelle ich ein kleines Script zur Verfügung.

Das Skript ladet die Checksumme der aktuell installierten WordPress Version runter und scannt alle Verzeichnisse durch und vergleicht die Dateien mit den Dateien die vorhanden sein sollten.
Damit kann man einfach die Dateien finden, die gegebenenfalls von einem Trojaner angelegt oder verändert wurden (mit Einschränkungen).

Folgende Aufgaben werden ausgeführt:

  • Alle vorhanden Core Dateien werden geprüft. Weichen diese ab, wird eine Meldung erzeugt
  • Auf PHP Dateien im wp-content/upload Verzeichnis wird geprüft

Was nicht gemacht wird:

  • Der Inhalt der gefundenen Dateien wird nicht nach Schädlichkeit / Unschädlichkeit geprüft!
  • wp-config.php wird nicht geprüft
  • Versteckte Dateien werden nicht geprüft (die mit Punkt beginnen)

Hier das Skript, was im Installationsverzeichnis des WordPress gespeichert werden muss:

<?php
/*
   Name: WordPress FileCheck
   URI: http://wuk.ch/
   Description: Prüfe WordPress Core Dateien und finde neue Dateien die nicht hingehören
   Version: 1.0.0
   Author: web updates kmu GmbH
   Author URI: http://wuk.ch/

   Copyright (c) 2018 web updates kmu <fragen@wuk.ch>
   All rights reserved.
*/

echo "<h3>Überprüfung WordPress:</h3>";
define('ABSPATH', $_SERVER['DOCUMENT_ROOT']);

if ( version_compare( PHP_VERSION, '5.6.29', '<' ) ) {
    exit( 'Du benutzt PHP Version: ' . PHP_VERSION . '.<br>Bitte eine höhere PHP Version einsetztn! Minimum Requirement 5.6.29!' );
}

function dirToArray($dir,$chksum) {
	$result = array();
	$cdir = scandir($dir);
	foreach ($cdir as $key => $value) {
		if (!in_array($value,array(".","..","wp-config.php"))) {
			if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
				dirToArray($dir . DIRECTORY_SEPARATOR . $value,$chksum);
			}
			elseif (str_replace("/","",$_SERVER['PHP_SELF']) == $value) {
				echo "<font color=\"green\">Diese Datei: ".$value."</font><br>";
				
			}
			elseif (strstr($dir,"wp-content")) {
				if (strstr($value,".php") AND strstr($dir,"wp-content/uploads")) {
					$f0 = $dir . DIRECTORY_SEPARATOR . $value;
					$file = str_replace($_SERVER['DOCUMENT_ROOT']."/","",$f0);
					echo "<font color=\"#fb660d\">PHP Datei in wp-content: ".$file."</font><br>";
				}
			}
			else {
				if (strstr($value,".php")) {
					$f0 = $dir . DIRECTORY_SEPARATOR . $value;
					$file = str_replace($_SERVER['DOCUMENT_ROOT']."/","",$f0);
					
					if (!isset($chksum[$file])) {
						echo "<font color=\"#fba40d\">Datei neu: ".$file."</font><br>";
					}
					elseif ( md5_file($f0) !== $chksum[$file] ) {
						echo "<font color=\"red\">Inhalt abweichend: ".$file."</a><br>";
					}
				}
			}
		}
	}

	return true;
} 

if ( defined( 'ABSPATH' ) ) {
    include('wp-includes/version.php' );
    $wp_locale = isset( $wp_local_package ) ? $wp_local_package : 'en_US';
    $apiurl = 'https://api.wordpress.org/core/checksums/1.0/?version=' . $wp_version . '&locale=' .  $wp_locale;
    $json = json_decode ( file_get_contents ( $apiurl ) );
    $checksums = (array)$json->checksums;

	$files = dirToArray(ABSPATH, $checksums);
	echo "PHP Datei keine Checksum: wp-config.php (Manuelle Prüfung nötig)";
	return true;
} 

echo "<br>Alles geprüft.";
?>

About Stefan

Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf. Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

WordPress Installer

~0 Min. LesezeitUm WordPress auf einem Hosting zu installieren, muss dieses imemr zuerst heruntergeladen und …

WordPress Multi mit verschiedenen Domains einrichten

~0 Min. LesezeitUm mehrere Domains separat innerhalb von WordPress zu verwalten, kann man eine MultiSite …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.