1

对于我们公司内网最近的几个项目,我使用了一个非常简单的 nginx + redis + webdis + 客户端 javascript 的堆栈来实现一些简单的数据分析工具。体验非常棒,尤其是与我之前使用其他堆栈(包括自定义 c++、apache/mod_perl、ASP.Net MVC、.Net HttpListener、Ruby on Rails 和一点 Node.js)的经验相比。鉴于客户端模板工具和前端库(如 jquery-ui)的可用性,我似乎可以很高兴地使用这样的无服务器端代码堆栈来实现更复杂的 Web 应用程序(也许用 couchdb 替换/增强 redis如果有必要)...

当然,这个堆栈的主要限制是我的数据库直接暴露在网络上——在这种情况下,在有防火墙的公司网络上是可以接受的,但如果我想在 Internet 上使用相同的技术,这并不是一个真正的选择。我需要某种级别的服务器端逻辑来安全地处理身份验证和用户角色管理。

是否有任何最佳实践或通用开发堆栈?理想情况下,我想要一些轻量级的东西,并为我提供一个简单的框架,用于在将客户端请求转发到数据库后端之前通过我的自定义用户角色逻辑过滤客户端请求。我对任何类型的服务器端模板或 ActiveRecord 风格的存储级抽象都不感兴趣。

4

1 回答 1

2

我无法评论框架。

您已经提到了它的主要弱点,尤其是在互联网上,那就是安全性。问题不仅在于身份验证。问题本质上是客户端的开放性,在这种情况下是 Web 浏览器和协议,特别是使用 JSON 或 XML 或其他纯文本协议的 HTTP。

考虑一个例子。这很简单。想象一个 HTTP 服务,它接受 SQL 查询并返回代表行的 JSON 集合。这写起来很简单。使用任何可以让您对 RDBMS 进行 SQL 访问的工具,您可能会在不到一个小时的时间内从头开始敲出一个新生的。

可以说,早在客户端服务器开发的黄金时代,这正是人们所做的,只是人们没有通过 HTTP 隧道传输一些数据,而是使用 DB 特定驱动程序并将 SQL 文本直接发送到 DB 的后面。

今天的问题是协议过于开放。如果你实现了上面提到的那个 SQL 服务,你基本上把你的整个应用程序变成了一个 SQL 注入向量。

你根本无法在野外获得这样的东西。该协议对微不足道的观察是开放的(每个浏览器都带有一个内置的数据包嗅探器,今天有效),以及应用程序的所有源代码。如果您尝试加密数据,这一切也都在客户端上完成 - 使用流程的源以及涉及的任何密钥。

例如,CouchDB 不能以这种方式得到保护。如果某人拥有服务器的权利,他们就拥有所有数据的权利。所有的数据。你想让他们看到的东西,以及你不想看到的东西。

解决方案自然是服务层。比简单的原始数据流更高级的东西。可以保护的东西,并且可以对客户保密。但是,这自然需要服务器端编程来实现,而且它表面上需要更多的工作、更多的层、更多的数据转换,更痛苦。

过去,人们只使用数据库中的存储过程来编写整个系统。这些过程将具有调用它们的用户没有的权限,因此您可以在服务器上限制用户可以或不可以看到或更改的内容。您可以在受限视图上赋予它们无限的 SELECT 能力,而存储过程将有权实际更改数据或访问某些隐藏列。

存储过程大多被应用层和应用服务器所取代,数据库越来越沦为“哑存储”。但概念是相似的。

在某些情况下,将数据直接发布到 Web 是有价值的,例如您的分析示例。这是一个特定的、阅读量大的利基市场。但除此之外,我担心这个概念效果不佳。混淆的 JS 难以阅读,但不安全。

这可能就是为什么您可能很难找到这样的框架(我自己根本没看过)。

于 2012-04-28T04:41:49.983 回答