我正在开发一个基于HTML5 Websocket的应用程序,它应该实时通知用户不同的事件。客户端连接到服务器,发送带有一些安全令牌的握手,服务器检查安全令牌是否有效并将客户端添加到活动客户端列表中。现在,他会收到有关特殊事件的通知。
由于 multiplice 应用程序有不同的通知,因此有一个通知核心,用于处理连接的基础知识以及身份验证,因为这始终是相同的。可以从应用程序访问核心,通过它们可以与服务器通信。
这是否有意义,还是有必要在核心中插入一些限制?例如,跟踪用户 ip,如果用户在过去 10 秒内与服务器的连接超过 3 次,则拒绝连接以防止洪水攻击。
在我看来,如果有人试图通过按住 F5 密钥或使用一些僵尸网络来使我的服务崩溃,只要他没有向我的服务器发送太多流量以至于我的连接无法处理那么多,它就可以减少服务器负载。
如果这很重要,我正在使用 socket.io。
如果您试图保护您的应用程序免受恶意攻击,则需要考虑很多很多事情,并且必须确定这些事情的优先级,并将开发时间花在可能对您的服务影响最大的事情上。 我认为创建多个 webSocket 连接在优先级列表中会非常低,远远落后于服务中实际更改状态的操作,例如导致写入数据库等...... 现代服务器可以轻松容纳数万个套接字,并且只需向大量套接字发送相同的通知,服务器负载成本很小。
此外,使用 IP 地址作为限制对象可能会导致问题,因为较大的组织可能会使用 NAT 在多个用户之间共享单个 IP 地址以进行出站连接。 如果要按用户限制,最好按用户 ID(每个用户唯一登录时使用的东西)进行限制。