Исправление ошибок безопасности 26.03.01

В ходе аудита модуля astdesign.marketpro было выявлено 17 уязвимостей. Все они устранены на стороне сервера. Изменения в клиентскую часть сайта (фронтенд) не вносились.

Важно. Перед установкой исправлений обязательно сделайте резервную копию файлов модуля и базы данных. Это позволит восстановить работу сайта в случае непредвиденных проблем при обновлении.


Установка всех исправлений одним архивом

Все исправленные файлы собраны в один архив. Структура архива соответствует корню сайта — достаточно распаковать его в корневую директорию сайта с заменой файлов.

Архив:


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

Если требуется заменить файлы вручную — ниже описан каждый пункт с указанием конкретных файлов.


1. Доступ к чату заказа

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

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/orm/orderschats.php


2. Безопасный вывод сообщений в чате (администраторская панель)

Все данные сообщений чата теперь выводятся как обычный текст — специальные символы обезвреживаются перед показом в PHP-шаблоне и в JavaScript. Ссылки на прикреплённые файлы проходят дополнительную проверку.

Изменённые файлы:

  • bitrix/components/astdesign/order.chat/templates/.default/template.php

  • bitrix/modules/astdesign.marketpro/install/components/astdesign/order.chat/templates/.default/template.php (для новых установок)


3. Ограничение удаления файлов

При загрузке файл теперь привязывается к сессии пользователя. Удалить можно только файлы, загруженные самим пользователем в рамках текущей сессии. Исправление применено в трёх местах: файлы заказов, фотографии отзывов, фото в чате.

Для фотографий отзывов добавлен совместимый механизм: привязка выполняется и к API-токену, и к серверной PHP-сессии. Это исключает потерю привязки на проектах, где upload-запросы идут без явной передачи токена, и не требует изменений во фронтенде.

Изменённые файлы:

  • bitrix/modules/astdesign.marketpro/lib/api/files.php

  • bitrix/modules/astdesign.marketpro/lib/api/reviews.php

  • bitrix/modules/astdesign.marketpro/lib/orm/orderschats.php


4. Ограничение доступа к загруженным файлам

Перед отдачей файла сервер теперь проверяет, имеет ли текущий пользователь право на доступ к нему.

Изменённые файлы:

  • bitrix/modules/astdesign.marketpro/lib/api/files.php

  • slim/app/routes.php

  • bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/app/routes.php (для новых установок)


5. Удаление отладочного механизма авторизации

Из кода удалён отладочный механизм, который использовался на этапе разработки. Вместе с ним удалён тестовый токен, захардкоженный в коде. Авторизация теперь работает только через штатный механизм.

Изменённые файлы:

  • slim/src/Application/Middleware/TokenSearch.php

  • bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/src/Application/Middleware/TokenSearch.php (для новых установок)


6. Удаление отладочного маршрута оформления заказа

Удалён отладочный маршрут, связанный с механизмом из п. 5. Оформление заказа теперь доступно исключительно через POST-запрос.

Изменённые файлы:

  • slim/app/routes.php

  • bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/app/routes.php (для новых установок)


7. Валидация условий маркетинговых сегментов

Перед выполнением условий маркетинговых сегментов добавлена строгая проверка по списку допустимых конструкций. Условие, не соответствующее ожидаемому формату, отклоняется. Чтение данных из базы переведено в безопасный режим.

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/utils/marketing/segments.php


8. Защита от перебора кода подтверждения (SMS / email)

Удалены два вспомогательных механизма входа, использовавшихся на этапе разработки. Добавлено ограничение попыток ввода кода: после 5 неверных вводов подряд вход блокируется на 15 минут — по учётной записи и по связке телефон/email + IP-адрес. После успешного входа использованный код аннулируется.

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/api/user.php


9. Безопасный вход для службы поддержки

Взамен удалённых в п. 8 механизмов реализован контролируемый режим supportAuth: одноразовый код, действующий ограниченное время, привязанный к конкретному пользователю и автоматически аннулирующийся после первого использования. Активируется только вручную через настройки модуля.

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/api/user.php


10. Проверка SSL-сертификатов при обращении к внешним сервисам

Включена проверка SSL-сертификата для всех исходящих запросов к внешним API — SMS-сервисам, геокодированию и геолокации. Автоматические HTTP-редиректы при POST-запросах отключены.

Изменённые файлы:

  • bitrix/modules/astdesign.marketpro/lib/utils/curl.php

  • bitrix/modules/astdesign.marketpro/lib/utils/utils.php

  • bitrix/modules/astdesign.marketpro/lib/utils/location.php


11. Защита лог-файла от публичного доступа

Лог-файл отладочного режима перенесён за пределы веб-доступной директории сайта. Коды подтверждения и номера телефонов в лог больше не записываются.

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/api/user.php


12. Исправление обхода капчи

Удалён механизм, позволявший пропускать проверку капчи при определённом заголовке запроса. Капча теперь проверяется при любом источнике запроса, если она включена в настройках.

