пятница, 2 февраля 2007 г.

Как обмануть news2.ru

Поздравляю, если вы залогинены на news2.ru и не пользуетесь Opera, то скорее всего, только что проголосовали за эту статью. Серьезно, пойдите и проверьте.

Посвящение в наездники на сессиях.
Технически обмануть news2.ru оказалось несложно: немного javascript'a, немного эксперимента. И мы на коне. Виной же всему - session riding. Потратьте немного своего времени и посмотрите исходный код этой страницы.

Ни для кого не секрет, что многие сайты используют для аутентификации cookies. Чаще всего, для того, чтобы сделать что-то с сайтом, эти самые кукиши воруют. Однако это совершенно другая тема. Сегодня мы поговорим о технике, при которой никаких cookies нам не надо - достаточно просто заманить посетителя на нужную страницу.
Представьте себе такую ситуацию. Ваш знакомый кидает вам ссылку в аську с комментарием в стиле "погляди, как мы круто вчера разгонялись". Адрес не вызывает никаких подозрений. Более того, зайдя по ссылке, вы действительно видите фотографии с вчерашней "корпоративной вечеринки", а в это время все деньги с вашего электронного кошелька, в котором вы авторизованы, уходят на счет знакомого. Просто? До неприличия.
Штука здесь в том, что ваш знакомый динамически создает в вашем браузере скрытый фрейм, в этом фрейме конструирует нужную форму, а потом форму эту отправляет. Да, сайт может проверять referer. Но ни IE, ни Firefox referer для динамически сконструированного фрейма не отправят, что для уязвимого сайта равноценно ситуации, когда пользователь просто подкрутил свои настройки анонимности. Opera, впрочем, этого недостатка лишена. Иногда все бывает еще проще: достаточно оставить где угодно картинку с нужным src, и атака проведена.
Итак, получается, что вы просто зашли на страницу, а тем временем за вас проголосовали, перевели ваши деньги или отправили сообщение на форуме. А самое неприятное в том, что вы, скорее всего, далеко не сразу поймете в чем дело.

Как защититься
Существует несколько способов защиты, включая и клиентские методы, но самым, на мой взгляд, простым и правильным способом защиты является генерация уникального токена для каждого запроса, который и будет проверяться при отправке формы, наряду с cookies.

Статья в английской Википедии

На новом месте

Переехал сюда с wordpress.com. Архив остался на прежнем месте.