XSS-уязвимость в WordPress

12 Ноября, 2005

О том, как можно осуществить XSS-нападение через функцию header() в PHP я прочитал тут. Кстати, автор статьи сообщил, что об этой уязвимости уже писали 3 года назад на securitylab.ru.

Я решил выяснить, подвержен ли WordPress такого рода нападению. В коде нашлось вот такие интересные места:

$location = (empty($_POST['redirect_to'])) ? $_SERVER["HTTP_REFERER"] : $_POST['redirect_to'];

wp_redirect($location);
это 60-62 строчки в файле wp-comments-post.php и соответственно реализация этой функции в файле wp-includes/pluggable-functions.php function wp_redirect($location) {
    global $is_IIS;

    if ($is_IIS)
        header("Refresh: 0;url=$location");
    else
        header("Location: $location");
}
В итоге получается, что вся логика работы такого редиректа сводится к строчке вида: header("Location: ".$_POST['redirect_to']);

Как видно, задача отличается от рассмотренной в выше указанной статье тем, что переменная берется из массива $_POST, а тут уже просто так символы "кавычка" и "обратный слеш" не передать, потому что предусмотрен механизм их экранирования.

Пришлось немного повозится, чтобы обойти эту преграду.

Читать далее

Первые шаги в освоении AJAX

20 Октября, 2005

На волне появления множества интересных web-сервисов меня как web-программитса не могла не заинтересовать такая интересная штука как AJAX.

AJAX - это подход к построению пользовательских интерфейсов web-приложений, при котором для получения каких-либо данных не нужна перезагрузка всей страницы. Все осуществляется за счет асинхронных запросов с помощью JavaScript и XML как носителя данных, полученных в ответ от сервера (да и то в общем случае). AJAX - это не самостоятельная технология, это идея.

Так как познания мои в области программирования на JavaScript очень уж поверхностны (все-таки по жизни более приходится иметь дело с серверным программированием), то решил воспользоваться готовым решением от Дмитрия Котерова – классом Subsys_JsHttpRequest, за что ему отдельное спасибо.

И вот, собственно, что у меня вышло: при наведении мыши на ссылку блога находящегося у меня в блогролле, начинается подгрузка последнего сообщения из его rss-канала.

Загрузка поста из удаленного rss-канала посредством AJAX

Технически реализовать это оказалось достаточно просто, благо Дмитрий Котеров позаботился о том, чтобы не возникло сложностей с прикруткой его класса, а обработка xml-файла, коим является rss-feed, задача еще более тривиальная, правда имеет свои тонкости в зависимости от версии php-интерпретатора.

P.S. В IE это не работает, так как лень было посредством JavaScript, учить осла понимать псевдо-селектор :hover для элемента списка li. Будет время и желание - сделаю и для него. Правда, стоит ли?

Графики и диаграммы средствами PHP + GD

12 Октября, 2005

Часто перед web-разработчиком стоит задача генерирования графиков и диаграмм на основе некоторых данных. Если диаграммы еще можно построить средствами HTML + CSS, то графики так вывести уже не удастся. Более предпочтительный вариант – генерирование рисунков с помощью PHP + GD. Но и этот вариант достаточно трудоемок.

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

Моим требований полностью соответствовал лишь ASE ChartDirector, но, к сожалению, этот продукт распространяется на платных условиях, поэтому сферы его применения весьма ограничены ;)

Но буквально пару дней назад я нашел достойную бесплатную альтернативу продукту от компании ASE. Имя ей – JpGraph. Библиотека полностью объектно-ориентированная, содержит в себе 101 класс и 948 методов, которые позволяют создавать практически любые диаграммы и графики. Вместе с библиотекой поставляется подробнейший мануал, описание всех классов и методов, а также пара сотен примеров.

Для примера я попытался создать простую диаграмму и по возможности придать ей как можно более приятный глазу вид.

Диаграмма, построенная с помощью JpGraph

Ниже преведен код, который генерирует эту прелесть :]

Читать далее