уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Итак, в первой части были рассмотрены основные приёмы, которые используются недобросовестными веб-мастерами (они же гоблины) для раскрутки своих сайтов за счёт нас.

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

Для того, чтобы статья оказалась одинакого полезной и тем, кто решит писать свои программы для проверки скриптов и для тех, кто просто хочет обезопасить себя и свой сайт, я решил разделить пост на две части:

  1. Рассмотрим пример приложения для проверки архивов тем WordPress
  2. На основе первой части поста рассмотрим некоторые технические моменты проверки.

1. Приложение для проверки архивов с шаблонами WordPress

Как я уже говорил, проверка шаблона WordPress на «вшивость» зачастую происходит в момент, когда шаблон уже установлен либо находится в распакованном состоянии у Вас на хостинге. Но каждый раз распаковывать тему, грузить в блог, проверять и удалять «вшивые», согласитесь — может занять очень много времени, несмотря на то, что плагин TAC работает достаточно быстро.

Разработанное приложение под кодовым названием «Achtung!!!» способно проверить необходимый Вам шаблон в тот момент, когда шаблон находится ещё в zip-архиве у Вас на жестком диске, избавляя Вас тем самым от лишних закачек на хостинг, распаковок и т.д.

Рассмотрим работу программы на примере.

Запускаем приложение, выбираем файл архива темы WordPress и жмем кнопку «Проверить»:

После этого программа проверяет файлы архива по трем показателям:

  1. Кодировка файла — если кодировка файла UTF-8 BOM, то это означает, что кто-то мог изменять файл, следовательно — отмечаем этот файл как потенциально опасный
  2. Наличие прямых статических ссылок в файле — проверяются ссылки вида http://sait… Если такие ссылки найдены — помечаем файл как потенциально опасный
  3. Наличие закодированных участков — если обнаружен закодированный участок, то кто-то явно хочет либо защитить свои авторские права, либо «наколоть» доверчивого блоггера, зашифровав свою ссылку.

Теперь выбираем в списке любую ошибку и смотрим как она выглядит в файле:

Если ссылка легальная, например, ссылка на разработчика темы, то всё в порядке. Сразу скажу, что в программе есть список исключений (пока недоступный для редактирования) в котором содержаться адреса сайтов, которые никак не могут быть обозначены как ГС или нелегаьными. Вот ти ссылки:

  1. http://www.gravatar.com
  2. http://www.w3.org
  3. http://gmpg.org
  4. http://www.g-loaded.eu

Последняя ссылка относится к разраотчкику плагина RecentComments в теме моего блога.

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

Все файлы, которые содержаться в списке измененных необходимо как минимум правильно пересохранить. Т.е. установить кодировку UTF-8 без BOM, иначе вы рискуете получить сообщения об ошибках.

Представленная программа не является законченным продуктом, она дописывается, добавляются новые возможности, функции и т.д. Сейчас Вы можете её использовать для проверки своих архивов с темами WordPress, а также принять активное участие в её развитии — рассказать какие функции вы бы хотели увидеть в программе, какие ошибки (не дай бог) были замечены в программе и т.д. По возможности, все Ваши комментарии будут учтены при выпуске следующих версий программы.

Ссылка на скачивание программы находится в конце поста.

Теперь перейдем к техническим моментам реализации пдобных программ.

2. «Achtung!!!». Технические детали.

Признаться первый раз за всё время работы в Lazarus столкнулся с моментом, когда Lazarus оказался более удобным в использовании, чем Delphi. Обычно чаша весов склонялась в сторону уже знакомой RAD — то в Лазаре нет нормальной работы с регулярками, то нет привычных комонентов, и т.д. и т.п. А здесь как-то оказалось всё наоборот.

По сути, алгоритм проверки архива достаточно прост:

  1. Распаковываем архив во временный каталог или загоняем все файлы в поток
  2. Провряем файлы на наличие в них нежелательного кода
  3. Удаляем файлы, если они более нам не нужны
  4. Выводим результат.

