我正在使用一个简单的聊天服务器,并且正在尝试保护它的安全。我让 Node.js 监听一个端口,接受来自所有客户端的所有输入并将其返回给所有客户端。我可以通过这样做来淹没服务器
cat /dev/random | chat
其中聊天是客户端应用程序。它淹没了服务器和每个客户端。我知道我可以测试输入是否长于某个给定的数量,例如 500 个字符,但它正在淹没服务器(检查需要在服务器上进行,而不是在客户端上进行,因为我也可以远程登录)。
我想我需要检查以确保输入中没有控制字符,但仍然允许所有随机 UNICODE。我该怎么做?哪些角色可能是坏的?
编辑:我添加了一些速率限制,这样它们就不能淹没服务器。我添加逻辑来测试平均发布时间是否低于某个阈值,如果是则关闭其连接。但我不知道如何做到这一点:)
最佳答案
/dev/random
或控制字符不是问题——有人仍然可以使用随机的纯文本流向您的服务器发送垃圾邮件。更好的方法是对您的客户端进行速率限制,以便您在某个时间间隔内仅接受一定数量的数据。例如,如果客户端在一秒内发送超过 500 个字节,您可以将该客户端静音 5 秒。
关于node.js - 如何测试输入是否不是/dev/random?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049683/