Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Свежие комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 7 января 2010 в 21:36.
Категории: Delphi в Web.


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

Сегодня будем учится выявлять файлы и участки кода в шаблонах 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!!!". Если есть желание посодействовать в разработке в плане кодинга, то, думаю, что в скором времени смогу предоставить исходники программы.

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

-----------------------------
Смотрели сериал Глухарь? На gluhartv.ru Вы сможете прочитать массу интересных материалов по этому замечательному сериалу, а также посмотреть понравившиеся серии прямо в он-лайн

Порадуйте себя и близких - купите полотенцесушитель у Московского производителя. Пусть ваши полотенца будут всегда сухими :)

Хотите расслабиться и отдохнуть от работы - знакомства для сек - лучший вариант для тех кто свободен в выборе.
-----------------------------
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (3)

WP_Cloudy
  • crystalbit пишет:

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

  • Vlad пишет:

    Ну проверка по куску текста типа http:// , base64 и т.д. — это без проблем. Сейчас пробую сделать как раз небольшой анализатор в связке php-css на предмет описаний атрибутов с display:none и т.д. и отслеживание вызовов «левых» функции

  • denis пишет:

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

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник