За последние 24 часа нас посетили 18610 программистов и 1919 роботов. Сейчас ищут 1356 программистов ...

Запрет отправлять одинаковые сообщения?

Тема в разделе "PHP для новичков", создана пользователем glorsh66, 14 мар 2018.

  1. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Как лучше всего сделать защиту от отправки одинаковых сообщений подряд?

    Я думаю что посчитать хэш (md5 или sha1) из заголовка и тела сообщения - и если хэш сходится то показывать пользователю ошибку.

    Или есть более грамотные способы?
     
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Вопрос а зачем, а точней какие цели вы преследуете.
    Если хотите защитится от спама, то пожалуйста Google reCaptcha вам в помощь
     
    glorsh66 нравится это.
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    Вангую, хочет "защититься" от нечаянной повторной отправки формы по F5, ибо никакого рефреша после апдейта не делает.
    --- Добавлено ---
    Если я прав, то решение такое:
    PHP:
    1. // ... сделали всё что надо, сохранили, затем
    2. header('Location: '.$_SERVER['PHP_SELF']);
     
    glorsh66 и askanim нравится это.
  4. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Двойная цель - от повторной отправки при нажатии формы. И от спама одинаковых сообщений (при условии что капча пройдена, ну просто что бы не загаживать одними и теме же сообщениями, и злостный спаммер что бы хотя бы потрудился текст поменять).


    По преведенному примеру - правильно понимаю - что в данном случае - мы делаем редирект на туже самую страницу.
    header('Location: '.$_SERVER['PHP_SELF']);
    И у нас форма уже пустая будет.
    Просто в чем лучше данного способа чем например редирект на сообщение - ваше сообщение успешно отправленно?
    Да и как будет если пользователь нажнем кнопку - назад в браузере?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    Дело хозяйское, но как модератор этого форума могу сказать, что это нетипично. Так не загаживают. А ботов тут проходит видимо-невидимо!

    Тем более что спамоботу ничего не стоит, вобщем-то, слегка менять текст. ИМХО, овчинка выделки не стоит. А вот делать редирект после записи — это хорошая практика.
     
    glorsh66 нравится это.
  6. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    А что типично? Вроде говорили тут на форуме что модерация нелегкая и куча спама.
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @glorsh66 Ещё момент, если отправляете форму асинхронно через ajax на javascript, то не забудьте после успешной отправки очистить форму средствами javascript.
    --- Добавлено ---
    Код (Javascript):
    1. document.myForm.reset();
     
    glorsh66 и keren нравится это.
  8. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Интересная статья - только вот не понял последней фразы
    If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
    user agent MUST NOT automatically redirect the request unless it can be confirmed by the user - что тут имется ввиду, если мы как раз и делаем редирект?
    Или имеется ввиду - про сам бразер - что после получения ответа - 302 пока ему не придет комманда на редирект с сервера?
    А это спасет от ситуации например - у пользователя отвалился интернет и он повторно шлет?

    Кстати - как как модератор - как от ботов защищаться кроме каптч и секретных вопросов и т.д.

    В какой то "умной" книжке читал еще что можно выключить кнопку после посыла запроса☻

     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.862
    Симпатии:
    752
    Адрес:
    Татарстан
    я ограничивал временем..... не чаще чем раз в 7 секунд например
    вполне спасает от случайных повторов
     
    glorsh66 нравится это.
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Эх костыли, костыли костылявые
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    хэш текста сохранить как минимум
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.593
    Симпатии:
    1.764
    Редирект делаем не мы, а браузер. Мы только заголовок отправляем. Здесь говорится, что если клиент получил 302 статус после запроса любым методом кроме GET и HEAD, то он не обязан делать его сразу, а может спросить у пользователя. На практике таких браузеров, которые бы у меня это спрашивали, я не встречал.
     
    glorsh66 и artoodetoo нравится это.
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.848
    Симпатии:
    654
    Первые комменты к статье по ссылки прочтите. Нет таких браузеров, поэтому спокойно делаем 302.

    P.S. Там еще есть заморочка вроде того, делать редирект тем же методом или методом GET. Тоже спокойно используем 302, получая в результате GET вне зависимости от того, что написано в спеках.
    --- Добавлено ---
    @glorsh66, спам в 99,99% автоматический, а боты плевать хотели на все эти приблуды, там используются немного др. техники.