Вопрос

Я пишу новый веб-сайт, на котором пользователи должны будут вводить номер своего мобильного телефона. Проблема, с которой я столкнулся, заключается в том, что мне нужно убедиться, что пользователь действительно является владельцем (или, в данном случае, имеет доступ) номер мобильного телефона.

Решение, которое я придумал, заключается в том, что после отправки номера я отправляю им SMS с токеном и прошу пользователя ввести токен на моем веб-сайте, как это делает Календарь Google.Однако у меня ограниченный бюджет, и мне нужно убедиться, что пользователь А не предоставит 100 000 номеров мобильных телефонов. Если это произойдет, я сразу же обанкротюсь, поскольку каждое отправленное SMS-сообщение обходится мне примерно в 0,10 доллара США.

На данный момент я придумал следующие решения:

  • используйте капчу (удерживает некоторых пользователей подальше и по-прежнему уязвим для ручной регистрации)
  • ограничить количество токенов для данного запроса IP-адреса (динамические IP-адреса, прокси и т. д.)
  • ограничить количество токенов, отправляемых на данный номер мобильного телефона (пользователь может запросить токены для всех доступных номеров, и когда реальный пользователь попытается запросить легитимный токен, его номер уже будет заблокирован)

Ни одно из этих решений не является идеальным. Как вы предлагаете мне подойти к этой проблеме?

Это было полезно?

Решение

В недавнем проекте мы связывали номера SMS с учетной записью пользователя.Для каждой учетной записи требовалась CAPTCHA и активация по электронной почте.Пользователь может активировать SMS через токен, как вы используете.

Вы можете ограничить IP-адреса (не общий лимит).Не более 10 запросов с ИП в течение 5 минут или что-то в этом роде.

И/или вы можете ограничить количество невыполненных SMS-запросов.После того, как IP-адрес запрашивает токен для SMS, его необходимо отправить, прежде чем этот IP сможет запросить другой номер SMS.Или не более 10 выдающихся SMS-токенов на один IP в день.

Кроме того, как сказал @Alan, мы установили ограничение на количество SMS-сообщений в месяц.

Другие советы

Я бы использовал комбинацию CATPCHA и ограничения запросов данного мобильного номера.

Кроме того, у вас должна быть возможность указать с помощью вашего SMS-агрегатора заранее установленный лимит в месяц.После достижения этого предела служба отключается.Таким образом, если вы станете жертвой атаки, вы будете нести ответственность только за ограниченную сумму денег.

Вместо SMS вы можете использовать автоматизированную услугу, которая звонит на номер телефона и произносит одноразовый пароль (через текст 2).Цены на эти услуги аналогичны ценам на SMS, и вероятность злоупотреблений спамом ниже, поскольку они требуют больше накладных расходов.

Твилио стоимость разговора составляет 0,03 доллара за минуту или, в данном случае, 0,03 доллара за звонок.

Вы можете сделать то же, что делает Twitter, а именно попросить пользователя отправить вам токен (вместо того, чтобы вы отправляли его ему).

Для этого вам потребуется найти провайдера, который позволит вам получать текстовые сообщения бесплатно (или близко к этому), но это может быть проще.

Почему SMS стоит копейки?Используйте адрес электронной почты, который связан с каждой системой SMS (по крайней мере, здесь, в США).

http://www.sms411.net/2006/07/how-to-send-email-to-phone.html.

Если кто-то изо всех сил старается злоупотребить системой, он, скорее всего, найдет способ сделать это.Использование комбинации методов, которые вы уже придумали, вероятно, лучший способ помешать большинству злоумышленников.

Ограничьте то, что могут делать люди (не более 10 запросов с 1 ip за 10 минут, на один номер телефона можно получать только 3 сообщения в неделю, проверка перед вводом номера), но что еще важнее, если люди не имеют контроля над содержанием сообщения нет реальной причины использовать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top