17.06.2010 20:03: Ajax и ddos защита: друзья или враги?
Новые сайты всё чаще и чаще используют технологию ajax. Эта технология имеет плюсы и минусы. Из плюсов — возрастает скорость навигации по сайту, появляется возможность динамической загрузки части web страниц. Из общеизвестных минусов — невозможность индексации поисковыми роботами ajax-приложений и сложность в формировании URL-адесов для ajax-страниц.
При навигации по сайту ajax-запросы зачастую выглядят однотипно (особенно если все данные передаются ajax-скрипту методом POST). Для проверки «свой-чужой» (зараженный комптьтер-зомби или посетитель сайта) DDOS-механизмы зачастую используют маркеры (обычно устанавливаются cookie), которые сохраняются у посетителя web-сайта в случае, если он успешно прошел проверку «свой-чужой». При этом cookie у каждого посетителя должны быть разные, иначе защиту от DDOS очень просто обойти, установив у всех зомби нужную cookie. Сложность заключается в том, что если web-браузер посетителя долго открыт или, например, изменился IP адрес посетителя, то маркеры (cookie) уже недействительны и требуется пройти проверку заново. Но web-страница при использовании ajax часто загружается один раз, после чего на эту страницу подгружаются элементы через технологию ajax. Допустим, при запросе очередного элемента cookie стали недействительны. А для проверки «свой-чужой» требуется веб-браузеру клиента исполнить определенный проверочный скрипт. При загузке ajax-элемента для пердачи на исполнение скрипта или управляющей команды в http-заголовке нужно существенно менять механизм работы ajax-приложения. Повторюсь, что такая ситуация справедлива только в том случае, если web-страница не перезагружается целиком длительное время.
Самый простой выход из этой ситуации — добавить в javascript код, ответственный за подгрузку элементов страницы проверку на правильность кода страницы. Если же загрузился неверный код страницы, то нужно обновить всю web страницу.
Хотя такие блокировки DDOS защитой скорее исключение, чем правило, пренебрегать проверкой не стоит.
Как реализовать данную проверку?
1. Добавить маркер правильного ajax элемента. Например в начало php-скрипта, ответственного за ajax, добавляем следующий код:
ajax.php:
<?php
echo "<!-- ajax OK -->";
....
2. Реализовать проверку в javascript ajax коде добавлением строки:
ajax.js:
if (xhttp.responseText.substr(0,16)!="<!-- ajax OK -->") { window.location='/'; }
Где xhttp.responseText - переменная, содержащая загруженный код от web сервера.
window.location также можно устанавливать в зависимости от текущей web страницы.
|
|