Как ограничить отправку смс при регистрации пользователей?
============================================================

 Всем привет!  

  

Есть такой вот интересный вопрос:  

  

Делается сервис, пилится регистрацию (бек java/spring, хотя это вряд ли важно). Как опция есть возможность подтверждать юзера либо почтой, либо смс сообщением. И вот тут вопрос - как ограничить злоупотребление отправкой смс? Какие есть способы борьбы?  

  

Предположим кто-то добрался до api и начинает дергать отправку сообщений. Какие вероятные способы борьбы?  

Мюсли:  

  

1) Ограничивать возможности api (не очень идея если вдруг внезапно ломанется много юзеров сразу и кто-то не сможет отправить сообщение)  

2) Переход к эндпоинту отправки только при наличии определенных шагов, т.е. условный запрос /sendsms?number=xxx не сработает, если не пройден некий промежуточный этап, который в теории можно подумать как контролировать, например запрещать с одного ip повторную попытку регистрации  

  

Какие идеи? :)  

  

P.S.  

Речь не про отправку на один номер (это контролировать легко), а массовый запрос на отправку смс на разные номера  

Т.е. кто-то со злым умыслом делает 1000 запросов на 1000 РАЗНЫХ номеров. 

 Что если в API передавать какой-нибудь идентификатор, например CSRF-токен страницы регистрации? Это конечно не панацея, но убережет от использования апишки не по назначению. 

 Если вдруг внезапно запросов становится много, показывать капчу перед отправкой смс. Так же с одного айпи, 2-3 запроса за час - потом капча. Ну и само собой регистрация в 2 этапа: сначала введите данные, затем подтвердите номер.  

Запрещать 2 регистрации с одного айпи нельзя, сейчас нередка ситуация когда один айпи на пару сотен абонентов. 

 Как работает отправка СМС - сервер шлёт на смс-шлюз запрос. Значит, нужно, чтобы смс-шлюз принимал запросы только с ip адреса вашего сервера. Если смс-шлюз свой, то не вижу проблем, если не свой, то напишите провайдеру.  

> массовый запрос на отправку смс на разные номера

  

Устанавливать сессию, если большего одного запроса с одной сессии, то блокировать отправку с этой сессии.  

Если разные сессии, то ставить ограничения по ip на 5-60 минут. Не думаю, что с одного ip в течение часа кто то захочет воспользоваться вашим сервисом.  

К тому же я бы приделал ограничение по Гео - [rosreestr.subnets.ru/?get=num&num=79154610100](http://rosreestr.subnets.ru/?get=num&num=79154610100)  

Второй момент - проводить смс регистрацию, после подтверждения email.  

Ну, и добавить третью версию капчи от гугл, для надежности. 

 Такой вопрос тут задавался несколько раз.  

Вариантов куча и самый эффективный и самый предлагаемый из всех, лимит на отправку смс на один номер.  

  

Кстати сам делал такой функционал для МП. Там делал лимит на один номер иначе блокировал и все.