Итак, у меня есть страница, где есть функция отправки. Когда вы нажимаете кнопку «Отправить», вы попадаете на сайт с именем send.php . Я не хочу, чтобы люди могли обновлять сайт и таким образом отправлять один и тот же ответ дважды или более для спама. Я полагал, что одним из способов сделать это будет убедиться, что они происходят с сайта отправки, если это возможно. Другой способ - также перенаправить их, если они попытаются обновиться. Есть ли способ сделать это? Или другой способ исправить мою проблему в этом отношенииКак запустить функцию только в том случае, если пользователь приходит с определенного URL-адреса?
ответ
Посмотрите на переменную 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)»
Вы также можете проверить суперглобальный '$ _SERVER ['HTTP_REFERER']', если он установлен, он будет содержать строку домена – Dale
$ _SERVER [ 'HTTP_REFERER'], как предполагается, содержат в виду страница:
- может быть опущена клиентом по причинам конфиденциальности
- может быть изменен клиентом (содержимое этого прибывает из запроса клиента в конце концов, в соответствии с проектом протокола)
- Как уже упоминалось в PHP documentation: Короче , на него нельзя доверять.
Ведение редирект после успешного получения представления должен делать добро, поскольку он направляет пользователя от кода обработки представления (при условии, перенаправлять куда-нибудь ..)
Но кто-то с черной шляпой может еще запишите запрос на сервер при выполнении оригинала, подайте заявку. И повторное использование. Таким образом, метод перенаправления должен быть достаточным, чтобы вы были «безопасны» у обычных пользователей, но не от человека, которому хочет, чтобы спамить ваш сайт. I. Это похоже на стенд, где ваш сайт сидит и принимает заявки, а затем вежливо рассказывает человеку, который передал представление, чтобы «переехать туда». Никаких замков и ничего. Человек может даже игнорировать просьбу двигаться дальше.
Если вы:
- добавить скрытое поле в форму с некоторым достаточно-труднодоступном угадать значение (! Изменяющаяся, а не какую-то постоянная фразы)
- хранить его где-то в данной сессии, база данных или что подходит вам
- переписать код, чтобы принимать только представление, если значение скрытого поля соответствует вашему сохраненному значению
Тогда вы поставить люк на свой стенд, который открыт только для тех, кто знает секретный код, предоставленный им. Вы ограничили доступ пользователей к обработке отправки. Секретное значение следует отбрасывать после использования, поскольку в противном случае оно может быть повторно использовано и теряет свою цель.
Пользователь может по-прежнему чередовать страницу формы и целевую страницу отправки/формы для получения новых секретных значений и разрешать делайте новое представление каждый раз, хотя.Если вы хотите ограничить количество представлений, которые пользователю разрешено сделать, вы должны отслеживать количество запросов, которые пользователь запросил на странице формы в последнее время.
.. и конечно, ищите запрещенные слова и т. Д. В вашем коде обработки, если вам нужно.
Спасибо за ваш ответ. Однако это не должно быть проблемой. Я сделал так, чтобы ничего не отправлялось, если какое-либо из полей ввода пуст, как и было бы, если кто-то перейдет непосредственно на отправленную страницу. –
- 1. Вызывать функцию только в том случае, если выше определенного div
- 2. Создание веб-страницы видимо только в том случае, если пользователь приходит с определенной страницы или ссылки
- 3. DBMS_SCHEDULER.DROP_JOB только в том случае, если существует
- 4. maven плагин запускается только в том случае, если пользователь предпочитает
- 5. Как использовать функцию только в том случае, если версия 11+
- 6. Олицетворение работает только в том случае, если пользователь указан
- 7. Войти только в том случае, если пользователь активен, используя Laravel
- 8. добавить ось только в том случае, если пользователь задает диапазон
- 9. Подтвердить только в том случае, если
- 10. запустить Exec только в том случае, если другой Exec запущен
- 11. Запустить событие только в том случае, если предыдущий закончен?
- 12. Как запустить службу только в том случае, если пользователь/телефон активен?
- 13. Выполнить функцию только в том случае, если элемент не сфокусирован
- 14. Как включить функцию только в том случае, если параметр определен для определенного типа?
- 15. Запустить функцию Javascript только в том случае, если функция 'beforeunload' возвращает false
- 16. Применить функцию только в том случае, если столбцы соответствуют условию
- 17. Python: Определить функцию только в том случае, если существует пакет
- 18. JQuery - Как запустить функцию onclick только в том случае, если ссылка не перетаскивается?
- 19. JQuery как запустить функцию только в том случае, если условие истинно
- 20. Могу ли я запустить событие только в том случае, если пользователь завершит модификацию текстового виджета?
- 21. Использование кеша Django в том и только в том случае, если пользователь вышел из системы?
- 22. Как запустить событие MouseMove только в том случае, если мышь зависает над элементом в течение как минимум определенного времени?
- 23. Как использовать символ только в том случае, если он определен
- 24. Как разрешить пользователю устанавливать только в том случае, если данный раздел реестра не имеет определенного значения?
- 25. Как показать аватару только в том случае, если он существует?
- 26. Как проверить Networkstatus только в том случае, если требуется разрешение?
- 27. Как вызвать функцию только в том случае, если определенный элемент загружен и в разметке
- 28. Вызвать функцию только в том случае, если она не была вызвана/выполнялась только функция
- 29. Устанавливать только в том случае, если существует внешний файл
- 30. Вставьте строку только в том случае, если строка не существует
Посмотрите [здесь] (http://stackoverflow.com/questions/5690541/best-way-to-avoid-the-submit-due-to-a-refresh-of-the-page) кажется чтобы быть именно тем, что вы ищете. – Andrew
Вы можете установить cookie на свой компьютер, как только они отправят. Проверка реферера не будет работать, потому что пользователь может просто вернуться и отправить его снова. – chris85
Прочитайте это http://php.net/manual/en/reserved.variables.server.php , вы можете сохранить опубликованные данные в сеансе и проверить, были ли отправлены одинаковые данные в течение нескольких секунд, а затем дубликат. – Bsienn