Django - медиафайлы - безопасность

Я создал приложение Django с видео файлами. Я использую Gunicorn & Nginx. Пользователь (не root), который запускает сервер django.

Я ограничил представления, чтобы только пользователи с правильными правами могли просматривать их. Это работает нормально.

Но при просмотре видео я могу получить url. (../media/videos/video.mp4) enter image description here

Теперь все, у кого есть этот файл-локация, могут посмотреть видео.

Теперь я немного запутался. Нужно ли мне использовать пакет типа django-sendfile2's? Или мне нужно изменить настройки моего сервера и ограничить доступ к папкам с медиафайлами?

Мне удалось защитить свои файлы с помощью пакета django-private-storage. django-sendfile2's также может подойти, но я нашел документацию менее толковой. Следуя инструкциям, я установил пакеты:

pip install django-private-storage

И добавил следующие строки в файл Settings.py:

INSTALLED_APPS += (
    'private_storage',
)
PRIVATE_STORAGE_ROOT = os.path.join(BASE_DIR, 'private-media')

в модели я добавил поле:

video = PrivateFileField(upload_to='videos/%Y/%m/%d', null=True)

В представлении я добавил:

from private_storage.views import PrivateStorageDetailView

class PlayJobVideo(PrivateStorageDetailView):
    model = Video
    model_file_field = "video"
    template_name = "index/play_video.html"

    def get_object(self):
        return Video.objects.get(id=self.kwargs['video_id'])
    
    def can_access_file(self, private_file):
        return True

И тогда я написал декоратор owner_only()

def owner-only():
    def decorators(view_func, *args, **kwargs):
        def wrapper_function(request, *args, **kwargs):

        try:
            if request.user:
                if video.user == request.user:
                    return view_func(request, *args, **kwargs)
                else:
                    return redirect('index:home')
        except:
            return redirect('index:home')
    return wrapper_function
return decorators

И я добавил этот декоратор в представление.

@method_decorator(owner_only(), name='dispatch')
class PlayVideo(PrivateStorageDetailView):
               ...
Вернуться на верх