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';