python优雅实现代码与敏感信息分离的方法

“12-Factor” 是构建SaaS服务的一种方法论,这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

其中有一条很重要的原则是关于配置的, 12-Factor 要求代码和配置严格分离。

为什么要这么做?

如果你的代码放在Github等外部网络,哪一天要是代码不小心泄露了,你的各种密码,密钥,等配置全都暴露于公网中,这是一件非常可怕的事。

判断一个应用是否正确的将配置与代码分离开了,一个简单方法是你的代码是否可以立刻开源,而不用担心有任何敏感信息暴露。

将应用的配置存储于环境变量中是一种常规做法,例如在命令行中加入:

export PASSWORD=123456

windows

set PASSWORD=123456业务代码中,通过环境变量来加载。

import os
env = os.environ.get("PASSWORD")
print(env)

这样做就不会将敏感信息暴露于业务代码中了,同时也可以最大程度让开发人员接触正式环境的敏感信息。

不过,问题来了,将敏感信息设置成环境变量,如果这样的信息非常多,挨个设置也太麻烦了。

你一定希望可以将这些敏感信息单独放在一个文件中,始终与代码分开管理

例如,我们在一个flask项目中,敏感信息我们专门放在一个叫.flaskenv 的文件中

.flaskenv 文件

FLASK_DEBUG=1
FLASK_ENV=local
AAA=1234

可是这些配置如何加载到环境变量中去?

python-dotenv

python-dotenv 就是专门干这事的,他能将配置文件的配置信息自动加入到环境变量。

安装 python-dotenv

pip install python-dotenv

加载配置文件

from dotenv import load_dotenv
# 加载文件
load_dotenv(".flaskenv")
import os
flask_env = os.environ.get("FLASK_ENV")
print(flask_env) # local

加载文件后,就可以通过os.environ从环境变量中读取内容。

flask配置最佳实践

在flask中,python-dotenv 可以无缝接入项目中,只要你的项目中存在 .env 或者 .flaskenv 文件,他就会提示你是否安装 python-dotenv

$ flask run
 * Tip: There are .env files present. Do "pip install python-dotenv" to use them.

安装完后python-dotenv后,就会自动加载里面的配置文件到环境变量中。

# config.py
class LocalConfig(BaseConfig):
    ENV = "development"
    FLASK_DEBUG = 1
    # 通过变量环境来加载数据库配置
    SQLALCHEMY_DATABASE_URI = os.getenv("SQLALCHEMY_DATABASE_URI")
# app.py
def create_app():
    app = Flask(__name__)
    app.config.from_object(LocalConfig)
# view.py
def hello():
    # 加载环境变量
    os.environ.get("AAA")

