Шаблоны .dockerignore отсчитываются от корня контекста. Поэтому data/ ловил только корневую папку, а backend/*.db — только файлы прямо в backend/. Dockerfile копирует backend/ целиком, и в каждый прод-образ уходили backend/data/dev/ — dev-БД и uploads — и egg-info.
Теперь .dockerignore исключает:
backend/data/;
любые *.db, *.db-wal, *.db-shm;
**/*.egg-info/;
.env в любой папке;
backups/ — там лежат локальные копии прод-БД, теперь они не уходят даже в контекст сборки.
В README убрана пометка о дыре.
Модель угрозы
Атакующий — любой, кто может сделать pull образа forbidden-stars из реестра Gitea.
Что он получал: слои с dev-БД (ники, bcrypt-хеши паролей, аудит с IP), dev-uploads (фото) и egg-info.
Что закрыто: образы, собранные из этой ветки, этих файлов не содержат.
Что не закрыто кодом: старые образы в реестре по-прежнему содержат dev-данные на момент своей сборки (см. ниже).
Что проверено
Собрал одноразовый образ FROM scratch + COPY backend/ /app/ (+ COPY frontend/) с выгрузкой файловой системы в папку. Базовый образ и реестр для этого не нужны.
Старый .dockerignore: в /app есть data/dev/forbidden_stars.db, -shm, -wal, data/dev/uploads, forbidden_stars_backend.egg-info — дыра подтверждена.
Новый .dockerignore:
нет ни data, ни *.db*, ни *.egg-info, ни dev_*.py, ни tests/, ни .env, ни node_modules;
прод-код на месте: app/, alembic/, alembic.ini, entrypoint.sh, requirements.txt;
во фронтенд-контексте есть src/, package*.json, vite.config.ts.
Полную сборку docker buildx bake (arm64) не запускал: изменение убирает из контекста только данные, файлы для сборки не трогает.
Коммиты
164db49 Безопасность: dev-БД и загрузки не попадают в Docker-образ
Отклонения от плана
Нет.
Что остаётся владельцу
Пересобрать и перепушить образы: scripts/build-push.ps1.
Убедиться, что реестр Gitea приватный, и удалить старые теги или манифесты forbidden-stars: в них dev-БД на момент сборки. Реестр я не трогал.
Если в dev-БД когда-либо была копия прод-данных — считать их скомпрометированными в пределах доступа к реестру и сменить затронутые пароли.
## Что сделано
Шаблоны `.dockerignore` отсчитываются от корня контекста. Поэтому `data/` ловил только корневую папку, а `backend/*.db` — только файлы прямо в `backend/`. `Dockerfile` копирует `backend/` целиком, и в каждый прод-образ уходили `backend/data/dev/` — dev-БД и uploads — и `egg-info`.
Теперь `.dockerignore` исключает:
- `backend/data/`;
- любые `*.db`, `*.db-wal`, `*.db-shm`;
- `**/*.egg-info/`;
- `.env` в любой папке;
- `backups/` — там лежат локальные копии прод-БД, теперь они не уходят даже в контекст сборки.
В README убрана пометка о дыре.
## Модель угрозы
- **Атакующий** — любой, кто может сделать `pull` образа `forbidden-stars` из реестра Gitea.
- **Что он получал:** слои с dev-БД (ники, bcrypt-хеши паролей, аудит с IP), dev-uploads (фото) и `egg-info`.
- **Что закрыто:** образы, собранные из этой ветки, этих файлов не содержат.
- **Что не закрыто кодом:** старые образы в реестре по-прежнему содержат dev-данные на момент своей сборки (см. ниже).
## Что проверено
Собрал одноразовый образ `FROM scratch` + `COPY backend/ /app/` (+ `COPY frontend/`) с выгрузкой файловой системы в папку. Базовый образ и реестр для этого не нужны.
- **Старый `.dockerignore`:** в `/app` есть `data/dev/forbidden_stars.db`, `-shm`, `-wal`, `data/dev/uploads`, `forbidden_stars_backend.egg-info` — дыра подтверждена.
- **Новый `.dockerignore`:**
- нет ни `data`, ни `*.db*`, ни `*.egg-info`, ни `dev_*.py`, ни `tests/`, ни `.env`, ни `node_modules`;
- прод-код на месте: `app/`, `alembic/`, `alembic.ini`, `entrypoint.sh`, `requirements.txt`;
- во фронтенд-контексте есть `src/`, `package*.json`, `vite.config.ts`.
Полную сборку `docker buildx bake` (arm64) не запускал: изменение убирает из контекста только данные, файлы для сборки не трогает.
## Коммиты
- `164db49` Безопасность: dev-БД и загрузки не попадают в Docker-образ
## Отклонения от плана
Нет.
## Что остаётся владельцу
- [ ] Пересобрать и перепушить образы: `scripts/build-push.ps1`.
- [ ] Убедиться, что реестр Gitea приватный, и удалить старые теги или манифесты `forbidden-stars`: в них dev-БД на момент сборки. Реестр я не трогал.
- [ ] Если в dev-БД когда-либо была копия прод-данных — считать их скомпрометированными в пределах доступа к реестру и сменить затронутые пароли.
Closes #71
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
Шаблоны .dockerignore отсчитываются от корня контекста: `data/` ловил только
корневую папку, `backend/*.db` — только файлы прямо в backend/. Dockerfile
копирует backend/ целиком, и в каждый прод-образ уходили backend/data/dev/
(dev-БД с хешами паролей и аудитом, uploads) и egg-info от pip install -e.
Теперь исключены backend/data/, любые *.db/-wal/-shm, *.egg-info, .env в любой
папке и backups/ (копии прод-БД не уходят и в контекст сборки). README больше
не говорит о дыре. #71
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что сделано
Шаблоны
.dockerignoreотсчитываются от корня контекста. Поэтомуdata/ловил только корневую папку, аbackend/*.db— только файлы прямо вbackend/.Dockerfileкопируетbackend/целиком, и в каждый прод-образ уходилиbackend/data/dev/— dev-БД и uploads — иegg-info.Теперь
.dockerignoreисключает:backend/data/;*.db,*.db-wal,*.db-shm;**/*.egg-info/;.envв любой папке;backups/— там лежат локальные копии прод-БД, теперь они не уходят даже в контекст сборки.В README убрана пометка о дыре.
Модель угрозы
pullобразаforbidden-starsиз реестра Gitea.egg-info.Что проверено
Собрал одноразовый образ
FROM scratch+COPY backend/ /app/(+COPY frontend/) с выгрузкой файловой системы в папку. Базовый образ и реестр для этого не нужны..dockerignore: в/appестьdata/dev/forbidden_stars.db,-shm,-wal,data/dev/uploads,forbidden_stars_backend.egg-info— дыра подтверждена..dockerignore:data, ни*.db*, ни*.egg-info, ниdev_*.py, ниtests/, ни.env, ниnode_modules;app/,alembic/,alembic.ini,entrypoint.sh,requirements.txt;src/,package*.json,vite.config.ts.Полную сборку
docker buildx bake(arm64) не запускал: изменение убирает из контекста только данные, файлы для сборки не трогает.Коммиты
164db49Безопасность: dev-БД и загрузки не попадают в Docker-образОтклонения от плана
Нет.
Что остаётся владельцу
scripts/build-push.ps1.forbidden-stars: в них dev-БД на момент сборки. Реестр я не трогал.Closes #71
🤖 Generated with Claude Code
https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd