diff --git a/README.md b/README.md index d7a57c8..595b40d 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,28 @@ ADMIN_PASSWORD=<длинный пароль> адреса блокируется на `ADMIN_LOCKOUT_MINUTES` минут (по умолчанию 15). Сессия — подписанная cookie на 12 часов. +### Как защищён путь админки + +- путь задаётся только в `.env` и больше нигде не хранится: ни в HTML, ни в + JSON, ни в JS — неавторизованный пользователь его нигде не увидит; +- кнопка «Админка» на главной показывается только вошедшему (сервер проверяет + cookie и добавляет в страницу лишь флаг, без пути) и ведёт на служебный + `/api/admin/goto`, который отвечает редиректом (302) на секретный путь — + поэтому путь не попадает в разметку и его не вычитает краулер; +- без валидной сессии `/api/admin/*` отвечает `401`, на неизвестных путях сайт + отдаёт обычный 404 — перебором путь не находится; +- страница панели отдаётся с заголовками `X-Robots-Tag: noindex, nofollow, + noarchive`, `Referrer-Policy: no-referrer` (путь не утечёт во внешние ссылки + через Referer), `X-Frame-Options: DENY` и `Cache-Control: no-store`; +- в `robots.txt` пути нет (там только `Disallow: /api/`) — иначе мы бы сами его + опубликовали; внешние ссылки в панели открываются с `rel="noopener noreferrer"`; +- при желании путь можно убрать и из логов nginx: добавить в конфиг сайта + `location = { access_log off; }`. + +Остаётся только история браузера у самого админа — это неизбежно (браузер должен +знать, куда идти), поэтому панель лучше открывать с личного устройства, а путь +держать в менеджере паролей. + Настройки (ссылка, интервал, история входов) хранятся в `SETTINGS_FILE` (по умолчанию `data/settings.json` в корне проекта; в docker — в томе `schedule_data`). Если файл недоступен для записи, изменения живут в памяти до