h2ooooooo接受的答案很好。但是,是什麼阻止某人輸入image.php的url地址並被提供給圖像? (事實上,這是我嘗試過的,我不幸能夠獲取圖像,即使它在密碼保護的文件夾中。)
看來我們需要一種確定請求來自頁面的方式在同一個網站上,或者可能在這次調用之前建立一個會話變量,並在提供圖像之前檢查它的存在。有針對here好的建議:How to check if a request if coming from the same server or different server?
最後我做了以下(<img src="getUploadFile.php?fname=my.jpg">
):
<?
function requestedByTheSameDomain() {
$myDomain = $_SERVER['SCRIPT_URI'];
$requestsSource = $_SERVER['HTTP_REFERER'];
return parse_url($myDomain, PHP_URL_HOST) === parse_url($requestsSource, PHP_URL_HOST);
}
if(requestedByTheSameDomain()) {
$inputArr = array();
if($_SERVER["REQUEST_METHOD"] == 'POST') {
$inputArr = $_POST;
}
else {
$inputArr = $_GET;
}
$fname = $inputArr['fname'];
$path_info = pathinfo($fname);
$ext = $path_info['extension'];
if (in_array($ext, array('jpg','png','gif','jpeg','bmp','tif','tiff'))) {
$type = 'image';
$subType = $ext;
if($ext == 'jpg') $subType = 'jpeg';
if($ext == 'tif') $subType = 'tiff';
if($ext == 'svg') $subType = 'svg+xml';
}
else if(in_array($ext, array('mpg','ogg'))) {
$type = 'audio';
$subType = $ext;
}
else if($ext == 'mp4'){
$type = 'video';
$subType = $ext;
}
else if($ext == 'pdf') {
$type = 'application';
$subType = $ext;
}
header("Content-Type: $type/$subType");
readfile("images/$fname");
}
?>
剩下的工作就是禁用右鍵單擊和/或服務於它的背景圖像來呈現保存圖像一樣困難。
您可以使用robots.txt來從該目錄中屏蔽抓取工具。你可能想檢查深入鏈接,可能會幫助你一點。 – Martijn
PHP不關心你的'htaccess'配置,直接聯繫文件系統,除非你想從另一臺服務器上獲取文件。 – h2ooooooo
@ h2ooooooo如果我包含圖片,用戶需要爲我的受保護目錄輸入用戶名和密碼。所以PHP。不關心我的htaccess,還是我想念你的觀點? – Adam