# Django 6.0.7 documentation

# Django 4.2.6 版本发行说明

2023 年 10 月 4 日

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

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

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

`chars()` 和 `words()` 方法用于实现 `truncatechars_html` 和 `truncatewords_html` 模板过滤器，因此这些模板过滤器也存在漏洞。

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

## 漏洞修复

- 在 Django 4.2.5 中修复了一个回归问题，该问题导致在测试中覆盖已弃用的 `DEFAULT_FILE_STORAGE` 和 `STATICFILES_STORAGE` 设置会导致主要的 `STORAGES` 发生变化 (#34821)。

- 在 Django 4.2 中修复了一个回归问题，该问题导致在 PostgreSQL 上使用 `__isnull` 查找时，对于基于字符串的字段（`CharField`、`EmailField`、`TextField`、`CICharField`、`CIEmailField` 和 `CITextField`）进行不必要的强制转换。因此，Django 4.2 之前创建的使用 `__isnull` 表达式或条件的索引不会被查询规划器使用，导致性能下降 (#34840)。

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

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