作为休息服务的CouchDB访问似乎不安全.任何人都可以访问数据库并在文档暴露后删除/添加文档.
保护CouchDB有哪些策略?
自2009年以来发生了很多变化,所以我将在这里提出答案.这个答案来自维基上的这个页面.
CouchDB有一个_users
数据库,用于定义用户.这是维基的直接主旨:
匿名用户只能创建新文档.
经过身份验证的用户只能更新自己的文档.
服务器或数据库管理员可以访问和更新所有文档.
只有服务器或数据库管理员才能创建设计文档和访问视图以及_all_docs和_changes.
然后,对于任何给定的数据库,您可以按名称或角色定义权限.身份验证的实现方式是通过_session
数据库.向_session DB发送有效的用户名和密码将返回一个身份验证cookie.这是CouchDB身份验证的几个选项之一.还有一些选择:
这个选项有点旧了几个月前的几个月,我们今天的1.2.但它仍然很好地概述了.
而这一次从"权威指南"
此外,根据您可能使用的托管服务,您可以选择限制通过SSL访问沙发.
在Node,Couch和各种其他有效扩展水平扩展的技术(添加更多服务器)之间,开发人员有一种有趣的压力或激励措施,可以使应用程序以这种方式扩展.但这是一个单独的问题.
在CouchDB配置中,目前安全方面真正起作用的唯一事情就是这样.
[couch_httpd_auth] require_valid_user=true [admins] admin = sekrit
这将基本的HTTP身份验证放在所有CouchDB上.即使这在客户端库中也不是很好.对于python,例如,你需要一个打补丁的库.
第二种方法是将代理放在CouchDB前面,让代理进行身份验证和授权工作.由于CouchDB的RESTful设计,这非常简单.
到目前为止,所有其他方法都必须考虑高度实验性.
这可能与您原来的问题略有不同.如果您的couchdb只是一个完整服务器应用程序的后端存储,您可以为要使用的服务器应用程序创建一个特殊帐户,并需要这些凭据才能访问couchdb.
另一方面,人们直接通过javascript客户端点击的纯沙发应用程序需要非常小心才能保证安全.
使用重写不是可选的.您需要一个vhosts配置,通过重写强制请求您的域.
将路由*/_ all_docs和/*/_ design/*重写为404页面.否则,用户可以列出每个文档或获取整个应用程序.
如果不允许用户查看文档,则将通用对象访问(即/ dbname /:id)重写为可以拒绝访问的节目.遗憾的是,没有基于文档的附件访问控制的等效解决方法.
我们使用haproxy来过滤_users上的GET请求.来自外部的人没有合法的理由来获取用户记录或列出所有用户.我们希望用户能够注册,因此我们需要写访问权限.目前,沙发不能阻止对数据库的读访问,同时允许写入.这是一个错误.过滤haproxy之类的东西是我们目前最好的解决方法.
使用您自己的数据库来保留除_users提供的信息之外的联系信息.这允许更多地控制访问.
validate_doc_update应该小心拒绝任何不应该允许的写入.
在每种情况下,你都需要想象一下了解系统的人可以做些什么来破坏它并锁定那些攻击途径.