php http server http referer

Что такое реферер или как использовать HTTP-заголовок referer

Что такое реферер? Заголовок HTTP referer передается с браузера на сервер, чтобы сообщить, на какой странице читатель находился перед тем, как перешел на вашу. Данная информация может быть использована, чтобы предоставить специальные предложения для целевых посетителей, перенаправить клиентов или сгруппировать посетителей сайта по определенным критериям.

Сбор из referer с помощью PHP, JavaScript и ASP

Обратите внимание, что DOM использует альтернативное написание referer :

После того как вы получили referer, что с ним делать?

Общее приветствие

Можно вывести URL-адрес из referer в верхней части страницы в общем приветствии:

Приветствие посетителей из поисковой системы

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

Передача информации в формы

Этот скрипт добавляет referer в скрытое поле формы:

Создание специального предложения для определенных посетителей

Возможно, вы захотите предоставить людям, которые приходят с конкретной страницы, специальное предложение на ваши товары или услуги. C этой целью можно было бы открыть новое окно, чтобы предложить страницу. Но помните, что людям не всегда нравятся всплывающие окна, так что используйте их осторожно:

Направление посетителей на другую страницу

Также можно направить людей с определенным HTTP referer на другую страницу. Будьте осторожны, так как Google и другие поисковые системы могут расценить это, как введение в заблуждение, и наказать ваш сайт:

Измените spammer.com на домен, который нужно заблокировать. Не забудьте добавить перед периодами в домене.

Не полагайтесь на referer

Дайте знать, что вы думаете по данной теме в комментариях. Мы крайне благодарны вам за ваши комментарии, подписки, дизлайки, лайки, отклики!

Источник

$_SERVER

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_SERVER — Информация о сервере и среде исполнения

Описание

Индексы

Абсолютный путь к исполняемому скрипту.

‘ SERVER_ADMIN ‘ Эта переменная получает своё значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определённое для данного виртуального хоста. ‘ SERVER_PORT ‘ Порт на компьютере сервера, используемый сервером для соединения. Для установок по умолчанию, значение будет ‘ 80 ‘; используя SSL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.

Примеры

Результатом выполнения данного примера будет что-то подобное:

Примечания

Смотрите также

User Contributed Notes 45 notes

Just a PHP file to put on your local server (as I don’t have enough memory)

That will give you the result of each variable like (if the file is server_indices.php at the root and Apache Web directory is in E:\web) :

No need to list all possible keys of the array.

The javascript block would define an event handler function and bind it to the form’s submit event. This event handler would load via an tag an external file, with the submitted username and password as parameters.

For example, with a PHP script, we can have this:

Will show something like 1492897785

However, a lot of vars are still vulnerable from environment injection.

