Не коммитить:
- реальный
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 целиком.
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 в Bitrix24.
- Создать новый webhook с минимально нужными правами.
- Обновить переменную окружения или
config.local.php. - Проверить историю git и GitHub на наличие старого секрета.
Webhook должен иметь доступ к:
- задачам и результатам задач;
- списанному времени задач;
- пользователям;
- CRM-компаниям;
- рабочим группам / проектам (
sonet_group.get) — для названий колонок на доске «Задачи». Без этого права доска работает, но проекты называютсяПроект #<id>.
Не выдавайте webhook права шире, чем нужно.