Использование случайно сгенерированного токена для защиты от наводнений - PullRequest
1 голос
/ 13 июня 2010

Базовая настройка моего сайта: пользователь вводит сообщение на домашней странице, нажимает клавишу ввода, и сообщение отправляется через 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 через POST.Но как like.php узнает, что это действительный токен?Должен ли я вместо токена что-то, что связано с пользователем?Понравился их IP-адрес?Или, возможно, отметьте текущую минуту и ​​убедитесь, что это та же самая минута в like.php ...

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

Ответы [ 3 ]

1 голос
/ 13 июня 2010

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

1 голос
/ 13 июня 2010

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

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

1 голос
/ 13 июня 2010

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

...