Xeo*_*oss 6 security validation couchdb nosql
CouchDB在允许将对象/行插入数据库之前提供验证.这确保了如果你有一个面向公众的沙发应用程序,你的数据库将不会被任何人填充垃圾.
User <-> CouchDB
Run Code Online (Sandbox Code Playgroud)
但是,我想弄清楚从标准的应用程序设计过程中看起来是什么样子,你有一个可信赖的中间层,可以完成大部分的auth工作.例如,大多数应用程序将Ruby或PHP放在数据库和用户代理之间,允许应用程序在允许将类似帖子的内容保存到数据库之前找出有关用户代理的信息.
User -> Ruby -> MySQL
User <- Ruby <- MySQL
Run Code Online (Sandbox Code Playgroud)
当用户不可信时,您如何信任用户执行管理任务?
例如,在使用couchDB插入用户行之前,如何进行"电子邮件验证"?您不能让用户代理插入行 - 因为它们会向系统填充垃圾邮件帐户.另一方面,没有中间层可以在单击电子邮件中的链接后插入行.
怎么样,我会假设你允许任何人通过在公共表格中创建新记录来输入他们的电子邮件email_verify.这是公共用户代理可以执行的操作,因为表不会在应用程序中执行任何操作 - 它只是一个存储槽.
然后node.js可以跟踪_changes提要并发送激活电子邮件,同时在私有表(如email_confirm)中创建新条目(node.js将用作可信中间层).如果用户单击该链接然后返回... [unknown] ...并且node.js最终可以在私有用户表(user)中创建记录.
此时,我们可以依赖couchdb验证来完成应用程序的其余部分,因为我们已经创建了已确认的用户帐户.
随着更多的背景让我们想象一下建立在couchdb上的讨论,任何人都可以注册.我们不希望任何人在没有某种验证的情况下直接提交内容 - 但用户代理都直接运行系统.(表将是Thread,Comment,及User).这怎么样?
我会考虑在这个问题中为现有用户添加角色。
使用 couchdb 的验证和更改功能_design/_auth可以在用户首次注册时在数据库中添加email和email_verified随机生成。email_verification_code_users
要发送邮件、获取确认、重新发送确认,您可以使用外部流程。(有关外部进程的示例用法,您可以检查 couchdb-lucene)。
最后,如果验证码匹配,您可以再次在用户更新过程中快速检查 _design/_auth 并verified_user为该用户添加角色。
这样你的所有请求都会通过 couchdb 传递,只有当你需要发送邮件并获得确认时,你才会使用外部进程。
编辑:忘记添加(因为它非常明显),我会将 verify_user 角色添加到数据库读取器。
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |