HDWebmobile Booking & Appointments
Продавайте бронируемые услуги и записи через WooCommerce с посекундной вместимостью слотов, которую невозможно перепродать.
Описание
HDWebmobile Booking & Appointments превращает любой простой товар WooCommerce в бронируемую услугу. Клиенты выбирают доступную дату и временной слот на странице товара; бронирование подтверждается в момент завершения их заказа, и они могут просмотреть или отменить его позже в разделе «Мой аккаунт».
Зачем существует этот плагин
У конкурирующего плагина бронирования (Amelia) была аутентифицированная уязвимость IDOR/mass-assignment (CVE-2026-2931, CVSS 8.8): его конечная точка «обновить мой профиль бронирования» принимала поле, предоставленное клиентом, связывающее запись бронирования с идентификатором пользователя WordPress, без проверки того, что оно по-прежнему указывает на собственную учётную запись запрашивающего — что позволяло клиенту с низкими привилегиями сбросить пароль любого пользователя WordPress, включая администратора. Этот плагин закрывает данный класс уязвимостей по своей конструкции:
- Владелец бронирования записывается ровно в одном месте — при завершении заказа, из идентификатора клиента самого заказа — и больше никогда. В этом плагине нет ни одного пути кода «обновления бронирования», который принимал бы идентификатор клиента, идентификатор пользователя или любое подобное поле из запроса.
- Этот плагин никогда не касается пароля WordPress. Здесь вообще нет пути кода, который вызывал бы
wp_set_password() или что-то подобное — пароль клиента полностью остаётся в ведении собственного экрана «Данные аккаунта» ядра WordPress.
- Клиент может видеть или отменять только свои собственные бронирования, ограниченные его вошедшей учётной записью непосредственно в самом запросе к базе данных — никогда по идентификатору, взятому из запроса.
- Вместимость слота обеспечивается атомарной, защищённой от гонок фиксацией (ограничением уникальности в базе данных), поэтому два клиента никогда не могут быть одновременно подтверждены в один и тот же слот сверх его настроенной вместимости. Отмена бронирования корректно освобождает его слот для повторного использования, при этом сама отменённая запись сохраняется для истории аудита.
Возможности
- Превратите любой простой товар в бронируемую услугу через его собственную вкладку «Данные товара > Бронирование»
- Настраиваемые доступные дни, временные слоты, время упреждения и количество дней вперёд для предложения
- Вместимость слота — слот перестаёт предлагаться, когда он заполнен
- Бронирование подтверждается автоматически, когда заказ помечается как «Выполнен»
- Вкладка «Бронирования» в разделе «Мой аккаунт» для просмотра и отмены предстоящих бронирований
- Если слот заполняется между добавлением в корзину и оформлением заказа, заказ всё равно завершается нормально, а администратору отправляется письмо с просьбой помочь перенести запись — бронирование никогда не дублируется
Ограничения (v1)
- Только простые товары — без поддержки товаров с вариациями
- Нет назначения сотрудников/ресурсов — вместимость слота является единым общим числом, а не для каждого сотрудника отдельно
- Нет синхронизации с календарём (Google Calendar, iCal и т. д.)
Установка
- Загрузите плагин в
/wp-content/plugins/hdwebmobile-booking-appointments или установите через экран плагинов WordPress.
- Активируйте плагин. WooCommerce должен быть уже установлен и активирован.
- Отредактируйте простой товар, откройте его новую вкладку «Бронирование» в разделе «Данные товара» и настройте доступность.
Лицензия
GPLv2 или более поздняя. См. LICENSE.