直接从 Electron 应用程序连接到数据库有啥风险?
Posted
技术标签:
【中文标题】直接从 Electron 应用程序连接到数据库有啥风险?【英文标题】:What are the risks of connecting to database directly from Electron app?直接从 Electron 应用程序连接到数据库有什么风险? 【发布时间】:2019-08-14 08:00:23 【问题描述】:我在构建 Electron 应用程序方面还很陌生,我已经看到了很多 Electron 应用程序直接连接到远程数据库(在我的例子中是 mysql)的例子,所以我开始想知道这样做可能会出现什么问题.我的第一个想法是拥有一个远程 API(建立在 Express 之上),它可以与数据库通信,而 Electron 应用程序(React)将使用该 API。
有什么建议吗?想法?
谢谢。
【问题讨论】:
没有“最佳实践”,只是问问你自己,为什么要使用 HTTP API 进行额外的步骤?您是否期望其他服务调用您的 api 或仅调用电子应用程序? 取决于您的情况。如果您打算在非 Electron 应用程序中重用代码,那么这可能不是一个好主意。 如果您的数据库是在 Internet 上公开托管的,并且任何随机用户都可以下载该应用程序以连接到您的数据库,那么所有数据本质上都是公开的,并且每个人都拥有无限的写入权限以用于所有意图和目的。也许不是那么理想。如果它是一个非公共应用程序......好吧,这取决于。 投票重新开放。我修改了主题标题并稍微编辑了问题,并且认为这主要不再需要意见。我也认为以前完全可以用事实来回答(就像我一样)。我希望其他人投票重新开放。 你永远不应该通过互联网发送 SQL,IMO。特别是如果它在您自己的服务器之外的任何东西上运行。 【参考方案1】:直接连接到数据库的一个问题是您必须将数据库凭据嵌入到电子应用程序中,这使得任何想要窥探代码的人都可以使用它们。此外,一旦凭据暴露,您将无法控制任何人可以对您的数据库执行的操作。
这就是为什么您通常会为用户提供自己的凭据,让用户对 Web 服务器进行身份验证,然后让 Web 服务器成为唯一可以直接与远程数据库通信的服务器。然后,您可以完全控制数据库发生的事情,因为您的 Web 服务器是中介,并且是唯一与数据库实际对话的服务器。
这并不意味着在某些情况下您可能不希望客户直接与数据库对话,因为这实际上取决于您在做什么、数据是什么以及允许的风险敞口是多少不受信任的代码直接操作数据库中的数据。
请记住,您无法保护嵌入在客户端中的凭据。它们可以被客户端发现并用于其他用途。
【讨论】:
这很好,但是包括 MySQL 在内的大多数数据库都有自己的访问管理。如果可以避免这种情况,我会更担心将数据库服务器暴露给外部连接的必要性。当然,额外的抽象层使其更具前瞻性。 感谢您的回答,但是您能否举一个客户端必须直接与数据库对话的应用示例?我正在开发的应用程序用于管理本地小型企业的工人、工作量和工作时间。 @jfriend00 @scarably - 我想不出我可以通过广泛开放的互联网直接访问数据库,因为似乎有太多的滥用机会。也许在访问受限的本地网络上,或者您拥有其他级别的足够访问控制的地方(例如具有自己登录名的 ***)。以上是关于直接从 Electron 应用程序连接到数据库有啥风险?的主要内容,如果未能解决你的问题,请参考以下文章
将套接字从电子 UI 连接到 python 服务器时出现错误 400(错误请求)
AngularJS / Sqlite / Electron - 未知提供者:$dbServiceProvider
连接到 postgresql 时 -> 和 => 有啥区别?