Предотвратить фальшивый цикл запросов ajax для PHP

На моем веб-сайте я создал раздел комментариев для сообщений в блогах. Пользователи могут писать комментарии, нажать кнопку, и запрос AJAX будет отправлен на PHP, содержащий данные в JSON. PHP будет обрабатывать и проверять данные, а затем вставлять их в базу данных. При успехе все комментарии извлекаются из базы данных и, используя JQuery, все комментарии к странице перезагружаются.

Проблема в том, что любой может прийти и, используя консоль своего браузера, подделать запрос AJAX, заполнить свой собственный JSON и отправить запрос на PHP. Если все сделано так, то все, что происходит, – это проверка на стороне клиента, бесполезная. Проверка на стороне сервера все равно будет работать. Однако есть большая проблема.

for(var i = 0; i < 10000; i++) { //ajax request } 

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

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

Спасибо за помощь.

Единственный способ защитить вас в этом отношении – добавить CAPTCHA.

Это предотвратит массовые / автоматические сообщения. Одной из возможных библиотек для использования является Securimage . Он прост в использовании и интеграции. Вы можете запустить его за 10 минут с помощью вашего материала AJAX.

Опираясь на другие средства, такие как cookie или проверка на стороне клиента какого-либо рода, является рискованным, если это возможно вообще. Для instnace решение KA_lin может быть скомпрометировано через 5 минут: злоумышленник может отправлять поддельные файлы cookie, которые всегда будут иметь число страниц 0, и таким образом всегда будет разрешено публиковать сообщения. Или, что еще хуже, он мог создать небольшую программу, которая будет размещаться на вашей странице, не отправляя никаких файлов cookie. Вышеприведенный код создаст новый файл cookie и примет его сообщение каждый раз …

Я бы добавил переменную сеанса, содержащую количество сообщений, которые пользователь делает, учитывая многие страницы, вы можете создать что-то вроде $SESSION['page_id_total_nr_comments'] и отследить этот номер, добавить конфигурационную переменную, которая позволяет использовать максимум X комментариев к статье, например:

  function canUserAddComment($pageId){ $maxAllowed =......; if(!isset($SESSION[$pageId+'_nr_comments'])){ $SESSION[$pageId+'_nr_comments'] = 0; } if($SESSION[$pageId+'_nr_comments']< $maxAllowed){ $SESSION[$pageId+'_nr_comments']++; return true; } return false; } 

ИЛИ

При сохранении получите количество комментариев, которые уже использовались в этой статье, и решите, может ли ha сделать другой (все еще с переменной конфигурации)