- en
- Language: ru
- Documentation version: 3
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,
),
})
Более полный пример смотрите в Развертывание.