Answer the question
In order to leave comments, you need to log in
What are the ways to protect against attacks on a service that uses SMS confirmation?
Добрый день
Есть сервис(веб-приложение), который запрашивает номер мобильного телефона перед регистрацией. Телефон должен быть проверенным, для этого на указанный номер отправляется смс с кодом для подтверждения. Отправка смс - платная услуга для сервиса, злоумышленник может отправить множество запросов на сервис, будет отправлено множество смс, у сервиса закончится лимит по смс сообщениям, сервис будет выведен из строя. Как можно защититься от такой атаки?
Answer the question
In order to leave comments, you need to log in
Усложнить отправку формы простым curl-om.
Используйте сессии, загружайте в hidden переменные значения ajax-ом, проверяйте, что пользователь загрузил не только html-файл формы, но и какое-то изображение, что он выполняет скрипты и тд. Понятно что от эмуляции браузера это не спасет, но жизнь злоумышленникам усложнит.
Кстати, можно еще отслеживать перемещения мыши, хотя бы в пределах формы, mouseover и mouseout на ее элементах, прокручивание страница, ввод текста в элементы формы (а не программное изменение value как в phantomjs) и на основании всего этого рассчитывать вероятность бота. При невысокой активности этим всем можно пренебречь, но в моменты атаки учитывать для выявления ботов.
В порядке приоритета:
Лимитировать количество запросов на один номер телефона по времени.
Лимитировать количество запросов с одного айпи на разные номера по времени.
Ограничить целевую аудиторию (по геоайпи отсеять пользователей из Китая, Индии, и пр. - если конечно они не являются вашей целевой аудиторией)
Ограничить общее количество запросов СМС в единицу времени (сутки, час).
Составь блоксхему процесса и посмотри на каких участках стоит применить лимиты и капчи
Установи во всех точках логирование
Мониторь всплески и аномалии
Установи лимиты для погашения всплесков
Повтори все с начала
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question