假设我在媒体目录中有一个名为/images/year/month/day
. 我想获取这些图像的图像名称和路径,并有一个页面提供目录中的所有图像。
然后我有另一个文件夹/files
,其中包含应用程序文件。相同的结构等。
文件的所有上传都被记录为数据库的一部分。图像不是通过数据库保存的,因此我想从图像下的所有子目录中读取所有文件,可能包括年月日期信息。
做这样的事情是否安全,我将如何去做?这样做时我需要寻找什么。
谢谢
是的,这样做是安全的,只要您进行适当的转义。您要确保不允许在该根级媒体目录之外进行任何目录遍历,这样您的应用程序文件就不会得到服务。
您可以通过简单的障碍检查来做到这一点:
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中的结果列表传递给您的模板并循环遍历它。您可能希望过滤掉模板中不希望显示的某些文件类型或目录名称。