我有一個表單,允許用戶使用的文件類型的輸入選擇一個文件:我需要清理的輸入文件標記創建ruby文件路徑
<input type="file" name="file" id="file" style="display: none;" multiple>
當表單發送它張貼這些參數:
"file"=>
#<ActionDispatch::Http::UploadedFile:0x00000003e44cd0
@content_type="application/octet-stream",
@headers="Content-Disposition: form-data; name=\"file\"; filename=\"invalid-test\"\r\nContent-Type: application/octet-stream\r\n",
@original_filename="invalid-test",
@tempfile=#<File:/tmp/RackMultipart20171006-26097-17004vm>>
我的程序然後複製臨時文件並在應用程序中的文件夾中創建一個副本。複製的文件被格式化以供其他進程使用。這個處理一切正常。這樣做的代碼如下
# The @myfile filename (excluding the path) has been sanitised earlier in the process.
temporary_file = params[:file].tempfile.path
input_file = Rails.root.to_s + "/some_path/" + @myfile.filename
FileUtils.cp temporary_file, input_file
已經針對它運行的舉報,其中多達我已經使用了@ tempfile.path作爲安全風險的所有地方的應用司閘員掃描。我已經閱讀了關於在導軌導向的風險:
http://guides.rubyonrails.org/security.html#redirection-and-files
哪個說的文件名應進行消毒。根據指南,我正在使用@original_filename上的sanitiser來確保它是安全的。我認爲我不需要爲這條道路做任何事情。文件params不指定路徑,只指定文件名或路徑和文件名。我可以使用創建路徑和文件名
params[:file].tempfile.path - params[:file].tempfile.original_filename
使用計算加上清理過的文件名創建文件和路徑名稱。
我不相信這是一個問題,因爲應用程序只是簡單地獲取臨時文件並複製副本。所有未來的處理都在該文件上完成。它使用的文件名將被清理,路徑由應用程序設置以供將來處理。最糟糕的情況是我的流程複製了錯誤的文件。
簡而言之,我是否需要擔心試圖淨化路徑以及文件名?
感謝您澄清這一點和鏈接迭戈。我有點懷疑這將是一個沒有。 –