Быстрая и легкая защита от наводнений?

У меня есть сайт, где пользователь отправляет сообщение с помощью Ajax для названного файла like.php. В этом файле обмениваются сообщениями пользователи, отправлен базе данных, и он затем передает ссылку обратно пользователю. В моем коде JavaScript я отключил текстовое поле пользовательские типы в то, когда они отправляют запрос Ajax.

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

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

Что Вы думаете? Это было бы лучшим способом пойти об этом или является там более легкими альтернативами?

Спасибо за любую справку.:)

10
задан VIVA LA NWO 11 June 2010 в 22:23
поделиться

3 ответа

Используйте жетон. Вы генерируете токен и добавляете его на страницу, отправившую запрос. В like.php вы проверяете, что запрос содержит действительный токен, что означает, что он поступает с вашей страницы, а не напрямую с внешней POSTing.

5
ответ дан 3 December 2019 в 19:32
поделиться

Я думал об использовании сессий, например иметь сессию, содержащую метку времени, которая проверяется каждый раз, когда

Это не остановит ботов, так как они могут получать и отправлять те же куки, что и пользователи.

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

Если вы не хотите вводить логин, то многие сайты используют captcha, чтобы попытаться сократить количество таких попыток.

http://www.phpcaptcha.org/

0
ответ дан 3 December 2019 в 19:32
поделиться

Сеанс - это самый простой способ сделать это, и он также имеет наименьшие накладные расходы. Вы можете сохранить два бита данных в сеансе, отметку времени последнего сообщения, и IP, с которого пришло сообщение. Тогда вот как вы проверяете легитимность:

session_start();
if(isset($_SESSION['ip']) && $_SESSION['last_post'] + MININTERVAL < time()) die('too early');

$_SESSION['last_post'] = time();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
// store the message
7
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: