Как не слить данные пользователей: практический чеклист безопасности
Следующий шаг
Открой бота или продолжай маршрут внутри раздела.
Статья -> план в ИИ
Отправь ссылку на эту статью в любой ИИ и получи план внедрения под свой проект.
Прочитай эту статью: https://vibecode.morecil.ru/ru/polzovateli-i-vkhod/kak-ne-slit-danniy-polzovatelei/
Работай в контексте моего текущего проекта.
Сделай план внедрения под мой стек:
1) что изменить
2) в каких файлах
3) риски и типичные ошибки
4) как проверить, что всё работает
Если есть варианты, дай "быстрый" и "production-ready". Как использовать
- Скопируй этот промпт и отправь в чат с ИИ.
- Прикрепи проект или открой папку репозитория в ИИ-инструменте.
- Попроси изменения по файлам, риски и короткий чеклист проверки.
Представь: ты сделал пет-проект — бот-магазин, дашборд для фрилансеров или простой SaaS. Всё работает, люди регистрируются, оставляют email, телефон, платят деньги. А потом в один прекрасный день ты получаешь письмо: «У нас утечка, ваши данные в открытом доступе».
Даже если ты используешь Supabase, NextAuth или Clerk — это не значит, что ты в безопасности автоматически. Нужно правильно настроить. Поехали.
Почему даже «простой пет-проект» может слить данные
Твои пользователи доверяют тебе:
- email и пароль
- телефон
- платёжные данные
- личные фото и документы
Если данные утекут — это не просто «ой, извините». Это жалобы, потеря доверия, а в худшем случае — штрафы (в России и Европе за это реально наказывают).
Самые частые причины утечек у вайбкодеров в 2026 году:
- Пароли хранятся в открытом виде
- API доступен всем подряд (без проверки «кто ты»)
- Секреты (ключи) лежат в коде на GitHub
- Нет защиты от «перебора паролей»
- SQL-инъекции или XSS
Хорошая новость: всё это решается 8–10 простыми правилами. И ИИ поможет тебе их внедрить за один вечер.
Правило №1. Никогда не храни пароли в открытом виде2
Что делать:
Используй хэширование. Это когда пароль превращается в «кашу», которую невозможно восстановить назад.
Лучшие варианты в 2026:
- Argon2id — самый сильный сейчас (рекомендация OWASP)
- bcrypt — чуть проще, но всё ещё отлично
- scrypt — тоже хороший
Пример в коде (Next.js + Supabase)
Supabase делает это автоматически при регистрации. Просто НЕ используй supabase.auth.signUp с raw-паролем в своей базе!
Пример в FastAPI + Prisma:
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 в репозитории
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):
// 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. Пользователь видит ТОЛЬКО свои данные.
Пример политики:
-- Пользователь видит только свои заказы
create policy "Users can view own orders"
on orders for select
using (auth.uid() = user_id);
ИИ отлично генерирует такие политики. Просто скажи ему: «Напиши RLS-политики, чтобы пользователь видел только свои данные».
Правило №6. Защита от переполнения (Rate Limiting)
Чтобы бот не перебирал пароли.
В Next.js:
import rateLimit from 'express-rate-limit'
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 минут
max: 5 // максимум 5 попыток входа
})
В FastAPI:
Используй slowapi или fastapi-limiter.
Правило №7. Валидация всех данных на входе
Никогда не верь тому, что пришло от пользователя.
В Next.js:
import { z } from 'zod'
const registerSchema = z.object({
email: z.string().email(),
password: z.string().min(8).max(100)
})
В FastAPI:
from pydantic import BaseModel, EmailStr
class UserCreate(BaseModel):
email: EmailStr
password: str
Правило №8. Не храни лишнее в JWT-токене
Плохой пример:
{
"userId": "123",
"email": "user@example.com",
"isAdmin": true,
"passwordHash": "..." // ← НЕЛЬЗЯ!
}
Хороший:
{
"sub": "123",
"role": "user"
}
Остальное запрашивай из базы по userId.
Правило №9. Защита от XSS и CSRF
- В Next.js всё автоматически защищено (если используешь Server Components)
- В HTML — используй escaping
- Для форм — CSRF-токены (NextAuth делает сам)
Правило №10. Регулярно обновляй зависимости
В 2026 году уязвимости находят каждую неделю.
Используй:
npm auditdependabotна GitHub- Renovate
Готовый промпт для ИИ, чтобы он сразу писал безопасный код
При написании любого кода всегда соблюдай:
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чистый - Тестовый аккаунт проверен
Что делать, если уже что-то слил
- Сразу поменяй все пароли (и у пользователей попроси)
- Отключи скомпрометированные ключи
- Добавь уведомление пользователям
- Включи 2FA везде, где можно
- Проанализируй, что именно утекло