Skip to content

Security: Aleksandr-Litvinenko/task2bitrix24

Security

docs/SECURITY.md

Безопасность

Секреты

Не коммитить:

  • реальный BITRIX_WEBHOOK;
  • логин/пароль OData УНФ (UNF_ODATA_USER / UNF_ODATA_PASSWORD);
  • config.local.php;
  • production-пароли Basic Auth;
  • выгруженные Excel-файлы с реальными задачами, компаниями и комментариями;
  • файлы расчёта зарплаты data/payroll-*.json — там оклады, ставки и суммы к выплате;
  • снимки дашборда, KPI, проверки задач и кеш доски data/*.json (содержат ФИО, часы и названия клиентов);
  • data/users.json — там хеши паролей пользователей.

Папку data/ нужно закрыть от прямой раздачи веб-сервером: при гостевом доступе она иначе оказалась бы доступна анонимно.

Расчёт зарплаты

Раздел «Расчёт ЗП» (оклады, ставки, суммы к выплате) доступен только роли «Администратор». Маскировки тут недостаточно: суммы не должны попадать ни гостю, ни «Внешнему», ни рядовому сотруднику. Пункт меню скрыт у всех остальных, а сами страницы отвечают 403 при прямом заходе.

Файлы расчёта лежат в data/ и подпадают под общий запрет раздачи этой папки веб-сервером.

Гостевой доступ

При APP_GUEST_ACCESS=1 (значение по умолчанию) сайт открывается без пароля: посетитель получает роль «Гость». Это осознанное решение — витрина продукта, — и оно означает, что содержимое страниц видно всему интернету. Что защищает данные:

  • все ФИО, названия компаний, проектов и задач гостю заменяются обезличенными подписями вида «Сотрудник #3» / «Компания #7» (maskValue()), часы и счётчики — как •••, изменения на дашборде — только стрелкой без величины;
  • гость не скачивает Excel, не создаёт документы в УНФ, не обновляет дашборд и не пишет рекорды в мини-игру — все обработчики отвечают 403;
  • гость не инициирует запросы в Битрикс: доска отдаётся из общего кеша с TTL, KPI и проверка задач — из сохранённых снимков. Иначе анонимный трафик выжег бы лимиты вебхука для своих.

Что стоит помнить:

  • нумерация подписей сквозная в пределах страницы: по ней видно, что две строки относятся к одному человеку или клиенту, хотя кто это — не восстановить. Между страницами нумерация своя;
  • порядок в рейтинге настоящий, и длина полосок пропорциональна часам — соотношение долей клиентов и сотрудников гостю видно, даже когда сами часы скрыты;
  • количество сотрудников, организаций и проектов гостю видно (замаскированы значения, а не число строк);
  • если такая витрина не нужна — APP_GUEST_ACCESS=0, и сайт снова закрыт Basic Auth целиком.

Где хранить webhook

Production:

BITRIX_WEBHOOK="https://<portal>.bitrix24.ru/rest/<user-id>/<webhook-code>/"

Локально:

// config.local.php
define('LOCAL_BITRIX_WEBHOOK', 'https://<portal>.bitrix24.ru/rest/<user-id>/<webhook-code>/');

Если webhook попал в публичный доступ

  1. Удалить или деактивировать входящий webhook в Bitrix24.
  2. Создать новый webhook с минимально нужными правами.
  3. Обновить переменную окружения или config.local.php.
  4. Проверить историю git и GitHub на наличие старого секрета.

Права Bitrix24

Webhook должен иметь доступ к:

  • задачам и результатам задач;
  • списанному времени задач;
  • пользователям;
  • CRM-компаниям;
  • рабочим группам / проектам (sonet_group.get) — для названий колонок на доске «Задачи». Без этого права доска работает, но проекты называются Проект #<id>.

Не выдавайте webhook права шире, чем нужно.

There aren't any published security advisories