我们收到很多关于 dreamfactory rest api 平台 如何帮助保护数据访问的询问,尤其是来自大型企业和政府用户的询问。这是一个合理的担忧:越来越多的网络和移动应用程序需要访问敏感数据,并且必须在用于从越来越多的应用程序访问该数据的服务中实施适当的控制。
对用户来说,好消息是保护数据是我们在构建 Dreamfactory 平台时的首要设计目标之一。我们甚至可以争辩说,它可以提供比大多数定制 API 更好的数据安全性。但我不想争论,我想我只是简单地解释一下 Dreamfactory 平台固有的安全特性以及平台中设计的明确安全功能,以帮助用户安全地移动数据。
本机安装
Dreamfactory 是一个在云端或本地运行的开源软件包。单击安装程序可用于大多数基础设施即服务 (iaas) 和平台即服务 (paas) 云供应商。您还可以在 linux、windows 或 mac 桌面计算机上运行 dreamfactory。该软件包包括一个完整的带有 php 的 lamp stack 和一个可以安装在任何服务器上的专用 sql 数据库。
这些通用的安装选项通过使组织处于控制之中来增强安全性。他们可以对 Dreamfactory 使用他们已经用于其他应用程序的相同安全部署实践。他们可以监控使用情况、进行备份、控制成本、优化性能、配置防火墙以及使用熟悉的工具和系统部署应用程序。公司可以选择值得信赖的云供应商或他们自己的数据中心来管理应用程序安全。
本机安装和操作是优于移动后端即服务 (mbaas) 产品的主要优势。由于 Dreamfactory 不托管该平台,因此我们公司不存在丢失您的数据的风险。您无需担心我们的数据中心位于何处、谁可以访问您的私人信息或我们如何将您的数据与其他客户帐户分开。
自动生成的服务
rest api 的复杂性是一个主要的安全挑战。对于每个新的移动或 Web 项目,都有创建越来越多特定于项目的 rest api 的趋势。每项服务都可能由不同的开发人员或外部顾问在内部编写。这些服务通常具有不同的用户管理系统、不同的安全协议、不同的参数样式以及不同的请求和响应。它们将硬连线到各种数据源,并设计为在不同的物理基础设施上运行。随着时间的推移,服务器端基础设施会变得越来越复杂,每个新的 rest api 端点都可能引入新的安全漏洞。虽然 api 管理和网关产品可以帮助管理 api 端点访问,但它们没有解决底层服务的安全和用户权限问题。
相比之下,dreamfactory 自动生成rest api 并为用户提供统一的rest api 服务平台,在设计时明确考虑了安全性。这为组织提供了一种单一类型的系统,用于在专门构建的 rest api 平台中管理数据访问。与尝试将安全功能实施到越来越多的定制 rest api 端点相比,这提供了更好的安全性。
dreamfactory 提供安全、可重用、可定制的 rest api 服务的综合调色板。通过统一的rest api接口访问所有各种后端数据源,为通用应用程序开发提供安全、restful的服务平台。暴露的服务端点总数大大减少,后端数据源的连接和访问控制在专用系统中标准化和管理。
宁静的服务平台
在一个典型的移动开发项目中,有一个客户端团队和一个服务器团队,这两个团队必须就 rest api 接口达成一致。通过自动生成所需的 rest api,dreamfactory 停止了这种来回的接口协商,并允许每一方专注于各自的领域。 Dreamfactory 通过将客户端应用程序开发与服务器端用户管理“分离”来增强安全性。
服务抽象
在统一的宁静服务平台上编写的应用程序也受益于服务层提供的虚拟化。服务不再依赖于后端基础设施的特定部分。将应用程序从开发转移到测试再到生产要容易得多。服务平台可以安装在任何地方,因此应用程序可以在云和数据中心之间移动。应用程序登台变得更简单,整个应用程序生命周期管理变得更加安全。
外部伙伴
在许多项目中,外部顾问创建客户端应用程序,在某些情况下,他们还构建服务器端界面。借助 Dreamfactory,值得信赖的 IT 员工可以轻松、即时地为每个新的移动项目创建安全的休息 API。该平台可以根据需要提供对登台或生产数据库的访问。无需更改代码即可将客户端应用程序从开发转移到测试,再转移到生产。这减少了向从事开发项目的外部合作伙伴公开公司信息和后端系统的需要。
单点登录
当用户登录 Dreamfactory 时,他们会收到一个会话 ID,该 ID 在 html5 应用程序中作为浏览器 cookie 或在本机应用程序中作为临时局部变量进行安全管理。所有网络事务都可以通过 https 进行,从而将 ssl/tls 的安全功能添加到标准的 http 通信中。
对用户角色和权限的管理更新会立即反映在当前会话中。例如,如果用户被停用,他的会话将立即失效。这为进入或离开公司的人员以及丢失设备或安全漏洞提供了更安全的环境。
基于角色的访问控制
sql数据库有各种表,nosql数据库有文档集合,文件存储系统有不同的文件夹。 Dreamfactory 用户可以定义基于角色的访问控制,以控制这些组件中的哪些组件对给定用户可见,以及控制访问的 http 动词,例如 get、post 或 delete。
基于角色的访问控制允许对某些组隐藏信息。例如,个别销售人员可能无法访问薪水信息,而经理可能可以使用此数据。此功能可防止意外数据丢失或泄露敏感信息。角色还控制哪些用户可以看到哪些应用程序。此功能限制未经授权的用户访问应用程序。
记录级访问控制
可以使用服务器端过滤器自定义角色以实现记录级别的访问控制。每个过滤器都采用“字段运算符值”等式的形式,该等式必须为真才能启用访问。记录级访问控制可以对外部数据源施加限制。例如,您可以将数据可见性仅限于用户创建的记录。此功能提供对数据源的细粒度安全控制。
用户管理
dreamfactory 提供了非常广泛的用户管理功能。单点登录、用户角色、来宾用户、开放注册、密码重置、电子邮件服务、电子邮件模板和密码散列都经过精心实施。用户管理即服务的标准化以及用户管理与其余 api 平台的集成防止了自定义 api 实现中经常发现的安全漏洞。
继承sql安全
Dreamfactory 充当外部数据源的安全代理。当 sql 数据库与连接字符串连接时,dreamfactory 会自动继承该数据库的安全特性。例如,如果连接字符串用于只读数据库用户,则其余 api 将以只读方式提供所有服务,而不管其他访问控制设置如何。
dreamfactory还可以从sql数据库继承更复杂的权限。您可以配置服务器端查找键以将用户或角色连接到远程数据库上的相应用户或角色。这允许 dreamfactory 模仿现有的数据库安全权限,或根据移动部署的需要更改它们。
主凭证存储
Dreamfactory 可以连接到任意数量的外部数据源和服务。 dreamfactory 用作创建 rest api 服务的安全代理,提供服务器端脚本,并实施基于角色的访问控制。每个外部数据源或服务通常需要连接字符串、用户名、密码、开发人员密钥或其他类型的主凭据才能访问。
这些主凭据由管理员在 dreamfactory 管理控制台中输入并加密以安全存储在 dreamfactory 服务平台上。当最终用户通过单点登录登录时,他们可以根据其用户角色控制对外部数据源和服务的访问,但他们无法发现主凭据。
这种在 Dreamfactory 服务器上安全地隐藏主凭据的功能消除了客户端应用程序将主凭据用于任何外部服务的需要。最终用户访问是通过单点登录提供的,并受用户群访问控制的限制。这种体系结构的另一个好处是可以在不更改客户端软件的情况下激活、停用或重定向外部服务。
框架
dreamfactory 使用最新版本的 php 和 laravel 框架编写。 php是世界上使用最广泛的服务器端脚本语言,而laravel是php发展最快的框架。有一个非常大的专业开发人员社区使用这些产品,许多关键任务网站都依赖它们来安全实施。 dreamfactory 使用 laravel 的用户管理系统和 url 路由系统来实现可靠和安全的运行。
可编程cors访问
Dreamfactory 将跨源资源共享 (cors) 作为系统级 Web 服务来实现。管理面板有一个简单的界面,可以让任何主机域使用 dreamfactory rest api。默认情况下,cors 是关闭的,服务只能从原始主机获得。可编程 cors 支持可防止跨站点脚本攻击和使用来自未经授权的来源的 api。
服务器端脚本
dreamfactory 使用 google 开发的 v8 引擎来运行用 javascript 编写的服务器端代码。脚本环境可以检查、修改或拒绝任何请求或响应。这使开发人员能够根据需要自定义任何 API 调用或开发新服务。 v8 引擎是沙箱化的,因此服务器端脚本无法干扰其他平台操作。
脚本和自定义可用于公式字段、字段验证、工作流触发器、访问控制、自定义服务和使用限制。第三方可以使用服务器端脚本来安全地定制后端系统。自定义安全保护和通知也可以通过服务器端脚本实现。
服务器端脚本可以在需要时使用 rest api。例如,脚本可能会调用电子邮件服务、触发推送通知或将某些信息存储在数据库中。基于角色的访问控制有单独的设置来管理客户端应用程序和服务器端脚本的数据访问。此功能使服务器端脚本能够安全地执行客户端 rest api 无法执行的特殊操作。
sql注入攻击
用于 sql 的 Dreamfactory rest api 包括使用查询过滤器字符串作为 url 参数的能力。例如,您可以请求大于特定数量或在特定日期之前创建的所有机会。每个查询过滤器字符串通常都有一个字段名、运算符和目标值。它们可以用括号和逻辑运算符组合成复杂的表达式。
当黑客在搜索字段中键入棘手的文本字符串或构建格式错误的查询过滤器以用于 rest api 调用时,可能会发生 sql 注入攻击。他们可能会使用奇怪的转义序列、不正确的类型处理或不寻常的字段、运算符和值模式。
dreamfactory 将每个查询过滤器字符串解构为单独的名称、运算符和值组件。字段名必须与对象匹配,运算符必须有意义,字段值必须格式正确。此后,仅使用有效参数重建查询过滤器字符串。这可以防止将未经授权的 sql 语句注入数据库。
url路由攻击
另一个攻击媒介涉及欺骗性 url 字符串、非法 url 参数或棘手的 http 标头,它们以某种方式设法绕过基于角色的访问控制或以其他方式从平台返回敏感数据。 dreamfactory使用laravel php框架中的路由引擎来避免这个问题。
rest api接口的安全性也经过了数十万活跃建设项目的dreamfactory用户的严格测试。事实上,所有其余的 api 调用都有一个入口点,这也比每个后端系统都有单独的入口点更安全。
开源
dreamfactory 源代码在 github 上的 apache 许可下可用。开源产品在代码库上有“多只眼睛”。我们也签署了第三方安全审计。 Dreamfactory 软件也有质量保证工程师定期检查安全问题。数以千计的独立开发人员也在每天测试该平台。代码库的开源性质增强了安全性。
一个安全的结局
大多数组织只希望授权用户访问敏感数据,并且 api 服务必须在多个级别上是安全的,以提供足够的安全性。正如我在本博客顶部提到的,Dreamfactory 从一开始就旨在提供 高度安全的 rest api 服务平台 。我总结了 Dreamfactory 帮助用户安全移动数据的多种方式。也许我什至激发了一些关于您当前定制的 api 中的安全漏洞的想法(或担忧!)。
如果您对 Dreamfactory 安全功能有其他问题,我和工程团队欢迎您提出问题。