3.0.3 Примечания к выпуску

Channels 3.0.3 исправляет проблему безопасности в Channels 3.0.2

CVE-2020-35681: Потенциальная утечка идентификаторов сеанса при использовании устаревшего AsgiHandler

Устаревший класс channels.http.AsgiHandler, используемый для обработки запросов типа HTTP в среде ASGI до Django 3.0, в Channels 3.0 неправильно разделял диапазоны запросов. Во многих случаях это приводило к сбою, но при правильной синхронизации ответы могли быть отправлены не тому клиенту, что приводило к потенциальной утечке идентификаторов сессий и других конфиденциальных данных.

Эта проблема затрагивает Channels 3.0.x до 3.0.3 и устранена в Channels 3.0.3.

Пользователи ProtocolTypeRouter, не указавшие явно обработчик для ключа 'http', или те, кто явно использует channels.http.AsgiHandler, вероятно, поддерживающие Django v2.2, затронуты этой проблемой и должны немедленно обновиться.

Обратите внимание, что неуказанный обработчик для клавиши 'http' и использование channels.http.AsgiHandler устарели и будут вызывать предупреждение, начиная с Channels v3.0.0

Эта проблема затрагивает только устаревший класс, предоставляемый каналами, а не аналогичный класс ASGIHandler, доступный в Django 3.0. Рекомендуется обновиться до Django 3.0+ и использовать предоставленный Django ASGIHandler.

Упрощенный сценарий asgi.py будет выглядеть следующим образом:

import os

from django.conf.urls import url
from django.core.asgi import get_asgi_application

# Fetch Django ASGI application early to ensure AppRegistry is populated
# before importing consumers and AuthMiddlewareStack that may import ORM
# models.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django_asgi_app = get_asgi_application()

# Import other Channels classes and consumers here.
from channels.routing import ProtocolTypeRouter, URLRouter

application = ProtocolTypeRouter({
    # Explicitly set 'http' key using Django's ASGI application.
    "http": django_asgi_app,
    ),
})

Более полный пример смотрите в Развертывание.

Вернуться на верх