为何未授权用户可通过pouchdb-authentication插件创建PouchDB管理员?
为什么登出状态下用pouchdb-authentication能创建PouchDB服务器管理员?
嘿,这个问题我之前排查过类似的情况,核心原因其实和pouchdb-authentication插件的封装逻辑、以及PouchDB官方服务器(底层兼容CouchDB)的初始安全规则有关,咱们拆解来看:
CouchDB的初始管理员创建机制
PouchDB官方服务器本质是兼容CouchDB的,而CouchDB有个默认的初始化逻辑:当服务器中还没有任何管理员账户存在时,任何来源的第一个创建管理员的请求都会被允许——这是为了方便用户首次配置服务器,不需要提前设置权限。pouchdb-authentication插件的封装触发了这个逻辑
你说“正常执行操作返回未授权”,大概率是你用原生API请求时,要么请求格式不符合管理员创建的要求,要么当时服务器已经存在管理员了。但用插件时,它封装的请求(比如发送PUT /_users/org.couchdb.user:{username}的正确格式)正好触发了CouchDB的初始管理员创建规则——尤其是当服务器原本没有管理员的情况下,哪怕你处于“登出状态”(其实此时根本没有可登录的账户,登出状态没有实际意义),请求也会被允许。验证方法
你可以做个小测试:创建完这个管理员之后,再用插件在登出状态下尝试创建第二个管理员,这时候应该就会返回和原生请求一致的{"error":"unauthorized","reason":"You are not a server admin."}错误了。另外也可以查看服务器的/_users数据库,确认创建前确实没有管理员文档。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

