我的hack是否将用户的私有数据存储在Cloudant上?

 追风神驹体育专营_462 发布于 2023-02-12 17:01

我想将用户的私人信息存储在Cloudant中的CouchDB上 - 即每个用户应该只能阅读和更新他自己的文档.通常这些信息保存在_users db中,但我真的很喜欢Cloudant的API密钥,并且不想自己管理用户和密码.

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

"每用户数据库"真的很难管理.

"智能代理"从CouchDB和CouchApps中获取乐趣.

"基于每个用户的文档加密"过于复杂.

然后我想出了一个新的解决方案 - 我创建了一个数据库(称为"测试")并将所有用户配置为_writers,没有任何_readers.为了防止用户写下彼此的文档,我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://:@/db/_design/app/_update/update_hack/

如果用户尝试向其他用户的文档发送POST请求,请说:

http://:@/test/_design/app/_update/update_hack/someoneelse

那么他会得到一个{"error":"unauthorized","reason":"cannot access others"}回应,试图"更新"文件.

这种技巧效率低下,因为每次用户"获取"他的文档时,文档的修订都必须改变.还存在通过发送POST请求来实现用户名是否存在的问题(如果文档不存在,则将返回"null").

你觉得这个技巧有什么安全漏洞吗?

当用户通过API密钥生成时,是否有更好的方法来存储每个用户的私人文档?(即使有,我仍然认为我的伎俩很酷).

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有