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 часто менять не так просто.

StartGames 27.11.2021 10:51

Цитата:

Вот только не понятно, как можно авторизовываться, вводя фиктивный номер? Если номер фиктивный и не связан ни с каким пользователем, то на него не должна отправляться СМС.
А вот это очень хорошая идея на будущее. Но проясню ситуацию почему так. Дело в том, что вход по смс используется и для регистрации. Т.е. чтобы не "портить пользовательский опыт", система регистрации была также оборудована функцией смс. Но вы дали интересную идейку - а что если сделать принудительную регистрацию по емейлу, а уже внутри профиля будет возможность привязать номер и в последующем авторизоваться через него. Конечно это подкинет немного неудобств, но будет надежней.

Цитата:

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

Да, я это прекрасно понимаю, это как мера замедления и усложнения гусю жизни. Его же должно когда то достать выбирать эти картинки, сразу чистить кэш, + могу поставить таймаут на 1 номер (так что и + менять номер в поле). Неужели человек будет тратить столько времени чтобы проходить эти процедуры...

Цитата:

Реальнее все таки на сервере вести журнал обращений и действий по IP.
а можно ли это как то реализовать? Мне нужно на кнопку поставить какой то якорь?

StartGames 28.11.2021 12:58

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

voraa 28.11.2021 13:20

Цитата:

Сообщение от StartGames
а можно ли это как то реализовать? Мне нужно на кнопку поставить какой то якорь?

В браузере - нет.
Только на сервере.
Сервер видит IP (браузер его не знает), может привязать к данному IP времена последних попыток регистрации или авторизации с него (ну лишняя таблица в БД). При очередной попытке смотрим, если за последние 24 часа (8,12....) было больше 5 (10, 15...) попыток - даем отлуп.

StartGames 28.11.2021 14:51

Цитата:

В браузере - нет.
Только на сервере.
Сервер видит IP (браузер его не знает), может привязать к данному IP времена последних попыток регистрации или авторизации с него (ну лишняя таблица в БД). При очередной попытке смотрим, если за последние 24 часа (8,12....) было больше 5 (10, 15...) попыток - даем отлуп.
А вы могли бы подобное реализовать?! Если да, то сколько бы стоили ваши услуги?

voraa 28.11.2021 16:45

Нет. Я не слишком дружу с пхп (давно на нем не писал, и не писал ничего серьезного), в вклиниваться в чужие скрипты и в чужую БД...


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