Django 4.2.6发行说明

October 4, 2023

Django 4.2.6修复了一个严重程度为“中等”的安全问题和4.2.5中的几个错误。

CVE-2023-43665:中的拒绝服务可能性 django.utils.text.Truncator

在修复之后 CVE-2019-14232 的实现中使用的正则表达式 django.utils.text.Truncator %s chars()words() 方法(与 html=True )进行了修订和改进。但是,这些正则表达式仍然表现出线性回溯复杂性,因此,当给定一个非常长的、可能格式错误的HTML输入时,计算仍然会很慢,从而导致潜在的拒绝服务漏洞。

这个 chars()words() 方法用于实现 truncatechars_htmltruncatewords_html 模板过滤器,因此也很容易受到攻击。

由处理的输入 Truncator 在HTML模式下运行时,被限制为前500万个字符,以避免潜在的性能和内存问题。

补补

  • 修复了Django 4.2.5中的一个回归,其中覆盖了过时的 DEFAULT_FILE_STORAGESTATICFILES_STORAGE 测试中的设置导致了主要 STORAGES 变异,变异 (#34821 )。

  • 修复了Django 4.2中导致不必要的基于字符串的字段强制转换的回归 (CharFieldEmailFieldTextFieldCICharFieldCIEmailField ,以及 CITextField )与 __isnull 在PostgreSQL上查找。因此,使用 __isnull 查询规划器不会使用在Django 4.2之前创建的表达式或条件,从而导致性能回归 (#34840 )。

    您可能需要使用Django 4.2到4.2.5重新创建在数据库中创建的此类索引,因为它们包含不必要的内容 ::text 选角。使用此查询查找候选索引:

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