【问题标题】:Secure db queries in single page web app单页 Web 应用程序中的安全数据库查询
【发布时间】:2015-11-05 01:38:51
【问题描述】:

我正在使用 ArangoDB 创建单页 Web 应用程序进行存储。 Arango 提供了非常棒的方式来访问和操作数据。其中之一是经典的 JS API。在客户端 JS 中编写直接的 DB 查询很容易,这将是 DB 的直接查询。所以中间没有服务器应用程序。

当然,这确实是不安全的模式。所以我应该编写某种 REST-full API 服务,通过 URL 从服务器查询数据,然后服务器查询数据库。但这真的很不方便,因为我需要编写两到三倍的代码(第一次查询我的服务器,第二次查询数据库,也许还有两个查询之间的翻译)。另外,我认为我的服务器的 API 调用看起来与 DB 的 API 调用几乎相同。

我不想完全抽象,因为应用程序应该很复杂,并且会有很多类型的 API 请求,这只会带来 bug 并消耗更多时间。

那么,首先从安全性,其次是易于编码的角度来看,从 DB 请求客户端应用程序数据的最佳方式是什么?

【问题讨论】:

  • 您的目标似乎有冲突。编写不安全的代码非常容易。编写安全代码很困难。但你想要两者。我认为您应该更喜欢安全性。否则,您会希望在通过 SQL 注入删除数据库之后拥有。
  • 如果您的目标是 ArangoDB(在查看此问题的标签时似乎如此),则有 Foxx。它是一个服务器端 JavaScript 框架,用于构建基于 REST 的应用程序,在 ArangoDB 中运行。您的应用程序需要的数据库操作和查询可以通过 URL 访问,因此您的单页应用程序可以直接调用它们。您仍然可以控制可以运行的查询,因为您可以控制 Foxx 路由中的代码。无需使用 Foxx 编写客户端查询,只需使用常规 AJAX 方法调用服务器 URL。

标签: javascript security graph-databases arangodb


【解决方案1】:

我真的建议编写 REST API 调用(或通常是 URL 调用)来访问您的数据。可以访问和操纵在客户端运行的任何内容或来自客户端的任何流量。这伴随着身份验证和 SQL 调用本身。 你想保护什么?数据库客户端身份验证?如果你加密它,你需要在客户端解密它。 SQL 调用 - 如果您构建和传输它们,客户端可以操纵它们以使用任何值获取/更新任何数据。真的不容易。。 所以 - 为了安全起见 - 坚持这里的模式..

【讨论】:

    【解决方案2】:

    我在 Facebook 找到了一个 GraphQLRelay,它最好地解决了这个问题。

    【讨论】:

    • 是的,还有一些基于客户端的数据库。这样,Relay 将调用您的 Web (REST) 服务,并且无论如何您都需要在服务器端服务上实施适当的授权。
    • 不,使用 ArangoDB 更简单。不需要 REST 端点。
    • 我理解您对使用简单性的追求,我并不是说您根本不需要 REST 服务。我想说的是(检查原始问题),如果没有适当的服务器端授权,您将无法信任您的客户端请求。总是可以操纵/伪造客户端代码。
    • 当然,总是需要检查是否允许尝试访问或操作 som 对象的用户这样做。我相信,这应该通过会话和检查 Arango 的 foxx 服务来完成。
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多