Практичний посібник з безпекового Middleware в Django

pic

Практичний посібник з безпеки Middleware у Django

У Django, Middleware — це потужний інструмент, який знаходиться між обробкою запиту та відповіді вашого додатку. Він дозволяє розробникам реалізовувати різноманітні функціональності, включаючи заходи безпеки, на рівні всього проекту. У цьому посібнику ми розглянемо безпеку Middleware у Django, його практичні застосування та приклади, щоб допомогти забезпечити ваш веб-додаток.

Що таке Middleware у Django?

У фреймворку Django Middleware — це набір хуків, які інтегруються в процес обробки запиту/відповіді. Кожен компонент middleware відповідає за виконання певної функції. Він може:

  • Модифікувати запит до того, як він потрапить до виду.
  • Модифікувати відповідь перед тим, як вона буде надіслана клієнту.
  • Обробляти виключення та виконувати додаткові завдання.

Middleware Django визначається як список у налаштуванні MIDDLEWARE у вашому проекті Django.

MIDDLEWARE = [  
 'django.middleware.security.SecurityMiddleware',  
 'django.contrib.sessions.middleware.SessionMiddleware',  
 'django.middleware.common.CommonMiddleware',  
 'django.middleware.csrf.CsrfViewMiddleware',  
 'django.contrib.auth.middleware.AuthenticationMiddleware',  
 'django.contrib.messages.middleware.MessageMiddleware',  
 'django.middleware.clickjacking.XFrameOptionsMiddleware',  
]

Безпека Middleware у Django

Django включає кілька компонентів middleware, призначених для підвищення безпеки вашого додатку. Ось кілька ключових компонентів middleware:

  1. SecurityMiddleware
  2. CSRF Middleware
  3. XFrameOptionsMiddleware

Розглянемо їх детальніше на практичних прикладах.

1. SecurityMiddleware

SecurityMiddleware додає кілька заголовків безпеки до відповідей для захисту від загальних веб-уразливостей.

Особливості

  • HTTP Strict Transport Security (HSTS): Забезпечує зв'язок через HTTPS.
  • Content Security Policy (CSP): Керує ресурсами, які браузер може завантажувати.
  • X-Content-Type-Options: Запобігає MIME sniffing.

Налаштування

Додайте SecurityMiddleware до вашого списку MIDDLEWARE та налаштуйте такі параметри в settings.py:

SECURE_HSTS_SECONDS = 31536000 # Включити HSTS на 1 рік  
SECURE_HSTS_INCLUDE_SUBDOMAINS = True # Застосувати HSTS до піддоменів  
SECURE_HSTS_PRELOAD = True # Пре-завантажити HSTS  
SECURE_SSL_REDIRECT = True # Перенаправити HTTP на HTTPS  
SECURE_BROWSER_XSS_FILTER = True # Включити фільтр XSS у підтримуваних браузерах  
SECURE_CONTENT_TYPE_NOSNIFF = True # Запобігти MIME sniffing

Приклад

# settings.py  
MIDDLEWARE = [  
 'django.middleware.security.SecurityMiddleware',  
 ...  
]  

SECURE_HSTS_SECONDS = 3600 # Встановити тривалість HSTS  
SECURE_SSL_REDIRECT = True # Перенаправити всі HTTP запити на HTTPS

З цими налаштуваннями ваш додаток перенаправить всі HTTP запити на HTTPS та додасть заголовки HSTS для забезпечення безпечних з'єднань.

2. CSRF Middleware

CSRF Middleware допомагає захистити ваш додаток від атак Cross-Site Request Forgery, вимагаючи валідний токен у формах.

Налаштування

Middleware увімкнено за замовчуванням. Ви повинні переконатися, що CsrfViewMiddleware включений у список MIDDLEWARE.

Приклад

У ваших видах використовуйте декоратори csrf_protect або @csrf_exempt залежно від потреби.

from django.views.decorators.csrf import csrf_protect, csrf_exempt  
from django.http import JsonResponse  

@csrf_protect  
def secure_view(request):  
 return JsonResponse({'message': 'CSRF токен є дійсним!'})  

@csrf_exempt  
def unprotected_view(request):  
 return JsonResponse({'message': 'Цей вигляд не захищений від CSRF.'})

Щоб включити токен CSRF у формах, використовуйте шаблонний тег {% csrf_token %}.


 {% csrf_token %}  

 Надіслати  


## XFrameOptionsMiddleware

`XFrameOptionsMiddleware` захищає ваш додаток від атак clickjacking, встановлюючи заголовок `X-Frame-Options`.

### Налаштування

За замовчуванням цей middleware увімкнено. Ви можете налаштувати його за допомогою параметра `X_FRAME_OPTIONS`:

XFRAMEOPTIONS = 'DENY' # Запобігає вбудовуванню сайту в iframe
```

Приклад

Щоб дозволити вбудовування у конкретних випадках, переопишіть стандартну поведінку в вигляді:

from django.views.decorators.clickjacking import xframe_options_exempt  

@xframe_options_exempt  
def embed_view(request):  
 return JsonResponse({'message': 'Цей вигляд можна вбудовувати в iframe.'})

Створення власного Middleware для безпеки

Ви також можете створювати власний middleware для реалізації додаткових заходів безпеки.

Приклад: Middleware для білого списку IP

from django.http import HttpResponseForbidden  

class IPWhitelistMiddleware:  
 ALLOWED_IPS = ['127.0.0.1', '192.168.1.1']  

 def __init__(self, get_response):  
 self.get_response = get_response  

 def __call__(self, request):  
 ip = request.META.get('REMOTE_ADDR')  
 if ip not in self.ALLOWED_IPS:  
 return HttpResponseForbidden('Доступ заборонено')  
 return self.get_response(request)

Додайте цей middleware до списку MIDDLEWARE:

MIDDLEWARE = [  
 'path.to.IPWhitelistMiddleware',  
 ...  
]

Цей middleware заблокує всі запити, окрім тих, що надходять з дозволених IP-адрес.

Тестування Security Middleware

Щоб перевірити безпекові заголовки:

  1. Запустіть сервер Django.
  2. Відкрийте інструменти розробника в браузері.
  3. Перейдіть на вкладку "Network" та перевірте заголовки відповіді.

Ви повинні побачити такі заголовки, як Strict-Transport-Security, X-Frame-Options та X-Content-Type-Options, додані до ваших відповідей.

Висновок

Security middleware у Django надає потужні інструменти для захисту вашого додатку від поширених загроз безпеки. Правильно налаштувавши SecurityMiddleware, CSRF Middleware та XFrameOptionsMiddleware, ви значно підвищите безпеку вашого додатку. Додатково, створення власного middleware дозволяє реалізувати специфічні заходи безпеки для вашого проекту.

Використовуйте цей посібник, щоб забезпечити ваші Django-додатки та створити більш безпечний досвід для користувачів.

Дякую за прочитане. Якщо ви помітили помилки або маєте кращі способи виконання цього, дайте знати в коментарях нижче.

Якщо вам сподобалася стаття, натисніть кнопку 👏, щоб інші могли знайти її корисною. Ви також можете підписатися на мене на

GitHub | daily.dev | LinkedIn | YouTube

Перекладено з: Practical Guide to Security Middleware in Django

Leave a Reply

Your email address will not be published. Required fields are marked *