Происхождение вызова файла изображения PHP - PullRequest
1 голос
/ 06 июля 2010

У меня есть файл с именем image.php и один с именем index.html.

Этот код в index.html

<img src="image.php"> 

Теперь можно ли файлу image.php узнать, что он был вызван файлом index.html?

Если так, то как?

Ответы [ 4 ]

3 голосов
/ 06 июля 2010

Браузер обычно отправляет заголовок «Referer» (sic) для запросов изображения, которые содержат URL-адрес страницы, содержащей ссылку на изображение.

Это доступно с помощью переменной $_SERVER['HTTP_REFERER'] (обратите внимание, необычно)правописание).

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

1 голос
/ 06 июля 2010

Более надежный (хотя и более запутанный) способ сделать это - сгенерировать случайный хеш для присоединения к этой конкретной загрузке файла - но это сработает, только если на исходной странице также включен php (не только статический) HTML).

Если вы хотите сделать это таким образом, вы можете сделать что-то вроде этого:

<?
// index.php or wherever you want to detect the source from
session_start();
$uniqid = uniqid();
$_SESSION["image_caller_$uniqid"] = $_SERVER['SCRIPT_FILENAME'];
echo "<img src='image.php?uniqid=$uniqid' />";
?>

А потом в вашем файле изображения

<?
// image.php
session_start();
$source = $_SESSION["image_caller_{$_GET['uniqid']}"];
unset($_SESSION["image_caller_{$_GET['uniqid']}"]); // Don't needlessly waste memory
// Render the image or whatever you want here
?>

Это имеет тот же эффект, что и другие предложения делать что-то вроде <img src='image.php?ref=index.html'>, однако подделать его гораздо сложнее.

0 голосов
/ 06 июля 2010

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

$_SERVER['HTTP_REFERER']

, но это зависит от доверия клиента, на которое вы не можете рассчитывать.

Если вам нужен независимый от браузера метод, вы можете добавить параметр GET к вашей ссылке

<img src="image.php?ref=index.html">

и получить доступ с помощью $ _REQUEST ['ref'], но, опять же, его можно подделать.*

0 голосов
/ 06 июля 2010

Только если вы готовы доверять некоторым крайне ненадежным данным, найденным в $ _SERVER.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...