Безопасность
Yoyo Market (далее — Yoyo) реализует множество уровней безопасности для защиты данных и средств пользователей.
Аутентификация
JWT-токены
- Access-токены: кратковременные (20 минут), для API-аутентификации
- Refresh-токены: долгоживущие (72 часа), для получения новых access-токенов
- Оба устанавливаются как HTTP-only cookies, предотвращая доступ JavaScript и кражу токенов через XSS
- Подписаны серверным секретным ключом
OAuth 2.0
Поддерживаемые провайдеры: Google, GitHub, VK, Yandex, Telegram. Стандартный authorization code grant с параметром state для CSRF-защиты.
Безопасность запросов
CORS
- Разрешенные источники настраиваются для каждой среды
- Cookies (credentials) включаются в кросс-доменные запросы
Лимиты запросов
- Максимальный размер тела запроса: 1 МБ
- Вал идация Content-Type для POST/PUT/PATCH
- Ограничение частоты по IP + эндпоинт (см. Ограничение частоты)
Заголовки безопасности
| Заголовок | Значение | Назначение |
|---|---|---|
X-Content-Type-Options | nosniff | Предотвращение подмены MIME-типов |
X-Frame-Options | DENY | Предотвращение clickjacking |
X-XSS-Protection | 1; mode=block | Включение XSS-фильтра |
Referrer-Policy | strict-origin-when-cross-origin | Контроль информации referer |
Безопасность данных
Пароли
- Хешируются bcrypt перед хранением
- Минимальная длина при регистрации
- Сброс пароля требует подтверждения email
Конфиденциальные данные
- Приватные ключи крипто-кошельков зашифрованы
- OAuth-токены не хранятся после обмена
- Email пользователя частично маскируется в реферальных отображениях
Сетевая безопасность
HTTPS
Все коммуникации API используют HTTPS. HTTP перенаправляется на HTTPS.
Cloudflare
- DDoS-защита
- SSL/TLS-терминация
- CDN для статических ресурсов (изображения в R2)
Лучшие практики для потребителей API
- Всегда используйте HTTPS
- Безопасно храните токены — используйте HTTP-only cookies вместо localStorage
- Реализуйте обновление токенов — обрабатывайте 401 обновлением access-токена
- Валидируйте ответы — проверяйте HTTP-коды и коды ошибок
- Используйте заголовки лимитов — уважайте
X-RateLimit-RemainingиRetry-After