Ограничить скорость отправки формы - PullRequest
2 голосов
/ 19 октября 2011

На моем новом сайте я хочу сократить спам, ограничив пользователей максимум 2 сообщениями в час (это может измениться, чтобы разрешить больше, но сейчас его 2) Я разработал метод для этого с использованием куки, однако, по некоторым причинам сайт не устанавливает куки, вот мой код для куки:

    $sql = "INSERT INTO mysql_table (timestamp,entry,uid,allowcomments) VALUES ('$timestamp','$entry','".rndTxt(16)."','$allowcommenting')";

    $result = mysql_query($sql) or print ("Can't insert into table.<br />" . $sql . "<br />" . mysql_error());

   if ($result != false) {

        if(isset($_COOKIE['AnonPost']))
        {
        $hour = time() + 3600; 
        setcookie("AnonPost", "2", $hour); 
        }

        else {
        $hour = time() + 3600; 
        setcookie("AnonPost", "1", $hour); 
        }

        print "<meta HTTP-EQUIV='REFRESH' content='0; url=index.php'>";
    }

     mysql_close();

И затем более поздний оператор if / else проверяет, существует ли он и каково его значение (если он не существует, они видят сайт как нормальный, если он существует и val = 1, тогда он отображает сообщение говорят, что осталось только одно сообщение, и если val = 2, они получают сообщение о том, что в этот час у них закончились сообщения.)

Это работает на моем локальном хосте, но не на самом сайте (http://aviatex14.co.uk/anonpost/). Есть идеи почему?

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

Ответы [ 3 ]

6 голосов
/ 19 октября 2011

Для уменьшения спама существует множество методов

Система кодирования.http://www.google.com/recaptcha

Подтверждение по электронной почте при создании учетной записи.

Распознавание спама во время публикации.Ищет спам-ключевые слова.

Поля Honeypot в формах.Это использует CSS, чтобы скрыть поле ввода honeypot в каждой форме.Если запрос поступает на сервер с заполненным этим полем, вы знаете, что бот отправил форму и может игнорировать запрос.

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

2 голосов
/ 19 октября 2011

Замечание 1: для того, чтобы установить cookie, это нужно сделать до того, как ЛЮБОЙ HTML будет отправлен на страницу (поэтому он должен быть в самом верху вашего скрипта вместе с session_start).

Замечание 2: говоря о session_start, вы можете рассмотреть возможность установки переменной $ _SESSION вместо установки cookie.

  • они проще в использовании и имеют дело с
  • пользователь не может изменить их, кроме как уничтожить куки-файл сеанса php (но затем они снова войдут в систему, и вы можете проверить еще раз)
  • вы можете устанавливать / изменять / удалять их в любой момент после начала сеанса, вместо того, чтобы не забывать устанавливать cookie перед любым вызовом «print», «printf» или «echo»
  • вы уменьшаете пропускную способность заголовка - всегда хорошо
1 голос
/ 19 октября 2011

Использование cookie-файлов (поскольку они хранятся на стороне клиента) не является безопасным способом ограничения.Пользователь сможет легко изменить его, поэтому вам следует попробовать метод на стороне сервера.

Здесь вы можете просто считать сообщения пользователя из вашей базы данных.Примерно так получится количество сообщений пользователя за последний час:

select count(*) from mysql_table where uid='$uid' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR););
...