Выполнение нескольких операций с подтверждениями в phpBB 3

Название: Multiple confirmation windows
Версия: 1.0 [19.07.2008]
Описание: Эта модификация разрешает открывать несколько страниц с подтверждениями одновременно без потери их функциональности.
Протестировано: phpBB 3.0.2
Скачать: multiple_confirm_box.zip (21КБ)

Все пользователи, которые сменили вторую версию phpBB на третью, встретились с одной неприятной особенностью последнего: новый движок не позволяет вызывать несколько страниц подтверждения за один раз. Если вы, например, захотите удалить несколько сообщений в какой-то теме, и откроете для этого соответствующие ссылки «Удалить» в новых окнах, вы увидите то что и ожидаете — несколько страниц с запросами на подтверждение удаления. Однако, при подтверждении ваших действий на каждой из страниц, корректно выполнится только последнее вызванное действие, а остальные вызовут ошибку. Согласитесь, очень неприятное явление. Причем это распространяется не только на удаление сообщений, а вообще на подтверждение любых действий в форуме — легитимной остается всегда только последняя вызванная страница подтверждения.

В целях безопасности phpBB 3 для каждого действия с подтверждением требует обязательного вызова страницы подтверждения. То есть удалить сообщение, передав все неободимые скрипту параметры, не вызывая при этом страницу подтверждения, уже не получится. Весьма полезное свойство. Например, при обнаружении XSS уязвимости, становится в разы сложнее написать скрипт, который будет автоматически удалять все сообщения на форуме. Раньше было достаточно простой генерации множества POST запросов по шаблону. Сейчас же необходимо сперва запрашивать страницу подтверждения, извлекать из нее ключ подтверждения, и только потом — отправлять запрос на удаление.

Реализовано это все достаточно просто. Для каждого подтверждения генерируется уникальный ключ подтверждения confirm_key, который проверяется при выполнении самого действия. Если confirm_key отсутсвует или не совпадает — действие отклоняется. Вся проблема заключается в том, что сохраняется только одно значение confirm_key для каждого пользователя. То есть при открытии новой страницы подтверждения, старый ключ подтверждения просто заменяется новым.

Время от времени разные пользователи писали об этой проблеме в багтрекер phpBB 3, однако разработчики последнего считают, что это полезная фича. Где-то я уже это слышал :) Похоже, что у них паранойя. Удивительно, что они еще не проверяют соответсвие ключа и типа подтверждения. То есть можно получить confirm_key из страницы подтверждения удаления сообщения, но при этом использовать его для удаления пользователя в администраторском разделе. Ведь это — совершенно ненормальное поведение пользователя! Что не скажешь о вызове нескольких страниц подтверждения.

Займемся решением описанной проблемы. Логичным выглядит решение, когда для каждого пользователя сохраняется неограниченное количество значений confirm_key, каждое из которых хранится в БД не более 15 минут. То есть мы наделим ключи подтверждения еще одним полезным свойством — временем жизни. Если вы нажмете кнопку удаления сообщения, и только через сутки подтвердите свое решение — форум отреагирует на это как на ненормальное поведение пользователя.

Все страницы подтверждения действий генерируются функцией confirm_box(). Чтобы достичь желаемого результата достаточно изменить логику работы этой функции. Решение оформлено в виде мода в формате MODX. Все изменения снабжены комментариями.

  1. #1
    ololoh

    Не совсем верное утверждение о цели защиты. Это защита от CSRF.
    Смысл ее в том, чтобы не зная пароля пользователя нельзя было создать полноценный запрос POST : Допустим злоумышленник создал страничку с формой для смены вашего пароля и заманил вас туда. Вы нажимаете на обманную кнопку, и, даже если браузер хранит кукисы (и соответственно авторизацию на сайте), в обманной форме не содержится ключ.
    В форуме vbulletin ключ вообще постоянный и можно открывать сколько угодно страничек.
    А вот писатели phpbb по своей красноглазой традиции все извратили. Будем надеется что в будущем они подумают глубже.

  2. #2
    VEG Автор

    Большое спасибо за поправку.

  3. #3
    Immortal

    Хотел установить, но оказалось, что мод более не работает на последних версиях движка. Проверял на 3.0.11

  4. #4
    VEG Автор

    Данная модификация улучшена и встроена в phpBBex.

  5. #5
    Алексей

    Я поставил форум phpBB3 не могу поставить ЧПУ,некакие моды не встают,стили (темы) тоже не могу установить,мой форум http://azs-azk.ru/forum/ .Помогите,объясните как это можно сделать,как это всё установить?

Комментарии временно закрыты.