2016-06-08 2 views
1

Итак, у меня есть страница, где есть функция отправки. Когда вы нажимаете кнопку «Отправить», вы попадаете на сайт с именем send.php . Я не хочу, чтобы люди могли обновлять сайт и таким образом отправлять один и тот же ответ дважды или более для спама. Я полагал, что одним из способов сделать это будет убедиться, что они происходят с сайта отправки, если это возможно. Другой способ - также перенаправить их, если они попытаются обновиться. Есть ли способ сделать это? Или другой способ исправить мою проблему в этом отношенииКак запустить функцию только в том случае, если пользователь приходит с определенного URL-адреса?

+1

Посмотрите [здесь] (http://stackoverflow.com/questions/5690541/best-way-to-avoid-the-submit-due-to-a-refresh-of-the-page) кажется чтобы быть именно тем, что вы ищете. – Andrew

+0

Вы можете установить cookie на свой компьютер, как только они отправят. Проверка реферера не будет работать, потому что пользователь может просто вернуться и отправить его снова. – chris85

+0

Прочитайте это http://php.net/manual/en/reserved.variables.server.php , вы можете сохранить опубликованные данные в сеансе и проверить, были ли отправлены одинаковые данные в течение нескольких секунд, а затем дубликат. – Bsienn

ответ

1

Посмотрите на переменную HTTP_REFERER. Он расскажет вам, на каком сайте был пользователь, прежде чем он пришел на ваш сайт.

Он будет дает вам информацию, как:

192.168.1.10 - - [16/Apr/2008: 16: 12: 36 +1200] «GET/PHP-HTTP-реферер переменной/HTTP/1.1" 200 2014 "http://www.websitefromexample.com/" Mozilla/5.0 (совместимый; Konqueror/3,5; Linux) KHTML/3.5.8 (как Gecko)»

+0

Вы также можете проверить суперглобальный '$ _SERVER ['HTTP_REFERER']', если он установлен, он будет содержать строку домена – Dale

0

$ _SERVER [ 'HTTP_REFERER'], как предполагается, содержат в виду страница:

  • может быть опущена клиентом по причинам конфиденциальности
  • может быть изменен клиентом (содержимое этого прибывает из запроса клиента в конце концов, в соответствии с проектом протокола)
  • Как уже упоминалось в PHP documentation: Короче , на него нельзя доверять.

Ведение редирект после успешного получения представления должен делать добро, поскольку он направляет пользователя от кода обработки представления (при условии, перенаправлять куда-нибудь ..)

Но кто-то с черной шляпой может еще запишите запрос на сервер при выполнении оригинала, подайте заявку. И повторное использование. Таким образом, метод перенаправления должен быть достаточным, чтобы вы были «безопасны» у обычных пользователей, но не от человека, которому хочет, чтобы спамить ваш сайт. I. Это похоже на стенд, где ваш сайт сидит и принимает заявки, а затем вежливо рассказывает человеку, который передал представление, чтобы «переехать туда». Никаких замков и ничего. Человек может даже игнорировать просьбу двигаться дальше.

Если вы:

  1. добавить скрытое поле в форму с некоторым достаточно-труднодоступном угадать значение (! Изменяющаяся, а не какую-то постоянная фразы)
  2. хранить его где-то в данной сессии, база данных или что подходит вам
  3. переписать код, чтобы принимать только представление, если значение скрытого поля соответствует вашему сохраненному значению

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

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

.. и конечно, ищите запрещенные слова и т. Д. В вашем коде обработки, если вам нужно.

+0

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

Смежные вопросы