gpt4 book ai didi

security - 我在 Cloudant 上存储用户私有(private)数据的方法是否安全?

转载 作者:行者123 更新时间:2023-12-03 16:28:36 27 4
gpt4 key购买 nike

我想将用户的私有(private)信息存储在 Cloudant 中的 CouchDB 上——即每个用户应该只能阅读和更新他自己的文档。
通常此类信息保存在 _users 数据库中,但我真的很喜欢 Cloudant 的 API key 并且不想自己管理用户和密码。

我在这个 wiki 中找到了几个解决方案:
http://wiki.apache.org/couchdb/PerDocumentAuthorization
但它们都有局限性:

  • “每个用户的数据库”管理起来真的很烦人。
  • “智能代理”从 CouchDB 和 CouchApps 中获得乐趣。
  • “基于每个用户的文档加密”太复杂了。

  • 然后我想出了一个新的解决方案 - 我创建了一个数据库(称为“测试”)并将所有用户配置为 _writer s,没有任何 _reader s。
    为了防止用户互相覆盖文档,我设置了 validate_doc_update在我的 _design/app到:
    function(newDoc, savedDoc, userCtx) { 
    if ((userCtx.roles.indexOf('_admin') < 0) && (userCtx.name != newDoc._id)) {
    throw ({unauthorized: "cannot access others"});
    }
    }

    为了让用户阅读自己的文档,我编写了以下更新函数(称为“update_hack”):
    function(doc, req) { 
    return [doc, toJSON(doc)];
    }

    现在,每个用户都可以通过向以下地址发送 POST 请求来“获取”他的文档:
    http://<username>:<password>@<host>/db/_design/app/_update/update_hack/<username>

    如果用户尝试向其他用户的文档发送 POST 请求,请说:
    http://<username>:<password>@<host>/test/_design/app/_update/update_hack/someoneelse

    然后他会得到一个 {"error":"unauthorized","reason":"cannot access others"}尝试“更新”文档的响应。

    这个技巧有一些效率低下,因为每次用户“获取”他的文档时,文档的修订版都必须更改。
    还有通过发送 POST 请求来识别用户名是否存在的问题(如果文档不存在,将返回“null”)。

    你在这个技巧中看到任何安全漏洞吗?

    当通过 API key 生成用户时,是否有更好的方法来存储每个用户的私有(private)文档? (即使有,我仍然认为我的把戏很酷)。

    最佳答案

    简短的回答:没有
    长答案:您正在使用一些不是为用作访问控制而设计的访问控制。这是一种安全反模式,并且一次又一次导致安全漏洞。例如,您如何确保错误消息等不会泄露数据?更新文档呢?
    最值得注意的是,“只写”安全方法导致了许多安全漏洞。例如在文件服务器中。
    此外,通过使用 POST 获取数据,您将失去所有缓存。
    尽管如此-您想出了一个非常聪明的技巧。但我强烈建议不要相信它的安全性。

    关于security - 我在 Cloudant 上存储用户私有(private)数据的方法是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com