【发布时间】:2016-11-30 12:52:32
【问题描述】:
如果满足某个条件(登录尝试次数过多),我想阻止对给定 IP 地址的所有进一步请求。为了实现这一点,我目前正在查看 Node.js 和 express 文档,但我找不到合适的方法来中止请求。到目前为止,我所能想到的只是一个普通的res.status(403).end(),然而,它会在 HTTP 级别发送一个完整的答案。
因此,我想中止 TCP 级别的连接。我的想法是这样的:
server.on('connection', (sock) => { if (shouldBlock(...) sock.destroy(); });
这会按我想要的方式工作,还是这是不好的做法?它似乎有效,但我很好奇这是否会对其他(非阻塞)请求造成任何泄漏、问题或副作用?
【问题讨论】:
-
您可以在您的用户架构中拥有 ip_address、login_attempts、status。一旦特定 ip 的 login_attempts 超过您设置的值,只需将状态设为“已阻止”,然后每当用户尝试登录时,您只需向他发送带有标题的正确消息。这会不会解决您的问题而不是中止连接,因为如果流量更多,中止连接可能会很昂贵。
标签: node.js express connection terminate abort