Zonor
@Zonor
Начинающий веб программист

Простая защита от слива баланса СМС шлюза?

Подскажите кто-нибудь, делаю регистрацию через СМС, и встал вопрос, после нажатия "регистрация" пользователя перекидывается на страницу с формой куда вводится код подтверждения. И надо сделать кнопку "запросить код повторно" и ломаю голову, в гугле искал, но может неправильно спрашивал) Вобщем если делать кнопку неактивной через js таймер, то мысль возникает, что злоумышленник может сбросить таймер, ведь js исполняется на клиенте. Как правильно это лучше сделать чтобы защитить баланс?
  • Вопрос задан
  • 877 просмотров
Пригласить эксперта
Ответы на вопрос 4
Stalker_RED
@Stalker_RED
По сути, ваша защита повторной отправки то-же самое, что и "защита от накруток". Гуглится легко, даже на тостере не раз обсуждалось. Также, обратите внимание, что могут абузить не только повторную отправку, но и первую отправку при регистрации.
Ответ написан
Комментировать
riky
@riky
Laravel
самый простой вариант сохранять время отправки в сессии и проверять перед отправкой
if (time() - $_SESSION['last_sms_send'] > 100) { 
    send(); 
    $_SESSION['last_sms_send'] = time();
}

но злоумышленник может удалить сессионную куку в итоге запустится новая сессия и лимит не будет учитываться.
поэтому нужно сохранять время отправки и ип.
например в редис
$redis->set('sms_send_' . $_SERVER['REMOTE_ADDR'], time());

и аналогично первому варианту проверять.

конечно кому сильно надо - возьмут прокси и обойдут такую защиту, но тут вы вряд ли что-то придумаете.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Если вашему проекту почему-то необходима регистрация через смс-подтверждение, то вас элементарно можно нафлудить потоком регистраций. Если смс обходятся дорого - не используйте смс.

Поставьте на серверной стороне счётчики (например, в редисе или мемкеше), один ключ от номера телефона, второй - от IP (ну или ещё от чего, но про клиента достоверно вы только ip и знаете, больше ничего http не гарантирует), в качестве значения - дата отправки СМС. И просто не позволяйте отправлять сообщения чаще какого-то вменяемого интервала времени.
Ответ написан
Комментировать
Zonor
@Zonor Автор вопроса
Начинающий веб программист
Да, столько заморочек оказывается о которых и не подумал. Видно придётся убрать код подтверждения или что то придумать получше
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы