---
title: "Django 4.2.6 版本发行说明"
version: 4.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/4.2/releases/4.2.6/
canonical: https://djangodocs.dev/zh-hans/4.2/releases/4.2.6/
---
# Django 4.2.6 版本发行说明

*2023 年 10 月 4 日*

Django 4.2.6 修复了一个"中等"严重性的安全问题，以及 4.2.5 版本中的几个错误。

## CVE-2023-43665: `django.utils.text.Truncator` 中的可能导致拒绝服务的漏洞

在修复了 [**CVE 2019-14232**](https://www.cve.org/CVERecord?id=CVE-2019-14232) 后，重新审查并改进了 `django.utils.text.Truncator` 的 `chars()` 和 `words()` 方法（使用 `html=True`）中使用的正则表达式。但是，这些正则表达式仍然表现出线性回溯复杂性，因此如果输入一个非常长且可能格式不正确的 HTML 输入，评估仍然会很慢，从而导致潜在的拒绝服务漏洞。

`chars()` 和 `words()` 方法用于实现 [`truncatechars_html`](/zh-hans/4.2/ref/templates/builtins/#std-templatefilter-truncatechars_html) 和 [`truncatewords_html`](/zh-hans/4.2/ref/templates/builtins/#std-templatefilter-truncatewords_html) 模板过滤器，因此这些模板过滤器也存在漏洞。

为了避免潜在的性能和内存问题，当以 HTML 模式运行时，`Truncator` 处理的输入已被限制为前五百万个字符。

## 漏洞修复

- 在 Django 4.2.5 中修复了一个回归问题，该问题导致在测试中覆盖已弃用的 `DEFAULT_FILE_STORAGE` 和 `STATICFILES_STORAGE` 设置会导致主要的 `STORAGES` 发生变化 ([#34821](https://code.djangoproject.com/ticket/34821))。
- 在 Django 4.2 中修复了一个回归问题，该问题导致在 PostgreSQL 上使用 `__isnull` 查找时，对于基于字符串的字段（`CharField`、`EmailField`、`TextField`、`CICharField`、`CIEmailField` 和 `CITextField`）进行不必要的强制转换。因此，Django 4.2 之前创建的使用 `__isnull` 表达式或条件的索引不会被查询规划器使用，导致性能下降 ([#34840](https://code.djangoproject.com/ticket/34840))。

  你可能需要重新创建在 Django 4.2 到 4.2.5 中创建的这种索引，因为它们包含不必要的 `::text` 转换。可以使用以下查询来找到候选的索引：

  ```sql
  SELECT indexname, indexdef
  FROM pg_indexes
  WHERE indexdef LIKE '%::text IS %NULL';
  ```
