Автоматически получить URL сайта, на котором отображается мое изображение?

Я пытался получить URL (включая параметры GET) сайта, на котором отображается мое изображение. Это потому, что я хочу извлечь один параметр URL.

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

Все, что я мог получить с изображением, это IP-адрес и другие элементы заголовка HTTP, но часть реферера пуста, и я подумал, что реферер содержит полный URL, о котором я говорю.

Это то, что я пытался.
Сначала тег img на другом сайте в BBCode:

[img]http://______.com/get_image.php?i=myimage[/img]

И на моем сайте этот скрипт на PHP, хотя любой язык, который работает, будет полезен для меня:

<?php
// Get name of image to be displayed (non-sanitized here for simplicity)
$filename = $_GET["i"];

// Here I want to get the site where image is being viewed
if (!empty($_SERVER['HTTP_REFERER'])) {
$visitor_url = $_SERVER['HTTP_REFERER'];
} else {
$visitor_url = "none";
}

// And write the referrer to a file just to test if it works
$fp = fopen('referer.txt', 'w');
fwrite($fp, $visitor_url);
fclose($fp);

// Eventually display the image
header('Content-Type: image/png');
readfile($filename . '.png');
?>

Итак, мои вопросы:

  1. Можно ли получить полный URL сайта, на котором отображается мое изображение?
  2. Если нет, есть ли другой способ получить полный URL?

Заранее спасибо.

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

0

Решение

Пытаться REMOTE_HOST вместо HTTP_REFERER:

// Here I want to get the site where image is being viewed
if (!empty($_SERVER['REMOTE_HOST'])) {
$visitor_url = $_SERVER['REMOTE_HOST'];
} else {
$visitor_url = "none";
}

Веб-сервер, на котором вы предоставляете изображение, должен быть правильно настроен. Если используется Apache, это с HostNameLookups On,

Увидеть http://php.net/manual/en/reserved.variables.server.php

0

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

Обычно браузеры отправляют полный реферер со всеми компонентами URL, включая параметры запроса — $_GET Титулы. Если они этого не делают, то нет другого способа достичь этого URL при передаче содержимого изображения.

Иногда отправка реферера может быть заблокирована, например. в какой-то пакетной обработке URL с использованием какого-либо сканера, такого как программа / скрипт или некоторых прокси.

В PHP получение реферера осуществляется $_SERVER['HTTP_REFERER'] потому что это обычно просто HTTP-заголовок из запроса, и это единственный $_SERVER ключ массива с информацией о реферере.

0

Вы добавили .htaccess тег, поэтому я думаю, что вы используете веб-сервер Apache. Если вы хотите полностью предотвратить проблему, вы можете полностью отключить хотлинкинг, перейдя на один уровень ниже. Вместо того, чтобы управлять в PHP, вы можете настроить веб-сервер так, чтобы он не обслуживал контент для доменов, отличных от того, который вы размещаете.

Проверьте руководство Больше подробностей.

0

Я исправил эту проблему, переключив мой сайт (где размещено изображение) на HTTPS. Код в моем вопросе делал свою работу правильно.

Похоже что HTTP_REFERER было пустым из-за того, что оно пришло с сайта HTTPS, а мой сайт был HTTP, он всегда отправлял его пустым. Я знал, что это может быть проблемой, но для меня это не имело особого смысла, потому что HTTP_REFERER также был пустым при переходе с другого сайта HTTP (что я думаю, что это не нормально), поэтому я подумал, что ошибка была в другом месте.

Обычно HTTP_REFERER отправляется, когда приходит и отправляется:

  1. из HTTP в HTTP
  2. от HTTPS к HTTPS
  3. от HTTP до HTTPS

Но это не отправляется, когда приходит и отправляется:

  1. из HTTPS в HTTP

И в моем случае, я не знаю почему, это не было отправка из HTTP в HTTP, что меня смутило.

0
По вопросам рекламы [email protected]