← Усі оновлення

Посилили auth-flow і базову безпеку після зовнішнього Tier 2 аудиту

Після зовнішнього security-аудиту закрили те, що можна виправити в коді без додаткових сервісів і платних підписок. Фокус оновлення — зменшити ризики навколо авторизації, відкритої реєстрації, редіректів, cron endpoint і базових production-заголовків.

Коротко

Додали PKCE для Supabase Auth, серверний login/register з rate-limit, безпечні редіректи, security headers, security.txt і опційний whitelist email-ів.

Що додали

  • + PKCE flow для браузерного Supabase Auth client.
  • + Окремий /auth/callback для підтвердження email і зміни пароля через exchangeCodeForSession.
  • + Санітизацію next-redirect після логіну, реєстрації та auth callback, щоб не було open redirect.
  • + Серверні API routes для логіну й реєстрації замість прямого signIn/signUp з клієнта.
  • + Rate-limit для спроб логіну й реєстрації по IP та email на базі наявної таблиці audit_rate_limits.
  • + Опційний BASE_ALLOWED_EMAILS whitelist для обмеження доступу до кабінету конкретними email або доменами.
  • + Security headers для всіх сторінок: HSTS, CSP, X-Frame-Options, nosniff, Referrer-Policy і Permissions-Policy.
  • + Файл /.well-known/security.txt з контактом для повідомлення про проблеми безпеки.
  • + Timing-safe перевірку CRON_SECRET у protected maintenance endpoint.
  • + Production removeConsole для console.log без видалення console.error і console.warn.
  • + SQL-міграцію для відкликання зайвих anon/public table і function grants у Supabase.

Що прибрали

  • - Прямий клієнтський signInWithPassword/signUp як основний шлях авторизації.
  • - Небезпечний редірект на довільний next URL після auth callback.
  • - Просте строкове порівняння CRON_SECRET.

Коментар до релізу

Supabase Site URL, redirect URLs, email templates, CAPTCHA і запуск database-grants migration налаштовуються в Supabase Dashboard та SQL Editor, тому потребують окремого ручного кроку.

Whitelist email-ів вимкнений, доки не задано BASE_ALLOWED_EMAILS у production env, щоб випадково не закрити публічну реєстрацію.

Інші оновлення

Подивитися приклад звіту