Изменённый файл:

  • bitrix/modules/astdesign.marketpro/lib/utils/gcaptcha.php


13. Защита административных обработчиков от подделки запросов

В административные обработчики добавлена стандартная проверка сессионного токена Bitrix, подтверждающая что запрос пришёл из административной панели. Также обновлён модульный options.php: в AJAX-запросы к этим обработчикам добавляется sessid, чтобы легитимные запросы из админки продолжали работать после включения проверки.

Изменённые файлы:

  • bitrix/modules/astdesign.marketpro/ajax/actions.php

  • bitrix/modules/astdesign.marketpro/ajax/images.php

  • bitrix/modules/astdesign.marketpro/options.php


14. Ограничение cookie-авторизации для изменяющих запросов

Для запросов, изменяющих данные (профиль, корзина, заказы), токен авторизации из cookie больше не принимается. Авторизация для таких запросов возможна только через заголовок.

Изменённые файлы:

  • slim/src/Application/Middleware/TokenSearch.php

  • bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/src/Application/Middleware/TokenSearch.php (для новых установок)


15. Безопасное чтение данных из базы и файлов

Во все места, где данные из базы данных и служебных файлов читались без ограничений на допустимые типы, добавлен безопасный режим чтения.

Изменённые файлы:

  • bitrix/modules/astdesign.marketpro/lib/utils/reviews.php

  • bitrix/modules/astdesign.marketpro/lib/utils/conditions/order.php

  • bitrix/modules/astdesign.marketpro/lib/utils/conditions/basket.php

  • bitrix/modules/astdesign.marketpro/lib/utils/conditions/users.php

  • bitrix/modules/astdesign.marketpro/lib/utils/bonuses.php

  • bitrix/modules/astdesign.marketpro/lib/utils/catalog.php

  • bitrix/modules/astdesign.marketpro/lib/orm/tokens.php

  • bitrix/modules/astdesign.marketpro/lib/orm/offers.php

  • bitrix/modules/astdesign.marketpro/lib/orm/gps.php

  • bitrix/modules/astdesign.marketpro/lib/orm/video.php

  • bitrix/modules/astdesign.marketpro/lib/handlers/admin.php

  • bitrix/modules/astdesign.marketpro/lib/handlers/properties/catalogconditions.php


Полный список изменённых файлов

Все файлы ниже нужно скопировать с заменой в соответствующие директории на сервере (пути указаны от корня сайта).

bitrix/components/astdesign/order.chat/class.php
bitrix/components/astdesign/order.chat/templates/.default/template.php
bitrix/components/astdesign/order.chat/templates/.default/result_modifier.php
bitrix/components/astdesign/order.chat/templates/.default/component_epilog.php
bitrix/modules/astdesign.marketpro/ajax/actions.php
bitrix/modules/astdesign.marketpro/ajax/images.php
bitrix/modules/astdesign.marketpro/options.php
bitrix/modules/astdesign.marketpro/install/components/astdesign/order.chat/templates/.default/template.php
bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/app/routes.php
bitrix/modules/astdesign.marketpro/install/wizards/astdesign/marketpro/site/public/ru/slim/src/Application/Middleware/TokenSearch.php
bitrix/modules/astdesign.marketpro/lib/api/files.php
bitrix/modules/astdesign.marketpro/lib/api/reviews.php
bitrix/modules/astdesign.marketpro/lib/api/user.php
bitrix/modules/astdesign.marketpro/lib/handlers/admin.php
bitrix/modules/astdesign.marketpro/lib/handlers/properties/catalogconditions.php
bitrix/modules/astdesign.marketpro/lib/orm/gps.php
bitrix/modules/astdesign.marketpro/lib/orm/offers.php
bitrix/modules/astdesign.marketpro/lib/orm/orderschats.php
bitrix/modules/astdesign.marketpro/lib/orm/tokens.php
bitrix/modules/astdesign.marketpro/lib/orm/video.php
bitrix/modules/astdesign.marketpro/lib/utils/bonuses.php
bitrix/modules/astdesign.marketpro/lib/utils/catalog.php
bitrix/modules/astdesign.marketpro/lib/utils/conditions/basket.php
bitrix/modules/astdesign.marketpro/lib/utils/conditions/order.php
bitrix/modules/astdesign.marketpro/lib/utils/conditions/users.php
bitrix/modules/astdesign.marketpro/lib/utils/curl.php
bitrix/modules/astdesign.marketpro/lib/utils/gcaptcha.php
bitrix/modules/astdesign.marketpro/lib/utils/location.php
bitrix/modules/astdesign.marketpro/lib/utils/marketing/segments.php
bitrix/modules/astdesign.marketpro/lib/utils/reviews.php
bitrix/modules/astdesign.marketpro/lib/utils/utils.php
slim/app/routes.php
slim/src/Application/Middleware/TokenSearch.php

Итого: 32 файла.

Архив со всеми файлами (распаковать в корень сайта с заменой):