2010-07-06 52 views
1

我有一個名爲image.php的文件和一個名爲index.html的文件。PHP圖像文件呼叫發起

此代碼是index.html

<img src="image.php"> 

現在,是有可能的image.php文件就知道它是由index.html文件叫什麼名字?

如果是這樣,怎麼樣?

回答

-2

只有當您願意信任$ _SERVER中的某些非常不可靠的數據時。

+0

-1還有其他解決方案,其他每個人都發布了關於$ _SERVER的解決方案,至少有禮貌來解釋如何真正做到這一點。 – 2010-07-06 01:20:45

+0

我沒有解釋,因爲我拒絕鼓勵不好的做法。你稱它爲禮貌,我把它稱爲一個不好的主意。 – Kalium 2010-07-06 01:30:37

+0

但你不知道他是如何使用它。這可能是一個與安全無關的用法(例如,加載不同的語言徽標或某種美學改進),在那裏沒有人會試圖欺騙他們的引用標題,並且99%的情況。 – 2010-07-06 02:13:12

0

如果用戶使用發送來源標題的瀏覽器,你可以用

$_SERVER['HTTP_REFERER'] 

訪問它,但它依賴於客戶端上是值得信賴的,你不能指望。

如果你想有一個獨立於瀏覽器的方法,可以在GET參數添加到您的鏈接

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

和訪問與_REQUEST $ [「參考」],但再次,它可能會被欺騙。

+0

我認爲它仍然有不正確的拼寫,試試'referer' – alex 2010-07-06 01:08:08

+0

是的。我總是忘記那一個。全文參考http://php.net/manual/en/reserved.variables.server.php – amccausl 2010-07-06 01:09:38

3

瀏覽器通常會爲圖像請求發送一個「Referer」(原文如此)標題,其中包含包含圖像鏈接的頁面的URL。

這是可以使用$_SERVER['HTTP_REFERER']變量訪問(注意不尋常的拼寫)。

請注意,該變量並不總是準確的;用戶可以選擇通過不發送引用者頭部來保護他們的隱私(使用某種隱祕的隱私工具),他們甚至可以修改他們的瀏覽器以便在這個領域發送任何他們想要的東西。因此,不應該依賴於身份驗證,除非您還考慮到即使是合法用戶可能已將其留空或將任意字符串置於其中。

+0

我想說什麼,但更好! +1 – alex 2010-07-06 01:14:29

1

這樣做更可靠(儘管更復雜)的方式是生成一個隨機哈希以附加到該文件的特定負載 - 但這隻有在原始頁面也啓用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'>,但是這更難以欺騙。