Безопасность: опубликованный dev не стартует с дефолтными секретами
При LOCAL_PUBLIC=vps dev доступен на forbidden-stars.ru, а fail-fast по SECRET_KEY/ADMIN_PASSWORD работал только в production: снаружи оставались общеизвестный ключ JWT (подделка любого токена, включая админский) и пароль админки. Теперь проверка срабатывает при is_published — у прода и у dev на домене; на нём же cookie_secure. Dev-инструменты и Swagger на опубликованном dev остаются (решение владельца): лаунчеры и лог старта перечисляют, что открыто любому посетителю. В .env.example — что открывает vps и что у dev и prod должны быть разные SECRET_KEY. #69 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
@@ -132,6 +132,16 @@ async def _lifespan(_app: FastAPI):
|
||||
|
||||
hub.bind_loop(asyncio.get_running_loop())
|
||||
|
||||
if settings.is_development and settings.is_published:
|
||||
# Решение владельца (#69): dev-инструменты остаются и на опубликованном dev —
|
||||
# но о том, что они открыты любому посетителю домена, нужно сказать громко.
|
||||
logging.getLogger("fs").warning(
|
||||
"DEV ОПУБЛИКОВАН НАРУЖУ (LOCAL_PUBLIC=%s): любому посетителю домена открыты "
|
||||
"вход по нику без пароля, список и создание игроков, жёсткое удаление аккаунтов "
|
||||
"и Swagger. Не держите в dev-базе копию прод-данных.",
|
||||
settings.local_public,
|
||||
)
|
||||
|
||||
# В DEV приложение само подтягивает справочники и админа из .env при старте
|
||||
# (в prod это делает entrypoint.sh; в pytest отключено FS_STARTUP_BOOTSTRAP=0).
|
||||
if settings.is_development and os.getenv("FS_STARTUP_BOOTSTRAP", "1") != "0":
|
||||
|
||||
Reference in New Issue
Block a user