2014-09-03 72 views
5

我们在生产中使用了CouchDB,主要是在受控环境中构建应用程序。大多数情况下,我们使用中间件库直接调用couchdb/cloudant,因此避免直接(前端JavaScript调用直接调用CouchDB/Cloudant)。CouchDB和Cloudant安全

出于安全原因,很明显,通过身份验证的CouchDB数据库:
http://{username}:{password}@IPAddress:Port/DB
OR为cloudant:
https://{username}:{password}@username.cloudant.com/DB, 如果呼叫直接从JavaScript做,今天在浏览器的开发者工具,使一个人认识到这一点调用并因此完全访问您的数据库。

在中间件处理时,附件通常很痛苦。使云雾处理附件的缓存和服务直接到达前端是有利的,因此减轻了我们的中间件的负担。然而,在网络上和大量的观众中,直接打电话给我们的云环境是棘手的。

我们首先为所有附件拥有一个独立的cloudant帐户,因此inquisitive boy不会篡改实际的元数据或我们用户的信息。因此,他们可以访问的唯一云帐户是附件,因为我们正在对数据库进行直接的JavaScript调用。

问题:我们如何找到隐藏我们的云环境的用户名和密码的方式,从而使我们能够安全地直接将JavaScript调用到cloudant上?我们的基础设施完全在云端,所以我们没有代理和东西可以使用。我们听说过Url缩短服务,CDNs e.t.c.但是,我们还没有提出一个确凿的解决方案。

回答

0

我们如何找到一种隐藏云端环境的用户名和密码的方式,从而使我们能够安全地直接将JavaScript调用到云端?

据我所知,如果不使用中间件或某种代理服务器,就无法做到这一点。但这并不意味着我们完全没有手段。 couchdb给我们一些矛戳inquisitive boy :)

所以你做的一件好事是让附件数据库分离。你没有提到你的问题,如果你使用couchdb授权方案,所以我会假设你不是。因此,第一步是在couchdb _users数据库中创建一个用户,然后将其分配为附件数据库中的成员。更多详情herehere

完成此步骤后,您应该有一个附件数据库成员。我们希望成员而不是管理员的原因是,成员无权编写或阅读设计文档。

这是一个开始,但它还不够,因为成员仍然可以通过_all_docs读取,这是一个dos攻击。所以我们现在面临的问题是,我们现在这样做

https:// {username}:{password} @ username.cloudant。COM/DB

一个很好的举动将其更改为

的https:// {用户名} {}密码@ someurl.com/

有什么区别这两个之间?那么它会隐藏你的数据库的位置,并使访问内置方法变得更困难。这可以在vhosts configurationsome rewrite rules的帮助下完成。一些very good stuff也在Caolan的博客上

有了这个,你有两件事情要做。

  1. 死缠烂打inquisitive boy将是毫无章法,其中电话去。

  2. 他将无法通过直接调用获取未知文档的内容。他只能通过您设置的规则访问您的数据库。

仍然不是100%安全,但只要读取安全等级就可以了。希望这可以帮助。