Капча в приложении, не использующем сессии

113
19 июня 2021, 04:50

В приложении требуется использовать капчу. Генерация и проверка капчи должна быть реализована локально, без использования внешних сервисов проверки. Практически все реализации капчи используют сессию. Фраза сохраняется в сессии пользователя и при проверке сравнивается пришедшая фраза с фразой из сессии.

А как быть, если приложение не использует сессии? Пока придумал только:

  • Генерировать случайный ключ
  • Генерировать капчу и сохранять в фразу в кэше с этим ключом
  • Передавать пользователю ключ + картинку
  • При отправке формы извлекать фразу из кэша по ключу и сравнивать с присланной

Меня смущает безопасность такого решения. Фактически при каждом обновлении картинки/страницы в кэш добавляется новая запись. Можно, разумеется, задать маленькое время жизни для таких записей, но менее 10 минут не задашь (мало ли как будет тупить пользователь над формой). Не получится ли из такого решения потенциальная бомба, когда сайту могут забить весь кэш одними только обновлениями страницы?

Второй вариант, который приходит в голову, - это:

  • формировать ключ на стороне клиента
  • сохранять ключ в локальном хранилище браузера
  • использовать этот ключ при запросе капчи
  • сохранять фразу в кэш с полученным от клиента ключом
  • при повторном запросе капчи обновлять фразу в кэше с этим ключом

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

Буду рад, если поделитесь примерами реализации капчи без использования сессий? Проект на symfony, но это особой роли не играет, главное алгоритм.

READ ALSO
проблема с записью в базу данных mysql

проблема с записью в базу данных mysql

После перехода по ссылке на подтверждение емайл данные не записываются в базу данныхНе могу понять в чем проблема?

82
RedBeanPHP и PHP switch: case

RedBeanPHP и PHP switch: case

Есть рабочий вариант кода страницы, для вывода текста из БД с помощью RedBeanPHP:

93
ReactJS + Spring Boot 2 FullStack пиложение, как разобрать

ReactJS + Spring Boot 2 FullStack пиложение, как разобрать

Хочу научиться делать фронтенд для Rest Api приложенийВыбрал React

109
Как переписать код в стиле ООП?

Как переписать код в стиле ООП?

Всем привет! Объясните пожалуйста, как переписать данный код в стиле ООП (если возможно то с использованием интерфейсов)Собственно код:

94