vibecode.wiki
RU EN
~/wiki / polzovateli-i-vkhod / kak-ne-slit-danniy-polzovatelei

Как не слить данные пользователей: практический чеклист безопасности

◷ 7 мин чтения 19.02.2026

Следующий шаг

Открой бота или продолжай маршрут внутри раздела.

$ cd раздел/ $ open @mmorecil_bot

Статья -> план в ИИ

Отправь ссылку на эту статью в любой ИИ и получи план внедрения под свой проект.

Прочитай эту статью: https://vibecode.morecil.ru/ru/polzovateli-i-vkhod/kak-ne-slit-danniy-polzovatelei/ Работай в контексте моего текущего проекта. Сделай план внедрения под мой стек: 1) что изменить 2) в каких файлах 3) риски и типичные ошибки 4) как проверить, что всё работает Если есть варианты, дай "быстрый" и "production-ready".
Как использовать
  1. Скопируй этот промпт и отправь в чат с ИИ.
  2. Прикрепи проект или открой папку репозитория в ИИ-инструменте.
  3. Попроси изменения по файлам, риски и короткий чеклист проверки.

Представь: ты сделал пет-проект — бот-магазин, дашборд для фрилансеров или простой SaaS. Всё работает, люди регистрируются, оставляют email, телефон, платят деньги. А потом в один прекрасный день ты получаешь письмо: «У нас утечка, ваши данные в открытом доступе».

Даже если ты используешь Supabase, NextAuth или Clerk — это не значит, что ты в безопасности автоматически. Нужно правильно настроить. Поехали.

Почему даже «простой пет-проект» может слить данные

Твои пользователи доверяют тебе:

  • email и пароль
  • телефон
  • платёжные данные
  • личные фото и документы

Если данные утекут — это не просто «ой, извините». Это жалобы, потеря доверия, а в худшем случае — штрафы (в России и Европе за это реально наказывают).

Самые частые причины утечек у вайбкодеров в 2026 году:

  1. Пароли хранятся в открытом виде
  2. API доступен всем подряд (без проверки «кто ты»)
  3. Секреты (ключи) лежат в коде на GitHub
  4. Нет защиты от «перебора паролей»
  5. SQL-инъекции или XSS

Хорошая новость: всё это решается 8–10 простыми правилами. И ИИ поможет тебе их внедрить за один вечер.

Правило №1. Никогда не храни пароли в открытом виде2

Что делать:
Используй хэширование. Это когда пароль превращается в «кашу», которую невозможно восстановить назад.

Лучшие варианты в 2026:

  • Argon2id — самый сильный сейчас (рекомендация OWASP)
  • bcrypt — чуть проще, но всё ещё отлично
  • scrypt — тоже хороший

Пример в коде (Next.js + Supabase)
Supabase делает это автоматически при регистрации. Просто НЕ используй supabase.auth.signUp с raw-паролем в своей базе!

Пример в FastAPI + Prisma:

python
from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")

def hash_password(password: str) -> str:
    return pwd_context.hash(password)

# При регистрации:
hashed = hash_password(user_password)

Промпт для ИИ:
«Используй только Argon2id для хэширования паролей. Никогда не храни пароль в plaintext. Покажи пример регистрации пользователя.»

Правило №2. Всегда используй HTTPS (SSL)

В 2026 году без HTTPS твой сайт браузер помечает как «небезопасный».

Как сделать за 2 минуты:

  • На Vercel / Railway / Render — включается автоматически
  • На своём сервере — бесплатный сертификат от Let’s Encrypt
  • В Supabase — всё уже с HTTPS

Промпт для ИИ:
«Установи SSL сертификат на домен [название домена] от Let's Encrypt.»

Проверка: зайди на свой сайт и посмотри на замочек в адресной строке. Должен быть зелёный.

Правило №3. Правильно храни секреты (API-ключи, JWT-секреты)

Никогда не делай так:

env
# .env в репозитории
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Делай так:

  • .env добавь в .gitignore
  • На продакшене используй:
    • Vercel → Environment Variables
    • Railway → Variables
    • Docker secrets / GitHub Secrets

