當用戶上傳圖像時,我將它保存到htdocs目錄中的圖像文件夾中。所以任何沒有登錄網站的用戶都可以輸入url/images /「name」來獲得它。什麼是防止這種情況的最好方法。因爲瀏覽只需要用戶直接在地址欄中輸入圖像的位置即可。 我正在考慮在檢查會話詳細信息後使用腳本從目錄下載每個圖像文件。你認爲如果可以的話,你會給我一個劇本嗎? 我不想使用數據庫。我認爲這會很慢。或者如果這是更好的方法讓我知道。php,圖像下載
THnks
當用戶上傳圖像時,我將它保存到htdocs目錄中的圖像文件夾中。所以任何沒有登錄網站的用戶都可以輸入url/images /「name」來獲得它。什麼是防止這種情況的最好方法。因爲瀏覽只需要用戶直接在地址欄中輸入圖像的位置即可。 我正在考慮在檢查會話詳細信息後使用腳本從目錄下載每個圖像文件。你認爲如果可以的話,你會給我一個劇本嗎? 我不想使用數據庫。我認爲這會很慢。或者如果這是更好的方法讓我知道。php,圖像下載
THnks
你可以把它的htdocs /目錄之外,和mod_rewrite的了images/dir到image.php或其他東西。 ?所以,網址/圖片/ test.jpg放在將轉化image.php路徑= test.jpg放在
image.php可能是這個樣子:
<?php
if($loggedin) {
header("Content-Type: image/jpeg");
echo file_get_contents("../images/".$_GET["path"]);
}
?>
不要忘了淨化輸入!您不希望用戶訪問任意文件。
是的,你可以有一個image.php文件只是增加了用戶ID在結束並顯示圖像。它其實沒有太多的代碼。
一個示例是在readfile()文檔中。但是下載圖像,您可以跳過附件標題並使用內容類型標題。
你可以保存圖像的位置在數據庫中,這樣,它不是慢..因爲我不建議在數據庫中存儲純圖像數據
如果不使用驗證庫,我會用$ _SESSION來跟蹤用戶是否登錄,但也創造了一個指紋只是爲了使其更難以劫持會話:
$ _SESSION['loggedIn'] = 1;
是一種不好的方法,因爲我可以通過?PHPSESSID = 933883 & loggedIn = 1並基本上欺騙應用程序。
$_SESSION['userid'] = 100;
$_SESSION['fingerprint'] = jskdskjdjdk48924829dkshjdkshdjkhsdjsd;
'指紋'是一些MD5加密字符串與鹽,例如。用戶名+密碼+「你想要的任何字符串」,只有你知道。您可以在登錄時創建指紋,並具有驗證存儲在關鍵代碼周圍會話中的指紋的功能。這是一個基本的例子,當您更熟悉PHP時,您可以使用許多PHP框架(如CakePHP)中存在的更好的驗證模塊。
當它們被登錄,在readimg.php檢查的cookie
則輸入用於readimg.php設置cookie
然後?I = img.png
具有readimg.php只檢查圖像
特定的文件夾這就是我在這裏做什麼:
http://numetrocontent.co.za/basic_movie_info.php?movieid=0412
您看到的圖像是存儲在服務器上的文件的低分辨率版本,您無法看到。如果你已經登錄,你可以點擊圖片下載原始文件。如果你不是,你不能。但是,您可以爲渲染設置任意分辨率,但這是可選的。
而不是使用echo file_get_contents(...)
我建議使用fpassthru以避免發生大文件時可能發生的「內存不足」錯誤。
因此,當我寫我的PHP腳本來顯示一個人的圖片只是把
和使用mod_rewrite我把我把
轉換爲image.php?= picturename.jpg。做對了。我很抱歉對於愚蠢的問題。怎麼樣對輸入進行清潔... –
coool
2009-05-03 18:08:06