How to fix hacked wordpress site
Проблема е доста известен, и сигурно всеки собственик на wordpress сайт рано или късно го е срещал. Тъй като ми се налага да работя с доста уеб сайтове на платформата wordpress, ми се случва често да попадам на хакнати такива. Типичния пример беше вчера когато един такъв сайт изпращаше много спам и трябваше да открия и оправя проблема. Аз имам определен начин на работа и искам да го споделя ( предполагам че не е съвършен но пък е надежден), и заради това реших да напиша и тази тема : How to fix hacked wordpress site.
1. Логнах се на машината, отидох в директорията на уеб сайта и проверих кои файлове са променяни най-скоро. Направих го защото знам че сайта не се пипа доста често ( това е грешка – редовно трябва да се обновяват плугините и самия wordpress).
2. Започнах да отварям променените файлове един по един и да търся така нареченият злонамерен код в тях, който евентуално е причината за спама.
Проблема
Така и забелязах проблема. Така нареченият eval(base64_decode()) проблем, който съм засичал и на други php платформи като Invision power board и тн. Обикновенно хакерите поставят този код на първия ред на php файла, изцяло в дясно където трудно би се забелязал от потребителя.
Ето реално как изглеждаше ситуацията:
root@server [/home/user/public_html]# grep base64_decode * xmlrpc.php:;
Освен това открих същия проблем и още няколко файла и плугина.
С команда :
grep "eval(base64_decode" * -r
може да се проверят всички под директории за този код.
Пример:
root@server [/home/user/public_html]# grep "eval(base64_decode" * -r wp-content/themes/twentythirteen/author.php:;;; wp-content/themes/twentytwelve/css/menu.php:; wp-content/themes/hairpress/assets/js/help.php:; wp-content/themes/hairpress/front-template-page.php:;
Решението
1. Замянята на заразените файлове с оригиналните такива от изтеглен архив на wordpress е задължителен!!
2. Изключване на wp-cron – функция на wordpress която позволява да се стартират автоматично дадени приложения като обновяване и тн при всяко отваряне на сайта. Това става като се сложи следния ред в wp-config.php:
define('DISABLE_WP_CRON', 'true');
3. Смяната на права за писане в директорията на wordpress както и в под директориите и според мен е много хубаво да се направи. Изключение ще прави само wp-content/uploads папката, където обикновенно wordpress записва файловете качени от нас – снимки,видео и тн. Пример:
chown -R root.root /home/user/public_html/* chown -R user.user /home/user/public_html/wp-content/uploads/
Извод
Честото обновяването на wordpress и плугините му е меко казано задължително – предполага се че даден проблем ще бъде решен с нова версия на кода на плугина/шаблона. Ако имаме много wordpress сайта добър вариянт е infiniteWP.
Защитата на wp-login.php и /wp-admin/ директорията чрез htaccess също е много добър вариянт.