Django: защита определенных медиа от не авторизованных пользователей - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь защитить определенные файлы от внешних пользователей.Прочитав кучу постов и вопросов здесь, я нашел решение, которое не требует настройки параметров сервера, и, казалось, находилось в пределах моего технического уровня понимания.Но после всех этих исследований мое решение кажется слишком простым.Итак, я хотел приехать сюда и посмотреть, имеет ли это смысл, несколько ли он безопасен, и какие дыры мне не хватает.

Я загружаю файлы, которые меня интересуют, в папку с именем protectedв каталоге мультимедиа в этом примере.

Вот мой urls.py файл:

import re
from . import views
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth.decorators import login_required
from django.shortcuts import HttpResponseRedirect
from django.urls import path
from django.views.static import serve
from django.contrib.auth import views as auth_views

@login_required
def serve_protected_media(request, path, document_root=None, show_indexes=False):
    return serve(request, path, document_root, show_indexes)

def protected_serve(request, path, document_root=None, show_indexes=False):
    if re.match(r'^protected', path):
        return serve_protected_media(request, path, document_root, show_indexes)
    else:            
        return serve(request, path, document_root, show_indexes)

urlpatterns = [
    path('', views.index, name='site_index'),
    path('admin/', admin.site.urls),
    path('hr/', include('hr.urls')),
    path('accounts/login/', auth_views.login, name='login'),
    path('accounts/logout/', auth_views.logout, name='logout', kwargs={'next_page': '/'}),
] + static(settings.MEDIA_URL, protected_serve, document_root=settings.MEDIA_ROOT)

Это работает для меня с некоторым тестированием, но мой общий вопрос: это достойный подходдля защиты определенных файлов от внешнего мира вошедших в систему пользователей?

Редактировать: Кроме того, в настоящее время я не очень заинтересован в том, чтобы обслуживать файлы Django, поскольку эти файлы не очень большие,и это приложение не нуждается в масштабировании (только для внутреннего использования HR).

...