[英]How do I change the wordpress directory where user images are uploaded?
[英]How do I serve user uploaded images?
我正在構建一個小型Web應用程序,該應用程序將允許登錄的用戶上傳產品圖片。 我正在嘗試正確構建,並且在過去進行一些幼稚的實現后,決定將所有上傳的內容添加到我的公用文件夾中。
\app (public folder)
-\index.php
\includes
\config
\uploads
這樣一來,如果惡意用戶設法上傳了PHP文件,則服務器將無法訪問或為其提供服務。
話雖如此,我將如何在網頁上提供這些圖片? 做這個的最好方式是什么? 過去,我曾使用過一個getImage.php文件,該文件帶有一個ID參數(以及一些生成值的散列,以避免用戶只是猜測ID),看起來像“ getImage.php?id = 555&c = 44j54k3h5”。 服務器在DB(真實路徑)中獲取圖像信息並加載內容,重建標頭,然后發送圖像。
關於此方法是否有安全方面的考慮? 有沒有辦法使它更漂亮? 是否有一個htaccess重寫規則來查找/images/imagename.jpg並將其發送到我的getImage.php文件,這會增加安全漏洞? 任何有關最佳做法的建議將不勝感激。
查看該課程。 它將處理上傳,進行安全檢查並為您提供咖啡:)
您提供上載圖片的方法的安全性確實取決於許多其他因素。
我將使用Apache mod_alias引用webroot之上的目錄。 這樣,您仍然可以使用指向圖像的鏈接,而無需打開完整的root-root目錄進行曝光。
“更漂亮”的方法是使用.htaccess
重定向
RewriteEngine On
RewriteBase /
RewriteRule ^getImage/([0-9]+)/(.+)\.png$ getImage.php?id=$1&c=$2 [NC,L]
然后在getImage.php
if (isset($_GET['id']) && isset($_GET['c'])) {
// set headers
header("Content-Type: image/png");
// cache control
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822, strtotime("2 day")));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], true, 304);
exit;
}
/* do things */
imagepng($image_resource);
imagedestroy($image_resource);
}
else {
echo "bad request";
}
所以代替
site.com/getImage.php?id=555&c=44j54k3h5
你會用
site.com/getImage/555/44j54k3h5.png
使用這種方法不會增加任何安全風險或漏洞。 只需確保在查詢之前對get變量進行轉義即可避免注入攻擊。
如果您想保護自己免受惡意文件上傳的侵擾,則需要在提供服務之前先這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.