簡體   English   中英

使用用戶提供的名稱來安全地上傳和下載PHP文件

[英]Secure PHP file Up- and Download with user supplied names

我正在編程一個文件轉換器。 因此,用戶上載了一個文件,例如test.txt ,然后進行轉換,然后將下載鏈接發送回該用戶。 出於安全性考慮,我建議文件上傳后立即更改其名稱,如此處建議的那樣。

Instead create files and folders with randomly generated names like fg3754jk3h

問題開始於下載。 為了獲得更好的用戶體驗,我希望可下載文件的名稱與用戶提供的文件的名稱相同,而不是隨機字符串。 目前,我在Chrome中也遇到了錯誤:

<Filename> is an unusual download and may be harmful.    [translated]

我認為這也可能是加密文件名的結果。

所以我的問題是:將文件名改回原始名稱而又沒有任何安全問題的最佳方法是什么?還是我應該對文件名進行嚴格驗證? 並且這將擺脫顯示的錯誤消息嗎?

您可以在將文件返回給用戶時提供原始文件名。 (請參閱下載名稱與存儲名稱不同的文件,以了解幾種操作方法)

不使用原始名稱存儲文件的原則是避免惡意用戶試圖將一些腳本上載到他可以執行的服務器上。 您應該這樣做,但也應該將該文件放在Web服務器無法訪問的臨時目錄中。

例如:

  1. 您的Web服務器指向/var/www
  2. 收到上傳的文件后,將其存儲在/var/uploads而不是/var/www/uploads 這樣,用戶將永遠無法訪問該文件(至少可以從Web上訪問)
  3. 您將原始文件名保存在數據庫中
  4. 您仍然應該生成一個隨機的文件名,這樣可以避免文件名沖突(許多人將上傳他們的cute-cat.jpg圖像),保持文件擴展名沒有問題。 例如:kr3242sd93fdsh.jpg
  5. 您向用戶提供了一些終結點,以通過一些隨機字符串下載文件(我建議您避免使用與用於命名文件相同的隨機字符串): https : //youserver.com/download?id=uoqq41jsak
  6. 在下載端點上,您可以在Content-Dispositionfilename屬性中定義原始文件filename

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM