如何防止匿名用户在couchDB中删除/编辑我的文档?

And*_*oli 7 security validation couchdb function

我知道CouchDB不允许非管理员用户编辑/删除设计文档,但是如何阻止他们编辑/删除所有文档?

我能找到的唯一信息是可以使用验证功能设置用户权限.关于我如何编写验证函数来执行此操作/验证函数的实时性,我有点困惑.它们都在_users DB中吗?

谢谢

Cla*_*tos 8

限制对数据库的访问的另一种方法是配置[couch_httpd_auth]withrequire_valid_user:true

然后每个请求都必须发送凭据登录到您的couchdb.

  • 对于我的用例,这比接受的答案更简单,更有效.我的目标是阻止**所有**匿名访问,而不仅仅是针对特定文档的特定操作.这个答案就是这样. (2认同)

Kxe*_*pal 7

这很简单:只需validate_doc_update在数据库中创建具有函数的设计文档,您可以在其中控制执行以下操作的文档:

function(newDoc, oldDoc, userCtx, secObj){ 
    if('_admin' in userCtx.roles) return; // skip anonymous in Admin Party case;
    if(!userCtx.name && newDoc._deleted){
      throw({'forbidden': 'auth first before delete something'});
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法很简单:如果userCtx没有指定名称,这意味着用户是匿名的,如果我们的新文档版本_deleted设置了特殊字段true- 文档将被删除(但更改尚未保存在磁盘上).因此,如果条件满足,我们会检查这些字段并抛出禁止的异常.我们也是管理员案例的例外,每个人都无名,但有_admin角色,所以我们需要跳过它们.现在,在任何匿名用户删除常规文档的尝试中,他都会收到下一个HTTP响应:

HTTP/1.1 403 Forbidden
Server: CouchDB/1.3.0 (Erlang OTP/R15B03)
Date: Thu, 25 Apr 2013 18:48:51 GMT
Content-Type: application/json
Content-Length: 68
Cache-Control: must-revalidate

{"error":"forbidden","reason":"auth first before delete something"}
Run Code Online (Sandbox Code Playgroud)