我一直在编写一种 Web 服务器(没有任何 SQL 数据库,解释语言)。所以,一个相当严肃的人看了看它,他说:“让它崩溃没有问题……只需通过 DDoSing……”。我同意他的观点,但是……
这就是我想问的:哪一部分保护应该直接写在服务器代码中。我的意思是,我不会尝试编写网络过滤器(有一些专门的程序,由专业的安全专家编写,如 netfilter/iptables 等),我只是尝试编写受到良好保护的 Web 服务器。
那么,哪些类型的网络攻击防护应该位于网络服务器内部,哪些类型不应该位于网络服务器内部?
(我应该做的第一件事是缓冲区过载保护......这就是我现在能想到的全部......)
答案1
嗯,存在缓冲区溢出。如果您使用的是编译语言和低级数据类型,这总是有问题的。您需要为客户端做最坏的打算。如果有人向您发送 1MB 的 URL,而您只分配了 2k(并且无法检查长度),那就是溢出。狡猾的人可以用可执行代码覆盖您的堆栈并“拥有”您的服务器。
存在 DDoS 攻击。连接速率限制将使盒子保持活动状态,但它仍然会显示为已关闭。如果您没有足够快地清理陈旧的连接,那么连接肯定会耗尽。如果您没有主动检查可用的套接字数量,并假设“无穷大”是可用的,那将是一个问题。至少需要检查错误并进行适当处理。
基本资源意识...我是否有足够的 RAM、套接字句柄等来打开此连接?很多很多事情,但如果您谨慎地编写代码,那么您就不会遇到太多问题。此外,请注意您是否为每个新连接生成一个新线程。它们也不是无限的。