让 Python 社区活跃起来的修复

让 Python 社区活跃起来的修复

在 Python 的整数字符串转换中发现的漏洞的“修复”一直是 Python 社区讨论的主题。

Photo by 阿图里·贾利 on 不飞溅

如您所知,整数数据类型在编程语言中通常取值有限。例如,在 C 语言中,此限制为 ±2³¹-1,如果超过此值 整数溢出 发生。但是 Python 中没有这样的限制,你的内存可以容纳的数字越多,可以容纳的数字就越大。 Python 将在后台进行必要的翻译,并向您展示结果有多大。

例如,让我们取 10000 的阶乘并将结果打印在屏幕上:

Python‘da 10000 sayısının faktöriyeli

正如你所看到的,Python 可以很容易地给出 10000 的阶乘,这在普通的编程语言中会给出错误,并带有一个简短的代码片段。但是当我们在 Python 3.10.7 版本中尝试同样的过程时,会遇到如下错误:

Hata: integer-string dönüşümünde 4300 basamak limiti aşıldı

错误报告告诉我们,我们已经超过了 4300 位数的限制。所以我们将不再能够打印大于 4300 的数字。

但首先,这里需要做一个小说明:我们仍然可以对大数进行操作并将这些数字存储在变量中,但我们的阶乘结果是 打印 函数,这个整数值会自动转换为字符串,只有这个转换有这样的约束。

那么为什么会有这样的限制呢?

该问题于 2020 年 5 月 11 日首次报告。 米西迪曲 按用户 Redhat 的漏洞页面 中报道。报告称,大数字的 int-str 转换潜力 存在拒绝服务攻击的风险。然而,2 年没有对这个问题进行干预。

İlgili Redhat CVE sayfası

后来这个问题于 2022 年 8 月 8 日发布在 cpython GitHub 仓库中 全球定位系统 开发商开的 #95778 在引用的问题中提到了它。打开的issue原文如下:

İlgili GitHub sayfası

然后,在 1 个月内,通过为 int-str 转换设置一个限制值来“解决”这个问题。

究竟是什么问题?

在 Python 中,int-str 转换以 O(n²) 时间复杂度完成。因此,数字越大,该过程平方它所需的时间就越多。随着数量的增长,处理时间也呈指数增长。

Big-O zaman karmaşıklığı çizelgesi

有问题的问题尤其是在后台运行 Python 的网站和 API 目的是。 消毒 在使用未声明的输入进行 int-str 转换的情况下,攻击者可以通过提供大量输入来减慢甚至冻结系统。

那么为什么 Python 社区不欢迎这种变化呢?

尽管 Python 开发者似乎通过限制这种转换来防止漏洞,但他们提出的解决方案在 Python 社区引起了很大的反响。

让我们来看看这种反应的主要原因。

向后兼容性

首先,这是一个 突破性变化 归类为。这意味着所做的更改 向下兼容 不是,也就是说,它会被破坏,直到在他们的应用程序中已经有这个 int-str 转换的人和机构更新他们的代码。这意味着很多没有维护的网站会自动崩溃。

语义版本控制 根据 ,错误修复,即补丁,应该始终向后兼容。但是 Python 开发者不遵循这个规则,让很多开发者陷入困境。

透明度

另一个问题是这个修复不是透明地完成的。因为 Python 是一种开源编程语言,所以更改和改进总是在大型社区的努力下进行的。但是很多开发者都措手不及,因为 Python 开发者在没有咨询社区的情况下突然发布了这个更新。此外,Python 的官方网站上也没有以任何方式记录此更改。 安全更新 它以“”为题发表在一篇小论文中。

Python’un resmi sitesinde bulunan bildiri

问题描述

社区的主要批评是所讨论的问题是否真的是一个问题。让我想起我之前说的那句话:

消毒 未送达 输入 在 int-str 转换的情况下,攻击者可以通过提供一个非常大的数字作为输入来减慢甚至冻结系统。

我们这里的关键词是“未经处理的输入”。用户未清理输入 HTTP 请求 它试图将来自 的值作为参数直接发送到函数,而不受任何控制。尽管清理是一个可以解决大多数基本攻击的简单过程,但许多 Web 开发人员跳过了这个过程。

总之,根据 Python 社区的说法,这个问题实际上是不负责任的 Web 开发人员的疏忽,而不是 Python 语言需要解决的问题。

替代解决方案

根据社区的说法,与其将这种转换限制为一种解决方案,不如采用不同的向后兼容和更有效的方法。

例如,用户解释了为什么在这种转换中使用了 O(n²) 等无效时间复杂度的算法,甚至通过输入谷歌也可以找到更快的算法。这样,一个问题 安全漏洞 而不是一个 效率低下 他说这将变成一个问题:

另一位用户表示,这个解决方案是 Python 的基本理念。 Python之禅 他认为这违反了:

正如我们所见,想到的第一个解决方案并不总是最好的解决方案。由于是当前问题,讨论仍在继续,尚未达成共识。时间会证明 Python 开发人员是否会倾听社区的声音并撤消此更改。

因此,我们已经到了文章的结尾。所以,对于这个你有什么想法?如何以更好的方式处理这个问题?你可以在评论中表达你的想法。

感谢阅读,很快再见!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/39074/57182412

posted @ 2022-09-24 12:58  哈哈哈来了啊啊啊  阅读(60)  评论(0编辑  收藏  举报