最安全,最有效的方法从文件夹中检索和提供文件/图像?

时间:2013-07-02 16:01:32

标签: python django

假设我在名为/images/year/month/day的媒体目录中有文件夹。我想获取这些图像的图像名称和路径,并有一个页面提供目录中的所有图像。

然后我有另一个名为/files的文件夹,其中包含应用程序文件。相同的结构等。

文件的所有上传都记录为数据库的一部分。图像不是通过数据库保存的,因此我想从图像下的所有子目录中读取所有文件,可能包括年月日期信息。

做这样的事情是否安全?我将如何这样做?这样做我需要注意什么。

由于

1 个答案:

答案 0 :(得分:0)

是的,这样做是安全的,只要你做正确的逃避。您希望确保不允许在该根级媒体目录之外进行任何目录遍历,以便不会提供任何应用程序文件。

您可以通过简单的屏障检查来完成此操作:

dir_to_serve = os.path.abspath(dir_to_serve) # get full path
if not dir_to_serve.startswith(media_dir): # maybe settings.MEDIA_DIR here?
    return # don't ever serve this

# code to serve from path

在Django中,您只需将os.walk的结果列表传递给模板并循环播放即可。您可能希望过滤掉模板中不希望显示的某些文件类型或目录名称。