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

时间:2013-04-25 18:07:15

标签: security function validation couchdb

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

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

由于

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分: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'});
    }
}

这个想法很简单:如果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"}