到此这篇关于python优雅实现代码与敏感信息分离的方法的文章就介绍到这了,更多相关python代码与敏感信息分离内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去屏蔽这些敏感词.下面我来介绍一些简单版本的敏感词屏蔽的方法. (我已经尽量把脏话做成图片的形式了,要不然文章发不出去) 方法一:replace过滤 replace就是最简单的字符串替换,当一串字符串中有可能会出现的敏感词时,我们直接使用相应的replace方法用*替换出敏感词即可. 缺点: 文本和敏感词少

  • 如何使用python-dotenv解决代码与敏感信息的分离

    目录 python-dotenv flask配置最佳实践 总结 “12-Factor” 是构建SaaS服务的一种方法论,这套理论适用于任意语言和后端服务(数据库.消息队列.缓存等)开发的应用程序. 其中有一条很重要的原则是关于配置的, 12-Factor 要求代码和配置严格分离. 为什么要这么做? 如果你的代码放在Github等外部网络,哪一天要是代码不小心泄露了,你的各种密码,密钥,等配置全都暴露于公网中,这是一件非常可怕的事. 判断一个应用是否正确的将配置与代码分离开了,一个简单方法是你的代

  • python实现对服务器脚本敏感信息的加密解密功能

    背景 在实际项目实施中,会编写很多在服务器执行的作业脚本.程序中凡是涉及到数据库链接.操作系统用户链接.IP地址.主机名称的内容都是敏感信息.在纯内网系统中往因为开发时间紧迫,往往都直接将这些敏感信息明文方式写在脚本中了. 稍微规范一点的,创建一个通用的config文件,将所有这类敏感信息记录在这个文件中,脚本以读取文件方式获取这些信息.这种方式的好处是脚本不用在应用迁移.灾备部署的时候再起不同的版本,尤其是大数据平台作业运行的脚本,如果是需要做灾备集群,这种方式可以减少生产变更时的人工干预操作

  • python优雅实现代码与敏感信息分离的方法

    “12-Factor” 是构建SaaS服务的一种方法论,这套理论适用于任意语言和后端服务(数据库.消息队列.缓存等)开发的应用程序. 其中有一条很重要的原则是关于配置的, 12-Factor 要求代码和配置严格分离. 为什么要这么做? 如果你的代码放在Github等外部网络,哪一天要是代码不小心泄露了,你的各种密码,密钥,等配置全都暴露于公网中,这是一件非常可怕的事. 判断一个应用是否正确的将配置与代码分离开了,一个简单方法是你的代码是否可以立刻开源,而不用担心有任何敏感信息暴露. 将应用的配置

  • C#隐藏手机号、邮箱等敏感信息的实现方法

    Intro 做项目的时候,页面上有一些敏感信息,需要用"*"隐藏一些比较重要的信息,于是打算写一个通用的方法. Let's do it ! Method 1:指定左右字符数量 Method 1.1 中间的*的个数和实际长度有关 /// <summary> /// 隐藏敏感信息 /// </summary> /// <param name="info">信息实体</param> /// <param name=&q

  • python用类实现文章敏感词的过滤方法示例

    过滤一遍并将敏感词替换之后剩余字符串中新组成了敏感词语,这种情况就要用递归来解决,直到过滤替换之后的结果和过滤之前一样时才算结束 第一步:建立一个敏感词库(.txt文本) 第二步:编写代码在文章中过滤敏感词(递归实现) # -*- coding: utf-8 -*- # author 代序春秋 import os import chardet # 获取文件目录和绝对路径 curr_dir = os.path.dirname(os.path.abspath(__file__)) # os.path

  • 50行Python代码获取高考志愿信息的实现方法

    最近遇到个任务,需要将高考志愿信息保存成Excel表格,BOSS丢给我一个网址表格之后就让我自己干了.虽然我以前也学习过Python编写爬虫的知识,不过时间长了忘了,于是摸索了一天之后终于完成了任务.不得不说,Python干这个还是挺容易的,最后写完一看代码,只用了50行就完成了任务. 准备工作 首先明确一下任务.首先我们要从网址表格中读取到一大串网址,然后访问每个网址,获取到页面上的学校信息,然后将它们在写到另一个Excel中.显然,我们需要一个爬虫库和一个Excel库来帮助我们完成任务. 第

  • Python抓取手机号归属地信息示例代码

    前言 本文给大家介绍的是利用Python抓取手机归属地信息,文中给出了详细的示例代码,相信对大家的理解和学习很有帮助,以下为Python代码,较为简单,供参考. 示例代码 # -*- coding:utf-8 -*- import requests,re o = open('data.txt','a') e = open('error.txt','a') baseUrl = 'http://www.iluohe.com/' r = requests.get('http://www.iluohe.

  • 将python代码和注释分离的方法

    python的注释方式和C语言.C++.java有所不同 python语言中,使用'#' 来进行注释,其次还有使用 三个引号来进行注释 本文的程序将把 python 中 使用'#' 号 好 三个引号的注释分离出来, 当然也能再次合并回去 有需求的小伙伴可以来围观了 #!/usr/bin/python #coding=utf-8 import os import sys reload(sys) sys.setdefaultencoding('utf-8') class Comment_Filter

  • Python实现一个简单的毕业生信息管理系统的示例代码

    写在前面: 从昨晚的梦里回忆起数据管理的作业: 实现一个自己的选题---- 毕业生信息管理系统,实现学生个人信息基本的增删改查, 我想了想前段时间刚学习的列表,这个简单啊 ,设计一个学生信息列表,然后列表里面再存每个学生详细信息的列表,然后来实现一个基本的增删查改,这个不难啊!直接开始撸代码! 上代码! def Menu():##菜单主界面 print('*'*22) print("* 查看毕业生列表输入: 1 *") print("* 添加毕业生信息输入: 2 *"

  • 用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码

    实现思路:分为两部分,第一部分,获取网页上数据并使用xlwt生成excel(当然你也可以选择保存到数据库),第二部分获取网页数据使用IO流将图片保存到本地 一.爬取所有英雄属性并生成excel 1.代码 import json import requests import xlwt # 设置头部信息,防止被检测出是爬虫 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (

随机推荐