PHP: защита скрипта активации учетной записи от злоупотреблений

Я сделал PHP-скрипт для пользователя, чтобы активировать свою учетную запись после того, как он нажал на ссылку подтверждения. Работает как обычно - пользователь нажимает на ссылку

www.example.org/activation?code=R4nD0mCoD3

Скрипт проверяет в базе данных, существует ли код, и если нет, то перенаправляет пользователя на ./index.php

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

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

Спасибо за помощь :)


person Kris    schedule 22.07.2014    source источник
comment
По моему мнению, вы можете зарегистрировать IP-адрес и посмотреть, получает ли пользователь доступ к ссылке в течение определенного периода времени.   -  person simeg    schedule 23.07.2014
comment
Что ж, коды должны быть достаточно случайными, чтобы они не могли спамить коды и активировать случайную учетную запись (обычно срок действия ссылок активации тоже истекает). Кроме того, просто рассылка спама в любом случае не должна разрушить вашу базу данных.   -  person Dave Chen    schedule 23.07.2014
comment
Вытащите его, с выделением времени, а затем удалите при первом/однократном использовании. IP-адреса могут меняться, поэтому это не совсем надежно.   -  person Funk Forty Niner    schedule 23.07.2014
comment
Я бы сделал код длинным... как в 64 символа или больше   -  person cmorrissey    schedule 23.07.2014
comment
@simpe: я тоже имел в виду эту идею, но я надеялся, что у кого-то может быть другая идея - так как это снова касается отправки запросов в мою базу данных.   -  person Kris    schedule 23.07.2014
comment
Люди, спамящие URL-адресом активации, не должны быть большой проблемой по двум причинам: 1. Это довольно легкий запрос. Это просто оператор выбора. Если кто-то делал это злонамеренно, пытаясь нанести вам DDOS, есть гораздо лучшие способы сделать это. 2. Нет никакого смысла рассылать URL-адреса спамом с целью массовой активации учетных записей, поэтому, по всей вероятности, никто этого не сделает. Даже если они и были, это не имеет значения.   -  person Samsquanch    schedule 23.07.2014
comment
Как насчет того, чтобы перейти на страницу с RE-CAPTCHA, которую необходимо ввести, прежде чем она действительно проверит номер активации?   -  person cmorrissey    schedule 23.07.2014
comment
@Samsquanch - в этом есть смысл. Похоже, я поднял шум из чего-то, что не должно быть проблемой безопасности.   -  person Kris    schedule 23.07.2014
comment
@cmorrissey да, это тоже имелось в виду. Но, если честно, мне вообще не нравится использовать капчу (даже если мне приходится использовать их при входе в систему после x неудачных попыток), потому что они неудобны для пользователя.   -  person Kris    schedule 23.07.2014
comment
@Kris, они тоже не дружат с ботами   -  person cmorrissey    schedule 23.07.2014
comment
@cmorrissey да правда. у всего есть свои плюсы и минусы, но сегодня кажется, что веб-сайты должны быть удобными для пользователя.   -  person Kris    schedule 23.07.2014


Ответы (1)


$key = sha1($email.time()); // 'email' or any other value

Дает вам 40-символьный ключ, который должен быть достаточно безопасным, но если вы действительно хотите предотвратить выбор для любого запроса с помощью ключа, вы можете вернуть представление с помощью кнопки отправки (по умолчанию отключено), а затем включить с помощью javascript в документе .ready, поскольку большинство ботов не поддерживают JavaScript.

Если вы пойдете по этому пути, вы также можете установить тайм-аут на 1 или 2 секунды, прежде чем активировать кнопку, которая замедлит работу ботов с поддержкой javascript.

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

person c-griffin    schedule 22.07.2014