Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Система защиты от повторного нажатия (https://javascript.ru/forum/misc/83378-sistema-zashhity-ot-povtornogo-nazhatiya.html)

StartGames 25.11.2021 21:25

Система защиты от повторного нажатия
 
Здравствуйте. Вынужден снова обратиться к мудрецам данного форума. Нужна ваша помощь.

Предисловье:
У нас есть сайт, в нем присутствует личный кабинет пользователя. Чтобы попасть в него, нужно зарегистрироваться или авторизоваться. Это можно сделать путем авторизации по СМС или почтового адреса https://photo-screen.ru/i/5GeB2E0yp

Суть проблемы:
Но прошлой ночью недобросовестные люди специально слили весь бюджет на авторизацию по СМС. Они запрашивали код авторизации вводя рандомные телефонные номера. Система отправляла код авторизации на эти номера, при этом списывала деньги за каждое такое смс. Это длилось до того момента, пока счетчик средств не стал равен нулю.

Возможное решение:
Сначала я думал написать скрипт который будет записывать в куки количество кликов по кнопке АВТОРИЗАЦИЯ. Если кликов больше чем 5 за последние 24 часа, значит форму авторизации по СМС скрыть, а покупателя перенаправлять на страницу авторизации по почтовому ящику.

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

Я уже думал так, а не создать ли файлик в который будут записываться все айпишники которые кликнули по кнопке АВТОРИЗАЦИЯ за последние 24 часа. Настроить так, что клик по этой же кнопке будет сначала проверять есть ли в файлике текущий IP посетителя который делает клик по кнопке АВТОРИЗАЦИЯ. Если там есть 5 или больше записей этого IP за последние 24 часа, тогда просто перенаправлять его на страницу авторизации по емейлу. Можно также вывести сообщение что то типа - Вы исчерпали все попытки авторизоваться по СМС за сегодня. Авторизация по СМС будет доступна завтра. Сейчас вы будете перемещены на страницу авторизации по емейлу. Но это уже нюансы.

Также, подошло бы решение на php. Главное что основное событие это клик по кнопке <button id="login">АВТОРИЗАЦИЯ</button> И если этих кликов больше 5 за последние 24 часа - выполнить действие переадресации на другую страницу вместо появления окна авторизации по смс. Но я не знаю реально ли это сделать на js.

P.s.
Буду рад любым вашим идеям или решениям данной проблемы.:yes:

voraa 25.11.2021 21:40

Это не работа для браузера. Сервер должен заниматься этим.

Aetae 25.11.2021 21:49

++

Что бы вы не сделали на js, злодей может вообще выкинуть браузер и слать нужные запросы curl'ом.)

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

Vlasenko Fedor 25.11.2021 22:45

Прежде всего защитите форму отправки csrf token
Может вставить google капчу
Добавить в форму скрытое поле пример city
Роботы заполняют все, а вы если не пустое значит робот :)

StartGames 26.11.2021 09:45

Цитата:

Прежде всего защитите форму отправки csrf token
А можете показать пример на кнопке <button id="login">АВТОРИЗАЦИЯ</button>

Цитата:

Может вставить google капчу
Она может блокировать доступ если пользователь слишком часто жмет по определенной кнопке?)

Цитата:

Добавить в форму скрытое поле пример city
С этим бы тоже не помешал пример)

StartGames 26.11.2021 09:46

Цитата:

Так что цепляться вам надо не к клику, а к тому что у вас на сервере происходит после клика.
значит нужно писать админам хостинга?!)

StartGames 26.11.2021 09:47

Цитата:

Это не работа для браузера. Сервер должен заниматься этим.
Я так понимаю нужно написать админам хостинга и чтобы они поставили защиту по этому действию... если верно вас понял...

Vlasenko Fedor 26.11.2021 20:06

StartGames,
защита форм с помощью csrf token гуглите сами, а для начала разбиритесь
в двух словах на беке в сессию пользователя добавляется токен
который выводится в скрытом поле формы
токен отправляется на бек и сверяется с тем что в сессии
а раз есть сессия то можете контралировать сколько вызовов за период

ищите интеграцию капчи с проверкой на php
по city , что не понятно?
добавили в форму
<input type="hidden" name="city" value="">
на беке проверили если city не пустое значит бот

StartGames 26.11.2021 20:21

Цитата:

защита форм с помощью csrf token
понимаю что к сожалению, это абсолютно не решает проблемы. Если человек вручную сливает, тогда лучше будет поставить гугл каптчу. Только вот непонятно каким образом узнать и получить ответ гугла о том, ввел ли покупатель верный ответ или нет. И как запустить саму проверку от клика по кнопке, и когда и как проверять ответ гугла...

voraa 26.11.2021 22:01

Вот только не понятно, как можно авторизовываться, вводя фиктивный номер? Если номер фиктивный и не связан ни с каким пользователем, то на него не должна отправляться СМС.
Такое возможно только при регистрации.

Каптча может защитить от бота, но если там сидят реальные люди и вводят номера, каптча только замедлит процесс.
Куки можно чистить.
Реальнее все таки на сервере вести журнал обращений и действий по IP.
IP часто менять не так просто.


Часовой пояс GMT +3, время: 16:14.