如何避免CouchDB和noSQL数据库出现类似SQL的注入问题?

如何避免CouchDB和noSQL数据库出现类似SQL的注入问题?,couchdb,nosql-injection,Couchdb,Nosql Injection,我的非常简单的待办应用程序将在客户端使用PockDB,在服务器端使用CouchDB。每个条目将首先本地保存在PockDB中,然后通过服务器端CouchDB进行复制。该应用程序的每个用户都将在其设备上拥有自己的客户端数据库,以及自己的云数据库,所有这些都具有自己的身份验证 这篇文章()很有帮助,但我仍在努力确定我需要采取哪些步骤来确保(至少尽可能多地)用户的输入不会有害 我可能要做的比实际情况更多,因为任何不好的参与者可能只会破坏他们自己的数据(在这一点上谁在乎呢?),但我仍然想知道如何清理noS

我的非常简单的待办应用程序将在客户端使用PockDB,在服务器端使用CouchDB。每个条目将首先本地保存在PockDB中,然后通过服务器端CouchDB进行复制。该应用程序的每个用户都将在其设备上拥有自己的客户端数据库,以及自己的云数据库,所有这些都具有自己的身份验证

这篇文章()很有帮助,但我仍在努力确定我需要采取哪些步骤来确保(至少尽可能多地)用户的输入不会有害

我可能要做的比实际情况更多,因为任何不好的参与者可能只会破坏他们自己的数据(在这一点上谁在乎呢?),但我仍然想知道如何清理noSQL数据库中用户输入的数据。同样,我在上面引用的帖子有一些很好的起始信息,但我仍然找不到任何关于要看什么、要逃避什么角色等的提示

从我对SQL的有限经验来看,您必须注意是否有人试图插入HTML或javascript,但我不知道哪些数据序列可能会对CouchDB有害。我读到的一篇文章建议人们应该:

  • 避免通过连接脚本和用户输入来创建“ad-hoc”JS命令
  • 使用正则表达式验证服务器端JS命令中使用的用户输入(好主意……但如何验证?)
  • 避免评估。使用json.parse

CouchDb在每个数据库中都有一个验证挂钩,可用于检查或阻止文档更新。这方面有很多信息。它是一个设计文档,具有一个用Javascript编写的名为validate\u doc\u update的函数,为您提供原始和修订的文档上下文,以便您可以根据文档的更改内容“返回”或“抛出”。

CouchDB不允许执行特别的JS“命令”,因此这不是真正的问题。您必须做的主要事情是确保用户的密钥不能覆盖文档中的重要密钥。默认情况下,这将是
\u id
\u rev
,但也可能包括特定于应用程序的键。还要确保您没有公开足够的数据库,用户无法访问或创建任意数据库(如
\u users
)。@Flimzy非常感谢您的回复。这是有道理的。你能给我举一个例子说明用户如何覆盖一个重要的密钥吗?另外,一般来说,举一个例子来说明如何意外地暴露太多的数据库是很好的。你是说以某种方式向用户显示其他键是什么?我很乐意做我自己的研究,不必麻烦社区,但我只是找不到任何东西,除了奇怪的堆栈Q&A和CouchDB文档,它们没有深入研究这个问题。这就是为什么你的答案非常具体,非常有帮助。再次感谢。感谢您抽出时间回复。是的,确实如此。我在我的问题中提到的帖子中提到了这一点。再次感谢。