防止DoS和洪水

时间:2017-11-16 06:16:54

标签: couchdb

这需要一点背景,所以请耐心等待。

假设您在CouchDB上构建了一个功能类似于IRC(或Slack)的聊天应用程序。有一个服务器和一些客户端。但在这种情况下,服务器和客户端都有一个CouchDB数据库,它们都是双向复制的 - 客户端到服务器,服务器到其他客户端(hub-and-spoke样式) 。客户端通过写入本地实例来发送消息,然后本地实例复制到服务器并传送给其他客户端。

有没有办法(验证功能?)阻止恶意客户插入十亿条记录并将这些更改复制到服务器和其他客户端?或者,您是否可以为不受信任的客户端写入对在其他任何位置复制的CouchDB实例的访问权限?

相关:

1 个答案:

答案 0 :(得分:0)

对于一个相当简单的防御agaist洪水,我使用以下工作流程:

  1. 只允许通过更新功能进行所有公共写访问
  2. 每个文档插入/更新都会生成一个唯一的哈希,包括req.peer字段(用于IP地址)和ISO时间戳,其中我切断了最终部分。例如,我可能有2017-11-24T14:14因为它们键入唯一字符串,因此确保每分钟生成一个唯一键
  3. 计算每个写入请求的哈希值,确保它是唯一的,并且您将确定给定的IP只允许每分钟写一次。
  4. 这种技术适用于来自一组给定IP的小洪水。对于更协调的攻击,可能需要变异(甚至完全不同的东西)。