首页 > 解决方案 > Django 媒体文件(图像)安全性

问题描述

我正在 Django 中进行图像处理。我正在使用普通图像模型存储方法。

所以,我的模型是这样的,

class PictureModel(models.Model):
    def user_directory_path(instance, filename):
        return 'images/{0}/{1}'.format(instance.user.username, filename)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=user_directory_path)

view.py 有点像,

@login_required(login_url='/accounts/login/')
def myMethod(request):
    user = request.user
    myImage = PictureModel.objects.get(user=request.user)
    return render(request, 'main/myPage.html', {'myImage': myImage})

我有一个媒体根设置,

MEDIA_ROOT =  os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

url.py 设置如下,

url(r'^static/(?P<path>.*)$', django.views.static.serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': settings.DEBUG})

现在在正常流程中,图像上传和获取按预期工作。但问题在于获取媒体文件时的用户验证/身份验证。

假设,我通过 URL 获取图像,

media/images/user_1/mypic.jpg

但是整个媒体文件夹在没有任何验证的情况下就暴露了,我可以访问,

media/images/user_2/mypic.jpg

也可以通过浏览器。我在网上对此进行了搜索,发现有一些随机的第三方库可用,但它们并不那么标准/流行。任何人都可以建议最佳实践和库来处理这种情况。

标签: pythonpython-3.xdjangodjango-modelsfile-upload

解决方案


在您的模板中添加它可以解决问题

<img style="height:200px; width:200px; border-radius:50%; margin:auto" src="{{ appname.function_name.image.url }}" alt="Photo">

推荐阅读