接收套接字大小限制好吗?

时间:2008-10-15 04:55:34

标签: python sockets

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

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

3 个答案:

答案 0 :(得分:2)

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

如果您使用像Python这样的动态语言,那么您的数组会调整大小以使它们不会溢出并破坏其他内存,但您仍需要小心清理外部数据。

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

答案 1 :(得分:1)

你的问题到底是什么?

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

答案 2 :(得分:0)

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

但这实际上取决于你的申请是什么。您是按照每行限制还是每个连接限制的总数或者是什么?