Промпт для ИИ:
«Никогда не коммить .env. Покажи, как правильно читать секреты из environment variables в Next.js и FastAPI.»

Новые модели очень хорошо справляются с безопасностью, но лучше это контролировать вручную

Правило №4. Защищай API от чужих (Authentication + Authorization)

Authentication — «кто ты?»
Authorization — «что тебе можно?»

Самые простые и безопасные варианты в 2026:

Вариант Когда использовать Сложность
Supabase Auth Пет-проекты, быстрый старт ★☆☆
NextAuth Next.js приложения ★★☆
Clerk Если нужны красивые формы входа ★☆☆
Свой JWT Полный контроль (но больше работы) ★★★

Пример защиты роута в Next.js (App Router):

ts
// middleware.ts
import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs'

export async function middleware(req) {
  const res = NextResponse.next()
  const supabase = createMiddlewareClient({ req, res })
  const { data: { user } } = await supabase.auth.getUser()
  
  if (!user && req.nextUrl.pathname.startsWith('/dashboard')) {
    return NextResponse.redirect(new URL('/login', req.url))
  }
  return res
}

Правило №5. Row Level Security (RLS) в Supabase — твоя суперсила

Это магия PostgreSQL. Пользователь видит ТОЛЬКО свои данные.

Пример политики:

sql
-- Пользователь видит только свои заказы
create policy "Users can view own orders"
on orders for select
using (auth.uid() = user_id);

ИИ отлично генерирует такие политики. Просто скажи ему: «Напиши RLS-политики, чтобы пользователь видел только свои данные».

Правило №6. Защита от переполнения (Rate Limiting)

Чтобы бот не перебирал пароли.

В Next.js:

ts
import rateLimit from 'express-rate-limit'

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 минут
  max: 5 // максимум 5 попыток входа
})

В FastAPI: Используй slowapi или fastapi-limiter.

Правило №7. Валидация всех данных на входе

Никогда не верь тому, что пришло от пользователя.

В Next.js:

ts
import { z } from 'zod'

const registerSchema = z.object({
  email: z.string().email(),
  password: z.string().min(8).max(100)
})

В FastAPI:

python
from pydantic import BaseModel, EmailStr

class UserCreate(BaseModel):
    email: EmailStr
    password: str

Правило №8. Не храни лишнее в JWT-токене

Плохой пример:

json
{
  "userId": "123",
  "email": "user@example.com",
  "isAdmin": true,
  "passwordHash": "..."   // ← НЕЛЬЗЯ!
}

Хороший:

json
{
  "sub": "123",
  "role": "user"
}

Остальное запрашивай из базы по userId.

Правило №9. Защита от XSS и CSRF

  • В Next.js всё автоматически защищено (если используешь Server Components)
  • В HTML — используй escaping
  • Для форм — CSRF-токены (NextAuth делает сам)

Правило №10. Регулярно обновляй зависимости

В 2026 году уязвимости находят каждую неделю.
Используй:

  • npm audit
  • dependabot на GitHub
  • Renovate

Готовый промпт для ИИ, чтобы он сразу писал безопасный код

text
При написании любого кода всегда соблюдай:
1. Argon2id для паролей
2. Никогда не логируй чувствительные данные
3. Rate limiting на все auth-эндпоинты
4. RLS в Supabase
5. Валидация через Zod/Pydantic
6. Секреты только через env

Задача: [опиши свою фичу]
Сначала перечисли все меры безопасности, которые применишь.
Потом напиши код.

Чек-лист перед деплоем (копируй и отмечай)

  • Пароли хэшируются (Argon2id)
  • HTTPS включён
  • .env в .gitignore
  • Rate limiting на логин/регистрацию
  • RLS-политики настроены
  • Все API-роуты защищены проверкой пользователя
  • Нет чувствительных данных в JWT
  • Валидация всех форм
  • npm audit чистый
  • Тестовый аккаунт проверен

Что делать, если уже что-то слил

  1. Сразу поменяй все пароли (и у пользователей попроси)
  2. Отключи скомпрометированные ключи
  3. Добавь уведомление пользователям
  4. Включи 2FA везде, где можно
  5. Проанализируй, что именно утекло

Что читать дальше