是否有优化的Web堆栈以最大程度地减少服务器端编码
Is there a web stack optimized to minimize server-side coding?
对于我们公司内部网上最近的几个项目,我使用了非常简单的nginx + redis + webdis +客户端javascript堆栈来实现一些简单的数据分析工具。 这次体验绝对很棒,特别是与我之前使用其他堆栈的经验(包括自定义c ++,apache/mod_perl,ASP.Net MVC,.Net HttpListener,Ruby on Rails和一些Node.js相比。 鉴于客户端模板工具和前端库(如 jquery-ui)的可用性,似乎我很乐意使用这种无服务器端代码堆栈来实现更复杂的 Web 应用程序(如果需要,也许可以用 couchdb 替换/增强 redis)......
当然,此堆栈的主要限制是我的数据库直接暴露在网络中 - 在这种情况下,在防火墙的公司网络上可以接受,但如果我想在互联网上使用相同的技术,则不是一个真正的选择。 我需要具有某种级别的服务器端逻辑来安全地处理身份验证和用户角色管理。
是否有任何最佳实践或通用开发堆栈? 理想情况下,我想要一些轻量级的东西,并为我提供一个简单的框架,用于在将客户端请求转发到数据库后端之前通过我的自定义用户角色逻辑过滤客户端请求。 我对任何类型的服务器端模板或 ActiveRecord 风格的存储级抽象都不感兴趣。
我无法评论框架。
您已经提到了这样做的主要弱点,尤其是在互联网上,那就是安全性。问题不仅仅是身份验证。问题本质上是客户端的开放性,在这种情况下是Web浏览器和协议,特别是使用JSON或XML或其他明文协议的HTTP。
考虑一个例子。这很简单。假设一个 HTTP 服务接受 SQL 查询并返回表示行的 JSON 集合。这很容易写。你可能会在不到一个小时的时间内,使用任何允许你对RDBMS进行SQL访问的工具,从零开始敲出一个新生的。
可以说,回到客户端服务器开发的黄金时代,这正是人们所做的,只是人们使用特定于数据库的驱动程序并将SQL文本直接发送到DB的后面,而不是通过HTTP隧道传输一些数据。
今天的问题是协议过于开放。如果实现了上面提到的 SQL 服务,则基本上将整个应用程序转换为 SQL 注入向量。
你根本无法在野外获得这样的东西。该协议对琐碎的观察是开放的(每个浏览器都带有内置的数据包嗅探器,今天有效),以及应用程序的所有源代码。如果您尝试加密数据,那也将在客户端上完成 - 包括进程的源以及所涉及的任何密钥。
例如,CouchDB 不能以这种方式进行保护。如果某人对服务器拥有权限,则他们有权访问所有数据。所有数据。你想让他们看到的东西,以及你不想看到的东西。
解决方案自然是服务层。比简单的原始数据流更高级别的东西。可以保护的东西,并且可以对客户保密。但是,这自然需要服务器端编程才能实现,而且表面上是更多的工作,更多的层,更多的数据转换,更多的痛苦。
过去,人们只会使用数据库中的存储过程来编写整个系统。这些过程将具有调用它们的用户没有的权限,因此您可以在服务器上限制用户可以或不能看到或更改的内容。也许,您可以在受限视图上为它们提供无限的 SELECT 功能,而存储过程将有权实际更改数据或访问某些隐藏列。
存储过程大多被应用程序层和应用程序服务器所取代,数据库越来越被降级为"哑存储"。但概念是相似的。
某些方案将数据直接发布到 Web 是有价值的,例如分析示例。这是一个特定的,阅读沉重的利基市场。但除此之外,这个概念恐怕效果不佳。混淆的JS很难阅读,但不安全。
这可能就是为什么你可能很难找到这样的框架(我自己根本没有看过)。
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 通过js在新选项卡中有条件地打开url
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- jQuery-有条件地附加HTML
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- 如何在悬停时流畅地更改单词
- 有条件地在选项标记中应用布尔属性
- 将地理编码结果转换为php变量以发布到mysql数据库
- ADF:有条件地加载javascript资源
- 简单地将拆分变量添加到对象中
- 如何在AngularJS中有效地检查日期是否有效
- 奇怪地编码输出;u0026 quot"在…内
- 对 URI 组件非 utf-8 字符进行编码并相应地解码它们的正确方法是什么
- 是否有优化的Web堆栈以最大程度地减少服务器端编码
- 动态地对数字进行颜色编码
- 按与用户的接近程度有效地对大量人员进行排序
- 使用 Angular Factory 保存一个值,以便应用程序的其余部分访问,以最大程度地减少服务器调用