Мне назвали файл image.php
и один названный index.html
.
Этот код находится в index.html
<img src="image.php">
Теперь, это возможный для image.php
файл, чтобы знать, что это назвали index.html
файл?
Если так, как?
Более надежный (хотя и более запутанный) способ сделать это - сгенерировать случайный хэш для прикрепления к этой конкретной загрузке файла - но это будет работать только в том случае, если исходная страница также поддерживает 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
?>
Это имеет тот же эффект, что и другие предложения сделать что-то вроде
, однако это гораздо сложнее подделать.
Браузер обычно отправляет заголовок Referer (sic) для запросов изображений, которые содержат URL-адрес страницы, содержащей ссылку на изображение.
Это доступно с помощью переменной $ _ SERVER ['HTTP_REFERER']
(обратите внимание на необычное написание).
Обратите внимание, что эта переменная не всегда точна; пользователь может решить защитить свою конфиденциальность, не отправляя заголовок реферера (используя какой-то изящный инструмент конфиденциальности), и они могут даже изменить свой браузер, чтобы отправлять все, что они хотят в этом поле. Таким образом, на него не следует полагаться при аутентификации, если вы также не принимаете во внимание, что даже легитимный пользователь мог оставить его пустым или поместить в него произвольную строку.
Если пользователь использует браузер, который отправляет заголовок реферера, вы можете получить к нему доступ с помощью
$_SERVER['HTTP_REFERER']
, но он полагается на то, что клиент заслуживает доверия, на что вы не можете рассчитывать.
Если вам нужен независимый от браузера метод, вы можете добавить параметр GET в свою ссылку
<img src="image.php?ref=index.html">
и получить доступ с помощью $_REQUEST['ref'], но опять же, его можно подделать.
Только если вы готовы доверять некоторым крайне ненадежным данным, найденным в _SERVER долларов.