Подписка

Проекты

Сборник идей для разработок в Delphi и использования их в Интернет. Участвуй в работе коллективного разума!

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


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

Друзья блога

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

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

Счётчики


Анализ веб сайтов

Рейтинг блогов




Система Orphus

  • 07Jan

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

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

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

    Хотите расслабиться и отдохнуть от работы - знакомства для сек - лучший вариант для тех кто свободен в выборе.
    -----------------------------

    Related posts:

    1. Война с гоблинами. Часть 1. Основы ведения боя.

    Автор Vlad в 9:36 pm

    Метки: , ,

2 Comments

WP_Cloudy
  • crystalbit пишет:

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

  • Vlad пишет:

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

Ваш ответ

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

Пожалуйста, заключайте исходный код в тэги [code][/code].