2011-07-24 64 views
1

我有一個圖片文件夾1.jpg,2.jpg,3.jpg ...有什麼辦法可以防止用戶輸入網址www.example.com/pictures/3 .jpg直接進入瀏覽器並加載該圖像?防止直接在瀏覽器中打開圖片

如果web html調用它,圖像應該被加載(< img href = ...)。

這可能嗎?使用IIS URL重寫或其他技術?

我正在使用IIS7.5。我的目標是防止用戶看到下一張圖片......我知道,我可以編碼名稱,但是我有一些從1-1000開始的舊數據庫,並且我會以某種方式防止用戶不使用url進行瀏覽沒有refferer ...因爲每天我服務一張圖片,我不希望他們找到其他的...

這是可能的嗎?

+0

你也許能夠使用某種特殊構造的令牌是IIS可能驗證。但我懷疑這是值得的時間。我的答案是否定的(至少不值得)。 –

+0

Thanx。那麼有沒有簡單的方法? – Jerry2

+0

我看不到一個簡單的方法。您可能會考慮使用CSS來顯示嵌入到樣式表中的編碼圖像(http://www.greywyvern.com/code/php/binary2base64),但我不確定它在每個瀏覽器中都受支持。我們會看看別人有什麼要說的。 –

回答

1

您可以嘗試通過依靠HTTP_REFERRER進行網址重寫,但這並不總是準確的,並且可能會阻止用戶在某些瀏覽器上看到您網站上的圖像。

如果我是你,我會提出所有的圖片你的web目錄以外(或最好只是阻止pictures文件夾完全),然後建立一個PHP腳本,這樣所謂的image.php:

<?php 

define('NUM_IMAGES', 1000); 

header('Content-Type: image/png'); 

$image = imagecreatefromjpeg('pictures/'.((int)(time()/86400)%NUM_IMAGES+1).'.jpg'); 
imagepng($image); 

?> 

的上面的腳本會將圖像輸出到用戶瀏覽器,每天一次更改爲下一張圖像,您可以像這樣使用它:<img src="image.php" />

然後,由於您的圖像文件夾被阻止,所以沒有人可以看到任何其他圖像。然後仍然可以直接請求image.php,但他們只會看到當天的圖像。

如果您不想每天自動旋轉一次,並希望手動控制顯示的圖像,您也可以用要顯示的圖像編號替換'.((int)(time()/86400)%1000+1).'

如果你想它會自動旋轉,但要控制它更新的時間,你可以加一個偏移量time(),如:((time()+$offset)/86400)

+0

in iis7.5我不認爲htaccess可以阻止圖像文件夾... – Jerry2

+0

@ Jerry2好點哈哈,我太習慣apache :)我敢肯定,有一個等效的IIS方式來防止該文件夾被訪問:) – Paulpro

相關問題