Перенаправления и ссылки

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

Итак, скажем, у меня есть три страницы: start.php, middle.php и end.php

start.php

<a href="middle.php">middle</a>

middle.php

end.php

Когда вы переходите по ссылке, вы заканчиваете на end.php, но референт не является middle.php. Есть ли какой-либо другой метод перенаправления, который я могу использовать, чтобы исправить это, или что-нибудь еще, что я могу сделать?

Приветствия

ИЗМЕНИТЬ В этом случае целевая страница является сторонним поставщиком. Единственный метод, который они должны проверить, - это ссылка на URL. Я не контролирую это. Мне просто нужна моя страница, которая перенаправляет для отправки правильного URL-адреса. Существуют ли какие-либо альтернативы этому методу перенаправления, а не выделяются причины не доверять http_referer?

6 ответов

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


Извините, но это из-под вашего контроля, только браузер может отправить этот заголовок - и не все это делать. Его можно легко подделать, поэтому не полагайтесь на него.

Дополнительная информация об этом php bug (который был отмечен не как ошибка).


Так как HTTP_REFERER не заслуживает доверия (может быть легко изменен извне), вы можете легко сохранить последнюю страницу, посещенную в сеансе после каждого запроса. Затем легко получить его при перезагрузке.

Значение, загрузка реферера как $referring_url = $_SESSION [ "referring_url" ]. Затем сохраните его $_SESSION [ "referring_url" ] = $current_absolute_url; при завершении каждого запроса.

Хотя, обратите внимание, что это может быть проблема concurrency. Наличие параллельных запросов (с использованием, например, AJAX) может легко заставить сеанс считать, что он исходил со страницы, которая на самом деле этого не делала.

Получение абсолютного пути текущего запроса


Этот вопрос несколько раз появлялся на SO (я не могу найти ни одного обмана сейчас), и я всегда думаю, что в нижней строке не указано, что браузер должен установить обратитесь к этой ситуации.

Можно ли явно указать его с помощью параметра GET или что-то еще?


Я бы предложил что-то вроде этого:

header('Location: end.php?from=' . urlencode($_SERVER['PHP_SELF'));

И затем на странице, где вы хотите узнать, откуда была отправлена ​​переадресация:

echo 'redirected from ' . urldecode($_GET['from']);


Что вы пытаетесь использовать информацию заголовка Referrer для?

Если для аутентификации/проверки происхождения запроса вы можете попробовать попробовать другой подход. Как отметил Эль ****, заголовок Referrer не является надежным способом определения, откуда приходит запрос.

licensed under cc by-sa 3.0 with attribution.