I created a gist here ( https://gist.github.com/Pierstoval/f287d3e61252e791a943dd73874ab5ee ) with my PHP configuration on windows with PHP7.0.15 on WSL with bash, the results are that the only «safe» vars are the following:

All the rest can be overriden with environment vars, which is not very cool actually because it can break PHP applications sometimes.

An even *more* improved version.

You have missed ‘REDIRECT_STATUS’

Very useful if you point all your error pages to the same file.

ErrorDocument 404 /error-msg.php
ErrorDocument 500 /error-msg.php
ErrorDocument 400 /error-msg.php
ErrorDocument 401 /error-msg.php
ErrorDocument 403 /error-msg.php
# End of file.

Guide to absolute paths.

Data: __FILE__
Data type: String
Purpose: The absolute pathname of the running PHP file, including the filename.
Caveat: This is not the file called by the PHP processor, it’s what is running. So if you are inside an include, it’s the include.
Caveat: Symbolic links are pre-resolved, so don’t trust comparison of paths to be accurate.
Caveat: Don’t assume all operating systems use ‘/’ for the directory separator.
Works on web mode: Yes
Works on CLI mode: Yes

Data: __DIR__
Data type: String
Purpose: The absolute pathname to the running PHP file, excluding the filename
Caveat: This is not the file called by the PHP processor, it’s what is running. So if you are inside an include, it’s the include.
Caveat: Symbolic links are pre-resolved, so don’t trust comparison of paths to be accurate.
Caveat: Don’t assume all operating systems use ‘/’ for the directory separator.
Works on web mode: Yes
Works on CLI mode: Yes

They are still accessible, but only if the request was a POST request. When it is, it’ll be available as:
$_SERVER[‘CONTENT_LENGTH’]
$_SERVER[‘CONTENT_TYPE’]

If the browser sends an HTTP request header of:
X-Debug-Custom: some string

[ ‘HTTP_X_DEBUG_CUSTOM’ ]; // «some string»
?>

There are better ways to identify the HTTP request headers sent by the browser, but this is convenient if you know what to expect from, for example, an AJAX script with custom headers.

Works in PHP5 on Apache with mod_php. Don’t know if this is true from other environments.

Depending on what you want to do the content of this variable, put in On or Off.

This happens, for example, when calling the page through a call to stream_context_create() with a HTTP header of ‘request_fulluri’ set to 1.

Apparently, request_fulluri is useful when using some proxy servers.

One quick (and improvable) way to detect it would be to compare the start of the REQUEST_URI with REQUEST_SCHEME:

So near, and yet so far …

$_SERVER has nearly everything you need to know about the current web page environment. Something which would have been handy is easy access to the protocol and the actual web root.

For practical purposes, I normally include something like the following in my scripts:

[«_SERVER»]=>
array(24) <
[«MANPATH»]=>
string(48) «/usr/share/man:/usr/local/share/man:/usr/X11/man»
[«TERM»]=>
string(11) «xterm-color»
[«SHELL»]=>
string(9) «/bin/bash»
[«SSH_CLIENT»]=>
string(20) «127.0.0.1 41242 22»
[«OLDPWD»]=>
string(60) «/Library/WebServer/Domains/www.example.com/private»
[«SSH_TTY»]=>
string(12) «/dev/ttys000»
[«USER»]=>
string(5) «username»
[«MAIL»]=>
string(15) «/var/mail/username»
[«PATH»]=>
string(57) «/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin»
[«PWD»]=>
string(56) «/Library/WebServer/Domains/www.example.com/www»
[«SHLVL»]=>
string(1) «1»
[«HOME»]=>
string(12) «/Users/username»
[«LOGNAME»]=>
string(5) «username»
[«SSH_CONNECTION»]=>
string(31) «127.0.0.1 41242 10.0.0.1 22»
[«_»]=>
string(12) «/usr/bin/php»
[«__CF_USER_TEXT_ENCODING»]=>
string(9) «0x1F5:0:0»
[«PHP_SELF»]=>
string(10) «Shell.php»
[«SCRIPT_NAME»]=>
string(10) «Shell.php»
[«SCRIPT_FILENAME»]=>
string(10) «Shell.php»
[«PATH_TRANSLATED»]=>
string(10) «Shell.php»
[«DOCUMENT_ROOT»]=>
string(0) «»
[«REQUEST_TIME»]=>
int(1247162183)
[«argv»]=>
array(1) <
[0]=>
string(10) «Shell.php»
>
[«argc»]=>
int(1)
>

A way to get the absolute path of your page, independent from the site position (so works both on local machine and on server without setting anything) and from the server OS (works both on Unix systems and Windows systems).

I needed to get the full base directory of my script local to my webserver, IIS 7 on Windows 2008.

I ended up using this:

Guide to URL paths.

Guide to script parameters.

SetEnv varname «variable value»

Google Chrome 3.0.195.27 Windows xp

Lang. de-DE»
Array
(
[0] => de-DE
[primarytag] => de
[1] => de
[subtag] => DE
[2] => DE
)
Lang. de;q=0.8»
Array
(
[0] => de;q=0.8
[primarytag] => de
[1] => de
[subtag] =>
[2] =>
[quantifier] => 0.8
[3] => 0.8
)
Lang. en-US;q=0.6»
Array
(
[0] => en-US;q=0.6
[primarytag] => en
[1] => en
[subtag] => US
[2] => US
[quantifier] => 0.6
[3] => 0.6
)
Lang. en;q=0.4»
Array
(
[0] => en;q=0.4
[primarytag] => en
[1] => en
[subtag] =>
[2] =>
[quantifier] => 0.4
[3] => 0.4
)

Источник

Допустим, у меня есть две страницы page1.php а также page2.php и я хочу page2.php отображаться только в том случае, если это перенаправленная форма page1.php и я вставил этот код page2.php

этот код работал нормально, пока у меня нет формы и кнопки отправки page2.php при нажатии кнопки отправки страница обновляется, что означает HTTP_REFERER изменится на page2.php Так что мой if statement не удается, и это возвращает меня к page1.php Я не хочу, чтобы это случилось. Есть ли способ предотвратить это?

Решение

Я бы не рекомендовал использовать HTTP_REFERER:

Это довольно просто манипулировать в браузере.

Некоторые пользователи могут иметь настройки безопасности в своем браузере, чтобы вообще не отправлять этот заголовок.

Это не доступно через HTTPS.

Некоторые прокси удаляют этот заголовок из запроса

добавлено — см. ответ на этот вопрос

Как Шарлотта Дюнуа заявила в комментарии, лучше установить значение сеанса перед отправкой формы, а затем проверить его на странице 2.

Другие решения

если реферер не страница 1, вы можете проверить условие, если реферер = страница2 и сообщение отправлено.
или проверьте, является ли реферал page1 или отправлено сообщение.
Это возможность избежать вашей проблемы.

Вместо этого вы можете установить печенье когда они загружают страницу 1, используя setcookie(«page1», 1); до любая разметка выводится. Затем проверьте это на странице 2, используя

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

Источник

Как использовать HTTP Referer

Что вы можете сделать с процессом реферера

Информация, которую вы видите, написанная на веб-сайтах, является лишь частью данных, которые эти сайты передают, когда они перемещаются с веб-сервера в браузер человека и наоборот. За кулисами также происходит довольно много передачи данных – и если вы знаете, как получить к ним доступ, вы сможете использовать их интересным и полезным способом! В этой статье мы рассмотрим один конкретный фрагмент данных, который передается во время этого процесса – HTTP реферер.

Что такое HTTP Referer?

HTTP-реферер – это данные, которые веб-браузеры передают на сервер, чтобы сообщить вам, на какой странице читатель находился до того, как они пришли на эту страницу. Эта информация может использоваться на вашем веб-сайте для предоставления дополнительной помощи, создания специальных предложений для целевых пользователей, перенаправления клиентов на соответствующие страницы и контент или даже для блокировки посетителей от посещения вашего сайта. Вы также можете использовать языки сценариев, такие как JavaScript, PHP или ASP, для чтения и оценки информации о реферере.

Сбор информации Referer с помощью PHP, JavaScript и ASP

Итак, как вы собираете эти данные HTTP реферер? Вот несколько методов, которые вы можете использовать:

PHP хранит информацию о реферерах в системной переменной HTTP_REFERER. Для отображения реферера на странице PHP вы можете написать:

Это проверяет, что переменная имеет значение, а затем выводит его на экран. Вместо

вы бы поместили строки сценария на место, чтобы проверить наличие различных рефереров.

JavaScript использует DOM для чтения реферера. Как и в случае с PHP, вы должны проверить, чтобы убедиться, что реферер имеет значение. Однако, если вы хотите манипулировать этим значением, вы должны сначала установить его в переменную. Ниже показано, как вы можете отобразить ссылку на свою страницу с помощью JavaScript. Обратите внимание, что DOM использует альтернативное написание реферера, добавив туда дополнительный «r»:

Тогда вы можете использовать реферер в скриптах с переменной

ASP, как и PHP, устанавливает реферер в системной переменной. Затем вы можете собрать эту информацию следующим образом:

Вы можете использовать переменную

для настройки ваших скриптов по мере необходимости.

Если у вас есть рефери, что вы можете с ним сделать?

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

Когда у вас есть данные для реферера, вы можете использовать их для сценариев ваших сайтов несколькими способами. Одна простая вещь, которую вы можете сделать, это просто опубликовать, откуда, по вашему мнению, пришел посетитель. По общему признанию, это довольно скучно, но если вам нужно выполнить некоторые тесты, это может быть хорошей отправной точкой для работы.

Более интересный пример – использование реферера для отображения различной информации в зависимости от откуда они пришли. Например, вы можете сделать следующее:

С точки зрения безопасности, если вы испытываете много спама с реферером на своем сайте из одного конкретного домена, это может помочь просто заблокировать этот домен с вашего сайта. Если вы используете Apache с установленным mod_rewrite, вы можете заблокировать их несколькими строками. Добавьте следующее к вашему

Не забудьте изменить слово

для домена, который вы хотите заблокировать. Не забудьте поставить \ перед любыми периодами в домене.

Не полагайтесь на Реферера

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

Источник

Параметры сервера

Имя хоста, обычно совпадает с доменом.

Версия CGI на сервере.

Название и версия сервера.

Версия сервера и имя виртуального хоста, обычно пуста.

Имя и версия используемого HTTP протокола.

Значение из директивы конфигурационного файла Apache.
На хостингах указывают контактный e-mail.

Параметры соединения

Имя сервера, как правило, совпадает с доменом.

IP-адрес, с которого пользователь просматривает текущую страницу.

Удаленный хост, с которого пользователь просматривает текущую страницу.

Порт на удаленной машине, который используется для связи с веб-сервером.

Метод запроса к странице.

Время запроса к серверу в Unix timestamp.

​Время запроса к серверу с точностью до микросекунд.

Пути на сервере

Директория корня сайта, в которой выполняется текущий скрипт.

Содержит путь, содержащийся после имени скрипта.
Например для адреса http://site.ru/index.php/123 значение будет следующим:

Исходное значение переменной PATH_INFO перед обработкой PHP.

Путь и имя выполняемого скрипта.

​Абсолютный путь к исполняемому скрипту.

Метод HTTP аутентификации.

HTTPS

Значения в примерах приведены для адреса http://site.ru/index.php?page=1&sort=2

URI страницы с GET-параметрами, без домена.

​Содержит URL страницы без GET-параметров и домена.

Заголовки браузера

Строка, обозначающая браузер и операционную систему, который открыл данную страницу.

Адрес страницы, с которой браузер пользователя перешёл на текущую страницу.

Содержимое заголовка Accept из текущего запроса.

HTTP заголовок переданный клиентом, говорящий о том какие алгоритмы сжатия он может понять.

Предпочтения клиента относительно кодировки.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *