2

我正在用 Python 编写一个程序,它将充当服务器并接受来自客户端的数据,对数据量施加硬性限制是个好主意,如果是,为什么?

更多信息:因此,某些聊天程序限制了每次发送(即每次用户按下发送)可以发送的文本量,所以问题归结为是否有正当理由,如果是,那是什么?

4

3 回答 3

2

您很可能已经看到了防止“额外”传入数据的代码。这通常是由于缓冲区溢出的可能性,其中复制到内存中的额外数据超出了预先分配的数组并用攻击者代码覆盖了可执行代码。用 C 等语言编写的代码通常会进行大量长度检查以防止此类攻击。get 和 strcpy 等函数被替换为更安全的对应函数,如 fgets 和 strncpy,它们有一个长度参数来防止缓冲区溢出。

如果你使用像 Python 这样的动态语言,你的数组会调整大小,这样它们就不会溢出和破坏其他内存,但你仍然必须小心清理外部数据。

由于数据库字段大小等原因,聊天程序可能会限制消息的大小。如果 80% 的传入消息是 40 个字符或更少,90% 是 60 个字符或更少,98% 是 80 个字符或更少,为什么让你的消息文本字段允许每条消息 10k 个字符?

于 2008-10-15T07:17:11.187 回答
1

你的问题到底是什么?

当您在套接字上接收时,会立即返回套接字缓冲区中的当前可用数据。如果您给接收(或读取,我猜)一个巨大的缓冲区大小,例如 40000,它可能永远不会一次返回那么多数据。如果你给它一个很小的缓冲区大小,比如 100,那么它会立即返回它拥有的 100 个字节,并且仍然有更多可用的字节。无论哪种方式,您都不会限制客户端向您发送的数据量。

于 2008-10-15T05:00:04.523 回答
0

我不知道您的实际应用程序是什么,但是,对客户端可以发送的数据总量设置硬性限制可能有助于减少您遭受拒绝服务攻击的风险,例如客户端连接并发送 100MB 的数据可能会无法接受地加载您的应用程序。

但这实际上取决于您的应用程序是什么。您是在追求每条线路的限制还是每个连接的总限制或什么?

于 2008-10-16T01:10:57.573 回答