【问题标题】:Safe way to store mysql server credentials in flask?在烧瓶中存储mysql服务器凭据的安全方法?
【发布时间】:2018-05-22 16:22:45
【问题描述】:

我想知道我的 app.py 烧瓶应用中某些东西的安全性。首先是数据库,我使用的是 mysql,目前我通过以下方式连接到它:

# Config MySQL
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'databasename'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

对我来说这感觉很奇怪,只需将密码输入纯文本等。我​​一直在网上搜索,但除了将其放入单独的 python 文件并导入它之外,没有找到任何其他方法.哪一种感觉就像什么都不做。有没有更好的方法来做到这一点?

然后是我用于密码编码的密钥。这也只是以纯文本形式存储在我的代码中,还有没有办法让它更安全或不那么明显?

提前致谢!

【问题讨论】:

  • MySQL 凭证在编程语言中总是以明文形式出现。问题是人们可以通过使用反编译器(Java、Flash 和 Flex)或反汇编器(C、C++、C#、VB ...)对您的软件进行逆向工程并找出您的 MySQL 凭据。如果人们可以访问您的您应该公开一个 API 协议(REST、XML RPC、SOAP)或服务器客户端(SOCKETS)接口来将数据传输到 MySQL 服务器。然后将 MySQL 凭据始终保存在服务器端。
  • 这应该是一个答案!保留 mysql 服务器端并构建 API 来访问它。

标签: python mysql security flask secret-key


【解决方案1】:

运行您的代码的计算机需要知道密码,因此您无法保护计算机所有者(如果不是您)。但是,如果您在源代码中有密码,则很容易将其放入版本控制中,如果您使用公共 github,则很容易发布您的密钥。

作为替代方案,您可以将密码放在配置文件中(注意不要将其放入版本控制中,例如通过.gitignore),或者您可以使用环境变量。

【讨论】:

    【解决方案2】:

    我建议将凭据存储在操作系统环境中。

    app.config['MYSQL_HOST'] = os.environ.get('HOST')
    app.config['MYSQL_USER'] = os.environ.get('USER')
    app.config['MYSQL_PASSWORD'] = os.environ.get('PASSWORD')
    app.config['MYSQL_DB'] = os.environ.get('DB')
    app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
    

    它将帮助您从独立应用程序或作为 dockerized 应用程序(使用 docker 文件)获取这些信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      相关资源
      最近更新 更多