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