mirror of
https://github.com/Zproger/Aurum.git
synced 2026-10-12 18:46:40 +07:00
- TLS через подключаемый overlay docker-compose.tls.yml + Caddyfile: Caddy сам получает и продлевает сертификат Let's Encrypt, HSTS добавляется на уровне прокси — намеренно там, а не в nginx.conf, иначе установки без TLS заперли бы сами себя; - проверка заголовка Host против DNS rebinding: AURUM_ALLOWED_HOSTS, по умолчанию localhost и 127.0.0.1, чужой Host получает 421 с подсказкой, какую переменную поправить; - «запомнить меня на 7 дней» вернулось в безопасном виде: пароль шифруется AES-GCM ключом с extractable: false в IndexedDB, вместо прежнего base64 в localStorage, который разворачивался обратно в пароль одним atob. Требует secure context, поэтому по обычному HTTP к LAN-адресу чекбокс не показывается, а не притворяется рабочим; - аудит-лог необратимых операций (восстановление бэкапа, массовое создание транзакций, удаление счёта) в лог контейнера. Не в БД сознательно: таблица аудита исчезла бы ровно в том событии, которое должна объяснять; - README: раздел про TLS и таблица двух переменных, решающих, кто может достучаться до инстанса.
24 lines
1.0 KiB
Caddyfile
24 lines
1.0 KiB
Caddyfile
# Used only by the TLS overlay (docker-compose.tls.yml). The hostname comes
|
|
# from AURUM_DOMAIN in .env — Caddy requests a Let's Encrypt certificate for
|
|
# it on first start and renews it on its own from then on.
|
|
#
|
|
# For a local trial without a public domain, set AURUM_DOMAIN=localhost and
|
|
# uncomment "tls internal" below: Caddy then issues its own certificate from
|
|
# a local CA. The browser won't trust it until you install that CA, so this
|
|
# is for checking the plumbing, not for daily use.
|
|
{$AURUM_DOMAIN} {
|
|
# tls internal
|
|
|
|
encode zstd gzip
|
|
|
|
# Aurum's own nginx already sets CSP, nosniff, Referrer-Policy and the
|
|
# rest — they pass through untouched. HSTS is added here instead of
|
|
# there on purpose: it tells browsers to refuse plain HTTP to this host
|
|
# for a year, which is only safe to promise once TLS actually terminates
|
|
# in front of the app. Setting it in nginx.conf would apply it to
|
|
# plain-HTTP installs too, and lock them out of their own instance.
|
|
header Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
|
|
reverse_proxy web:80
|
|
}
|