При работе со списком найденных ошибок:

  1. Грузим содержимое файла в любой компонент (Memo, ListBox и т.д.)
  2. Подсвечиваем найденную ошибку

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

Оказалось, что в Lazarus и распаковка архивов и подсветка синтаксиса производятся намного проще и быстрее, чем в Delphi.

Работа с архивами в Lazarus организуется слдующим образом. Скачивается последняя версия модуля zipper с адреса http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/paszlib/src/ . В uses Вашего прилоения подключаются модули:

  • скачанный zipper
  • paszlib, входящий в состав Лазаря

Далее, распаковку архива можно осуществить, например так:

[...]
with TUnZipper.Create do
  begin
    FileName:=AFile;
    OutputPath:=FSaveDir;
    UnZipAllFiles;
  end;
[...]

где AFile — файл zip-архива; FSaveDir — путь к дирректории в которую будет распакован архив

Далее, если Вам необходимо получить имена файлов и папок из архива, то достоточно обратиться к свойству Entries объекта TUnZipper, например, перечислить все папки и файлы:

for i:=0 to Entries.Count-1 do
  begin
    ShowMessage(Entries[i].ArchiveFileName)
  end;

Примерно также просто проводится и упаковка файлов в архив.

Далее, что касается подсветки синтаксиса. Помниться, я уже рассматривал в блоге вопрос по подсветки синтаксиса. Можно было бы воспользоваться этим алгоритмом. Но зачем? В Lazarus присутствует целая вкладка компонентов для подсветки синтаксиса:

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

Рассмотрим, например, подсветку синтаксиса PHP.

Берем с вкладки SynEdit компоненты ТSynMemo и TSynPHPSyn. В свойстве ТSynMemo.HightLigter выбираем SynPHPSyn1…и всё. Подсветка синтаксиса по-умолчанию обеспечена. Теперь можете загружать в SynMemo текст из файлов, писать вручную и т.д. Ключевые слова выбранного языка быдут автоматически подсвечиваться.

Теперь, что касается кодировок файлов. Не знаю, есть ли в Delphi стандартные функци определения кодировок (вполне возможно с поддержкой юникода и появились), но в Lazarus кодировка любого текстового файла определяется элементарно.

Подключаем в uses модуль LConvEncoding. Грузим содержимое файла, например в TStringList вызываем функцию:

FileEncoding:=GuessEncoding(List.Text);

После этого в FileEncoding будет содержаться строка, определяющая кодировку файла. В модуле определены также следующие константы, облегчающие анализ кодировки:

const
EncodingUTF8 = 'utf8';
EncodingAnsi = 'ansi';
EncodingUTF8BOM = 'utf8bom'; // UTF-8 with byte order mark
EncodingUCS2LE = 'ucs2le'; // UCS 2 byte little endian
EncodingUCS2BE = 'ucs2be'; // UCS 2 byte big endian

Для нас при проверке шаблонов WordPress на «вшивость» достаточно определить кодировки EncodingUTF8 = ‘utf8’ и EncodingUTF8BOM = ‘utf8bom’.

Кстати, используя этот же модуль можно «на лету» менять кодировки — функций для этой операции более чем достаточно.

Вот пожалуй и все на сегодня. Жду Ваших предложений по развитию «Achtung!!!». Если есть желание посодействовать в разработке в плане кодинга, то, думаю, что в скором времени смогу предоставить исходники программы.

Скачать программу можно, перейдя по этой ссылке

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
3 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
crystalbit
07/01/2010 23:15

вот так и рождаются идеи для хороших программ :)
как вариант еще проверять на наличие чего-нибудь типа eval($_GET[‘cmd’]) или просто eval. Со временем можно развить в анализатор php-кода :)

denis
denis
14/01/2011 04:27

на странице http://www.webdelphi.ru/soft-webdelphi-ru/ скачал WPCHECKER. Но, к сожалению, работает она не корректно. Не проверяет архивы тем, а выдает ошибку. (