# Безопасная SMS верификация ## Что было исправлено ### Проблемы безопасности (исправлены): 1. ✅ **Код генерируется на сервере** (раньше на клиенте в JavaScript) 2. ✅ **Код хранится в Redis** (раньше в переменной JavaScript) 3. ✅ **Проверка кода на сервере** (раньше только на клиенте) 4. ✅ **Креды вынесены в .env** (раньше хардкод в коде) 5. ✅ **Rate limiting** - ограничение на количество отправок SMS (5 в час) 6. ✅ **Защита от брутфорса** - блокировка после 10 неудачных попыток (15 минут) ## Новые файлы ### `env_loader.php` Утилита для загрузки переменных из `.env` файла. ### `sms-verify.php` Новый безопасный API для SMS верификации с тремя endpoints: - **`POST /sms-verify.php?action=send`** - Отправка SMS кода - Параметры: `phonenumber` - Возвращает: `{success: true, message: "..."}` - **`POST /sms-verify.php?action=verify`** - Проверка кода - Параметры: `phonenumber`, `code` - Возвращает: `{success: true, token: "..."}` - токен для последующей проверки - **`POST /sms-verify.php?action=check_verified`** - Проверка статуса верификации - Параметры: `phonenumber`, `token` - Возвращает: `{success: true, verified: true/false}` ## Изменения в существующих файлах ### `js/common.js` - Функция `send_sms()` теперь отправляет запрос на сервер - Проверка кода теперь выполняется на сервере через AJAX - Добавлен обработчик для повторной отправки SMS из модального окна ### `.env` Используются следующие переменные: - `SMS_API_URL` - URL API SigmaSMS - `SMS_LOGIN` - Логин для SigmaSMS - `SMS_PASSWORD` - Пароль для SigmaSMS - `SMS_TOKEN` - Токен (опционально, если есть) - `SMS_SENDER` - Имя отправителя - `REDIS_HOST` - Хост Redis - `REDIS_PORT` - Порт Redis - `REDIS_PASSWORD` - Пароль Redis ## Логирование Все операции логируются в файл: - `logs/sms_verify.log` ## Безопасность ### Rate Limiting - Максимум **5 отправок SMS** на номер в час - Максимум **10 попыток проверки кода** за 15 минут ### Хранение кодов - Коды хранятся в Redis с TTL **10 минут** - После успешной проверки код удаляется из Redis - Токен верификации действует **1 час** ### Защита от брутфорса - После 10 неудачных попыток номер блокируется на 15 минут - Счетчик попыток сбрасывается после успешной проверки ## Миграция со старого API Старый файл `sms-test.php` оставлен для обратной совместимости, но рекомендуется использовать новый `sms-verify.php`. ### Изменения в JavaScript: ```javascript // Старый код (небезопасный): var sended_code = Math.floor(Math.random()*(999999-100000+1)+100000); if($('.sms-checking input[type="text"]').val() == sended_code) { // проверка на клиенте } // Новый код (безопасный): $.ajax({ url: 'sms-verify.php?action=send', // отправка на сервер }); $.ajax({ url: 'sms-verify.php?action=verify', // проверка на сервере }); ``` ## Требования - PHP с расширением Redis - Доступ к Redis серверу - Настроенные креды в `.env` файле ## Тестирование 1. Проверьте подключение к Redis: ```bash php -r "require 'env_loader.php'; require 'sms-verify.php';" ``` 2. Проверьте отправку SMS: ```bash curl -X POST "http://your-domain/sms-verify.php?action=send" \ -d "phonenumber=79991234567" ``` 3. Проверьте проверку кода: ```bash curl -X POST "http://your-domain/sms-verify.php?action=verify" \ -d "phonenumber=79991234567&code=123456" ```