WordPress jest jednym z najpopularniejszych systemów CMS na świecie, a jego otwartość i elastyczność idą w parze z podatnością na ataki. Jednym z kluczowych elementów ochrony jest monitorowanie zmian w plikach – dzięki temu możesz szybko wykryć nieautoryzowane modyfikacje, infekcje malware czy podmienione skrypty.
W tym artykule dowiesz się, jak w prosty sposób monitorować pliki WordPressa bez dodatkowych wtyczek, a także poznasz kilka narzędzi, które automatyzują proces wykrywania zmian.
Dlaczego warto monitorować zmiany w plikach WordPress?
Nieautoryzowane zmiany w plikach mogą wskazywać na:
- infekcję złośliwym oprogramowaniem,
- włamanie lub modyfikację plików przez hakera,
- błędną aktualizację wtyczki lub motywu,
- niezamierzoną zmianę podczas edycji przez użytkownika.
Szybkie wykrycie takich zmian pozwala:
- zatrzymać infekcję zanim się rozprzestrzeni,
- przywrócić oryginalne pliki z kopii zapasowej,
- zidentyfikować źródło problemu (np. zainfekowaną wtyczkę).
Jak działa monitorowanie plików?
Monitorowanie polega na porównaniu sum kontrolnych (hashów) plików z wartościami zapisanymi wcześniej.
Jeśli plik został zmodyfikowany, jego hash się zmienia – to sygnał ostrzegawczy.
Najczęściej stosuje się funkcję md5_file() lub sha1_file() w PHP, które tworzą unikalny skrót na podstawie zawartości pliku.
Przykładowy skrypt PHP do monitorowania zmian
Poniżej prosty przykład, jak możesz samodzielnie zbudować skrypt do wykrywania modyfikacji w katalogu WordPressa:
<?php
$directory = ABSPATH; // główny katalog WordPress
$hash_file = WP_CONTENT_DIR . '/file_hashes.json'; // plik z zapisanymi hashami
function get_all_files($dir) {
$files = [];
foreach (scandir($dir) as $file) {
if ($file === '.' || $file === '..') continue;
$path = $dir . '/' . $file;
if (is_dir($path)) {
$files = array_merge($files, get_all_files($path));
} else {
if (preg_match('/\.(php|js|css|html)$/', $file)) {
$files[] = $path;
}
}
}
return $files;
}
// Tryb: generowanie hashy lub sprawdzanie zmian
$mode = isset($_GET['mode']) && $_GET['mode'] === 'check' ? 'check' : 'generate';
$all_files = get_all_files($directory);
if ($mode === 'generate') {
$hashes = [];
foreach ($all_files as $file) {
$hashes[$file] = md5_file($file);
}
file_put_contents($hash_file, json_encode($hashes, JSON_PRETTY_PRINT));
echo "Utworzono bazę hashów plików.";
} else {
if (!file_exists($hash_file)) {
exit('Brak pliku hashów. Uruchom skrypt w trybie generowania.');
}
$stored_hashes = json_decode(file_get_contents($hash_file), true);
$modified = [];
foreach ($all_files as $file) {
$current = md5_file($file);
if (!isset($stored_hashes[$file])) {
$modified[] = "Nowy plik: $file";
} elseif ($stored_hashes[$file] !== $current) {
$modified[] = "Zmodyfikowano: $file";
}
}
foreach (array_diff_key($stored_hashes, array_flip($all_files)) as $file => $hash) {
$modified[] = "Usunięto: $file";
}
if (empty($modified)) {
echo "Brak zmian w plikach.";
} else {
echo "<pre>" . implode("\n", $modified) . "</pre>";
}
}
Jak działa skrypt:
- W trybie
generate tworzy plik z hashami wszystkich plików .php, .js, .css, .html.
- W trybie
check porównuje obecne hashe z wcześniejszymi i wyświetla listę różnic.
✅ Można go uruchamiać automatycznie raz dziennie przez WP-Cron.
✅ Nadaje się do prostych instalacji i serwerów bez dostępu do zewnętrznych narzędzi.
Automatyczne sprawdzanie zmian w WP-Cron
Aby sprawdzanie działało automatycznie, możesz dodać zadanie do harmonogramu WordPressa:
if ( ! wp_next_scheduled( 'check_file_changes' ) ) {
wp_schedule_event( time(), 'daily', 'check_file_changes' );
}
add_action( 'check_file_changes', function() {
file_get_contents( site_url( '?mode=check' ) );
});
Dzięki temu WordPress raz dziennie wykona skrypt i – jeśli wykryje zmiany – możesz np. wysłać powiadomienie e-mail.
Zewnętrzne narzędzia i wtyczki
Jeśli wolisz gotowe rozwiązania, możesz skorzystać z narzędzi takich jak:
- Wordfence Security – wykrywa zmodyfikowane pliki i porównuje je z oryginałem z repozytorium.
- Sucuri Security – monitoruje zmiany w plikach i powiadamia mailowo.
- WP Activity Log – śledzi aktywność użytkowników i zmiany plików.
Dla administratorów serwerów polecane są też:
- Tripwire, AIDE, RKHunter – monitorują zmiany na poziomie systemu plików Linuxa.
Dobre praktyki bezpieczeństwa
- Regularnie twórz kopie zapasowe (plików i bazy danych).
- Aktualizuj WordPress, motywy i wtyczki.
- Nie edytuj plików motywu bez motywu potomnego.
- Używaj SFTP zamiast FTP.
- Ogranicz prawa zapisu tylko do katalogów, które tego wymagają.
Podsumowanie
Monitorowanie zmian w plikach WordPress to skuteczny sposób na wczesne wykrycie włamania lub błędnej modyfikacji.
Można to zrobić zarówno prostym skryptem opartym na hashach, jak i za pomocą specjalistycznych wtyczek bezpieczeństwa.
Najważniejsze jest, by proces ten był automatyczny i regularny – tylko wtedy skutecznie ochronisz stronę przed infekcjami.