Использование случайно сгенерированного токена для защиты от наводнений

Базовая настройка моего сайта: пользователь вводит сообщение на главной странице, нажимает клавишу ВВОД, и сообщение отправляется через AJAX-запрос в файл с именем like.php где эхо - это ссылка, которая отправляется обратно пользователю.

Я сделал отключение ввода, когда пользователь нажимает ввод, но ничто не мешает пользователю просто постоянно флудить like.php с запросом POST и заполнением моей базы данных.

Кто-то здесь на SO сказал мне использовать систему токенов, но не упомянул как. Я видел, как это делалось раньше и насколько я знаю, это эффективно.

Единственная проблема у меня есть, как будет like.php знаете, это действительный токен? Мой код это на данный момент:

$token = md5(rand(0, 9999) * 1000000);

и разметка:

<input type="hidden" name="token" value="<?php echo $token ?>" />

Который отправит токен like.php через ПОСТ. Но как будет like.php знаете, что это действительный токен? Должен ли я вместо токена что-то, что связано с пользователем? Понравился их IP-адрес? Или, возможно, отметьте текущую минуту и ​​проверьте, что это та же самая минута в like.php...

Любая помощь по этому поводу будет принята с благодарностью, спасибо.:)

3 ответа

Решение

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

Не изобретайте колесо - просто посмотрите время последнего комментария от этого пользователя, определяемое user_id, user_ip, что бы у вас ни было - и решите, разрешено ли ему публиковать сообщения или нет.

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

Я бы определенно предложил хранить IP-адреса пользователей.

Другие вопросы по тегам