我正在为我的应用程序的每个用户创建一个couchdb数据库,其中应用程序被授予数据库管理员权限。这样做是为了使应用程序可以同步设计文档 - 但我不想让我的服务器暴露在任何风险之中。
用户在我的服务器上运行视图没有合理的理由(他们只使用服务器进行双向同步),因此要求过滤请求并不困难试图查看视图?
我是否还缺少其他安全风险或DoS攻击?
答案 0 :(得分:1)
对数据库具有读访问权限的每个用户都可以运行视图。这不是问题,因为视图索引构建一次并逐步更新。
但数据库管理员可以随心所欲地创建新视图。由于CouchDB使用超时(默认为5秒)限制执行,因此视图无法消耗大量CPU时间,但是它们可能会占用大量磁盘空间,尤其是如果从视图中发出完整的doc内容 - 这可能会使单个索引视图比整个数据库更大。
此外,数据库管理员可以运行数据库并查看索引压缩 - 这些操作对于磁盘IO(有时也用于CPU)非常繁重,尤其是对于大型数据库(100GiBs +)。如果在用户活动的最高点运行,这些任务可能会显着减慢(单个压缩可能不会,但多个 - 很容易)您的服务器性能。
如果您使用的是没有沙盒功能的自定义视图服务器(如Python,Erlang等),情况会变得更糟。事实上,他们将允许您的数据库管理员通过CouchDB在您的服务器上执行自定义代码。在这种情况下,丢失所有数据库并在服务器上查找远程shell只是可能性的冰山顶。
简历:不要将您不能信任的人分配给数据库管理员,您将是安全的。