Анонимный постинг не работает при отключенном javascript (form_token)

Список разделов phpBBex 1.x (поддерживается) Поддержка 1.x

Описание: У вас проблемы с phpBBex 1.x и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Модератор: Поддержка

Сообщение #1 Cm_Fly » 28.08.2021, 12:29

Здравствуйте. Эта проблема, похоже, существует уже давно.

Если настройки форума разрешают постинг без регистрации, и незарегистрированный пользователь пытается сделать пост при отключенных javascript-ах, появляется "Ошибка отправки формы".

Мне удалось выяснить, что ошибка, по-видимому, связана с проверкой form_token. Если пользователь не зарегистрирован и JS отключен, то form_token и creation_time оба отправляются на сервер со значением "0", и запрос на сервере отбраковывается.

Вот соответствующий фрагмент кода из styles/prosilver/template/posting_layout.html:
Код: Выделить всё
<!-- IF S_USER_LOGGED_IN -->
   {S_FORM_TOKEN}
<!-- ELSE -->
   <input type="hidden" name="creation_time" value="0" />
   <input type="hidden" name="form_token" value="0" />
   <script type="text/javascript">
   jQuery(function($)
   {
      $('#postform').submit(function()
      {
         $('inp'+'ut[na'+'me=crea'+'tion_t'+'ime]').val('{RAW_CREATION_TIME}');
         $('in'+'pu'+'t[name'+'=for'+'m_to'+'ken]').val('{RAW_FORM_TOKEN}');
      });
   });
   </script>
<!-- ENDIF -->

Как видно, для незарегистрированных пользователей оба поля выставляются javascript-ом при отправке формы.

Цель данного трюка в том, чтобы анонимный бот не смог выцепить правильные значения, распарсив страницу, что, в общем, понятно. Не понятно другое: зачем боту понадобится это делать...

Если я правильно понимаю, form_token призван защищать пользователя от Cross-Site Request Forgery (CSRF) Attack. Но эта атака направлена именно на зарегистрированных пользователей ресурса (cookie пользователя используются для совершения действия от его имени). Если пользователь не залогинен, атака не имеет смысла. И если мы отдадим анонимному боту форму с заполненным токеном для анонимного пользователя, он не сможет использовать этот токен для атаки зарегистрированного пользователя (токен не совпадёт).

Таким образом, по-моему, трюк с выставлением полей javascript-ом не приносит пользы, но только мешает, ибо без JS форма не работает. Может быть, имеет смысл его убрать?

Если я что-то неправильно понял, будет здорово, если вы мне объясните. Заранее спасибо.

P.S.
Такая же проблема существует при регистрации нового пользователя. Без javascript это невозможно сделать.
Cm_Fly
Автор темы, Гость

Сообщение #2 VEG » 01.09.2021, 08:48

Это было сделано намеренно лет 10 назад для борьбы с спам-ботами. Отсеивает 95% ботов (а когда это было сделано, отсеивало все 100% несколько лет).

Это ожидаемо, что сайты не будут нормально работать без JavaScript. Настройку отключения JavaScript уже давно убрали из браузеров, то есть, пользователь случайно не может выключить JavaScript, для этого нужно специально заморачиваться. А если уж заморочился, то ССЗБ.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1670
С нами: 12 лет 7 месяцев


Вернуться в Поддержка 1.x