黑客24小时在线接单的网站

黑客24小时在线接单的网站

如何优雅的处理程序中的用户名密码等敏感信息

您可能不知道敏感信息硬编码在程序中会带来多大的麻烦。

我曾经写过一个用 Python 发送 html 电子邮件和附件程序在互联网上共享。里面的收件人没有隐藏,而是使用了我最常用的电子邮件。然后,痛苦随之而来:我将继续收到测试电子邮件(垃圾邮件)。当我问其中一个发件人时,我知道培训机构使用这种教学,学生们什么都不改变,直接运行,所以我一直收到电子邮件。

与泄露密码相比,这个麻烦仍然很小。有些人不小心将包含用户名密码的程序上传到开源网站。

为了解决这个问题,有必要解耦敏感信息和程序代码。敏感信息放在一个文件中,程序代码放在另一个文件中,以避免在发布程序时上传敏感信息。一般来说,有两种方法:

1、配置文件。

可使用标准库 configparser[1] 分析配置文件。优点是不仅可以读取配置文件,还可以更新配置文件。

比如有这样的 example.ini 配置文件:

  • [DEFAULT]
  • ServerAliveInterval=45
  • Compression=yes
  • CompressionLevel=9
  • ForwardX11=yes
  • [bitbucket.org]
  • User=hg
  • [topsecret.server.com]
  • Port=50022
  • ForwardX11=no
  • 然后就可以这样读了:

  • config=configparser.ConfigParser()
  • config.read('example.ini')
  • print(config['bitbucket.org']['User'])
  • 你还可以使用一个 python 文件作为文件的配置,最优雅的方是模仿 Django,搞个默认 settings.py, ,用户自定义settings.py 用户自定义配置可以覆盖默认配置。这种方法很简单,没有记忆负担,就像写 Python 代码相同。

    2、环境变量。

    环境变量(environment variables)是指在操作系统中用来指定操作系统运行环境的一些参数,比如说安装 Python 是否需要 Python 可执行程序添加到 Path 中,这个 Path 是环境变量。

    在 Linux 或 Mac 可以这样打印环境变量:

  • echo$PATH
  • 还可以在操作系统的环境变量中写下敏感信息,然后使用 Python 读取它:

  • >>>importos
  • >>>os.environ["HOME"]
  • '/Users/aaron'
  • >>>os.getenv("HOME1111",'/home/aaron')
  • '/home/aaron'
  • >>>api_key=os.getenv("SECRET_API_KEY","NotExists")
  • 但是这样做有缺点,你需要先 export key = value 先设置环境变量,或者需要先去 .bashrc、.zshrc 等配置文件添加您需要的环境变量,如果名称相同,可能会影响其他程序使用的同名环境变量。

    毕竟,优雅的方式是在项目录中新建一个 .env 环境变量配置文件,如 .env 文件:

  • PROJECT_ID="project_id"
  • API_KEY="api_key"
  • 然后借助三方库 dotenv:

  • pipinstallpython-dotenv
  • 然后可以这样读:

  • importos
  • fromdotenvimportload_dotenv
  • #load_dotenv会找到一个.env一旦找到文件,将被加载到环境变量中
  • load_dotenv()
  • PROJECT_ID=os.getenv("PROJECT_ID")
  • API_KEY=os.getenv("API_KEY")
  • 而且这种方法不会影响任何其他程序。还有一点需要注意的是 .env 添加到你的 .gitignore。

    假如你想对 .env 文件命名也可以,比如 dev.env,然后可以这样写:

  • fromdotenvimportdotenv_values
  • config=dotenv_values("dev.env")
  • config.get("PROJECT_ID")
  • 甚至多个 env 文件也可以:

  • importos
  • fromdotenvimportdotenv_values
  • config={
  • **dotenv_values(".env.shared"),#loadshareddevelopmentvariables
  • **dotenv_values(".env.secret"),#loadsensitivevariables
  • **os.environ,#overrideloadedvalueswithenvironmentvariables
  • }
  • 请参考更多用法python-dotenv[2]

    最后

    本文介绍了两种避免硬编码敏感信息的方法:配置文件和环境变量。发布程序时注意保护敏感信息,添加 .gitignore,如有帮助,请喜欢,看,关注支持。

       
    • 评论列表:
    •  双笙迷麇
       发布于 2022-06-09 18:08:02  回复该评论
    • ron')'/home/aaron'>>>api_key=os.getenv("SECRET_API_KEY","NotExists")但是这样
    •  依疚痛言
       发布于 2022-06-09 11:44:58  回复该评论
    • , ,用户自定义settings.py 用户自定义配置可以覆盖默认配置。这种方法很简单,没有记忆负担,就像写 Python 代码相同。2、环境变量。环境变量(environment variables)是指在操作系统中用来指定操
    •  性许粢醍
       发布于 2022-06-09 19:15:17  回复该评论
    • gs.py, ,用户自定义settings.py 用户自定义配置可以覆盖默认配置。这种方法很简单,没有记忆负担,就像写 Python 代码相同。2、环境变量。环境变量(environment variables)是指在操作系统中用来指定操作系统运行环境的一些参数,比如说安
    •  断渊猫卆
       发布于 2022-06-09 13:33:24  回复该评论
    • 样读了:config=configparser.ConfigParser()config.read('example.ini')print(config['bitbucket.org']['User'])你还可以

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.