Python:关于在 python 中隐藏 mysql 数据库的身份验证数据的工作流程

分享于2023年05月01日 mysql python 问答
【问题标题】:Python: Workflow about hiding authentication data of a mysql database in pythonPython:关于在 python 中隐藏 mysql 数据库的身份验证数据的工作流程
【发布时间】:2023-04-30 15:11:01
【问题描述】:

我有一个关于 Python 和 MySQL 的问题。我来自 PHP 背景,我想知道 Python 中的工作流程将如何。我在网上找不到任何好的答案,希望有人能帮助我理解这件事。所以让我快速解释一下我的困惑:

在 PHP 中,我结合 MySQL 做了很多小事,这意味着从数据库加载数据并写入数据。只要正确设置了存储 php 文件的服务器,就可以保存它。与数据库的连接,包括用户名、服务器名、密码和数据库名,保存在 php 文件中。由于 php 文件存储在服务器上并且源代码不会显示给用户本身,因此用户无法看到身份验证数据以连接到数据库。

现在,我想知道如何以安全的方式将整个概念转移到 Python 中,这样用户就无法在源文本中看到身份验证数据。 我计划编写一个 Python 程序,用户必须在其中进行身份验证。假设我在网络服务器上创建了一个 MySQL 数据库,并且在 Python 程序中用户可以登录。一旦用户单击登录按钮,就完成了与 Web 数据库的连接。这意味着在我的源代码中,我需要记下该特定数据库的用户名、密码、数据库名称和服务器名称等必要数据。这是我的问题:这意味着每个人都可以看到非常不安全的身份验证数据,不是吗?即使用户只有一个 .pyc 文件,他也可以重新编译它并查看标准 .py 文件,在该文件中他可以看到所有非常敏感的数据。

所以我想知道如何安全地向稍后将使用我的 Python 程序的用户隐藏该身份验证数据。

  • 我不认为我说对了,但是 PHP 和 Python 处理数据库的方式没有区别。两者都是解释性语言,代码存储在简单的文本文件中,任何有权访问它们的人都可以查看。显然,您不应该在其中硬编码密码或用户名之类的东西。
  • 您需要实现服务器/客户端通信。在您已经编写过的 PHP 中,您有一个特殊情况,客户端可以同时是服务器。在几乎所有其他情况下,您实现了一个隐藏数据库连接并处理用户交互的服务器。
  • 感谢您的快速回答。也许我理解错了,但在 Python 文件中,我需要连接到 mysql 数据库才能从中获取一些数据。在 php 中一切都很好,因为用户永远看不到实际的 php 文件本身,他只看到由 php 文件形成的 html 文件。所以用户永远看不到敏感的身份验证数据。在 Python 中他可以,因为它在 Python 源代码中。还是python源代码需要将用户名和密码发送到网络服务器,其他一些php文件会检查输入的值?
  • 这对于python来说也是一样的,只要我们谈论的是web应用程序。 HTML 将形成并包含您将放在那里的内容。用户只能看到前端(html 页面),而不是 python 代码,它将处理来自用户/连接数据库等的请求
  • 明白。但我试图管理一些不同的东西。实用地说:我为合成软件nuke开发了一些python脚本。用户下载脚本并安装它。在 nuke 中,他可以运行脚本。例如,我单击一个按钮,将弹出一个窗口,其中显示来自我服务器上的 mysql 数据库的数据。总而言之:python脚本在艺术家的电脑上;在该 python 脚本中,完成了与 web 服务器上的 mysql 数据库的连接; + 出于安全原因,用户可能看不到身份验证数据以自己访问网络数据库。

【解决方案1】:

作为一个很久以前从事php工作的pythoneer,我想我知道你在追求什么。

首先,HTML 代码不会包含任何数据库凭据,除非您将它们放入 HTML 视图中。构建 HTML 视图的一种简单方法是使用像 Django 这样的框架。它处理 Web 应用程序的 MVC 并连接到数据库。

如果您希望您的数据库凭据非常安全,您可以让您的 Web 应用程序在启动时要求它们,这样就永远不会将它们写在文件中。使用 keypass 或类似的密码存储系统确保它们的安全。 这样,它们也不会被签入任何版本控制系统,而数据库密码泄漏最常见的地方。

如果您是使用 python 进行 webapp 编程的新手,我建议您关注 Django tutorial ,它应该可以帮助您走上正轨。

【讨论】:

  • 非常感谢你,firelynx。我会看看 Django :-)
  • 我也建议你熟悉 Learn Python the Hard Way 这本书,特别是练习50:你的第一个网站