Files
ALPHA-TRAIN2/services/tiktak/docker-compose.yml
T
bobiqqandClaude Opus 5 fac56abb1d tiktak: LFI/auth-bypass в /vtt/, утечка превью, креды
- handleVtt: id валидируется как положительное целое, ошибка GetVideo
  больше не игнорируется. Закрывает сразу два вектора: обход ACL через
  нулевой db.Video (Private=false => haveAccess пропускал анонима) и
  path traversal в path.Join(VttFolder, vid+".vtt").
- handleCreate: резкое превью приватного видео удаляется после блюра,
  иначе оно оставалось доступным в public/static через echo.Static.
- main.go: DSN приведён к паролю из compose (5935004 поменял только
  compose, из-за чего сервис не достучался бы до базы).
- db: пароли хешируются sha256 с pepper, сверка в Go constant-time,
  плейнтекст принимается как legacy => старые юзеры не теряют доступ.
- cookies: HttpOnly + Path=/ + SameSite=Lax.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 11:42:05 +03:00

27 lines
766 B
YAML

version: '3'
services:
tiktak:
build: .
# CI (.gitea/workflows/build-and-push.yml) pushes only images matching
# git.itqdev.xyz/4x10m/* -- without this line the build job fails.
image: git.itqdev.xyz/4x10m/tiktak:${IMAGE_TAG:-latest}
ports:
- "5000:4000"
restart: always
volumes:
- ./public:/app/public
depends_on:
- db
db:
image: mysql:8.0.17
restart: always
# NOTE: not published to the host on purpose -- keep it that way.
volumes:
- ./db_data:/var/lib/mysql
environment:
# Rotated. Keep in sync with the DSN in main.go.
# Only applied when ./db_data is created from scratch!
MYSQL_ROOT_PASSWORD: cRazy_P4ssw0rd_MeOw_Me0W_676767676767
MYSQL_DATABASE: tiktak