Flask-Vault提供了几个CLI命令和Python功能,以存储您不想使用AES-GCM对称加密保存在清晰中的秘密。这些命令和功能使您可以安全地读取/编写非常重要的凭据,例如API密钥,数据库凭据等。
此外,烧瓶拱门包含几个帮助者,以简化数据的加密和解密。
在Web开发的世界中,保护敏感信息是最重要的问题。当涉及到使用烧瓶时管理凭据时,出现了两个突出的选项:烧瓶库和dotenv。尽管两者都有自己的优点,但烧瓶拱门却是确保关键数据的优越选择。
Flask-vault提供了一种可保护敏感信息的强大解决方案。存储在加密的凭证中。toml.enc文件,该数据被附加的安全层屏蔽。它只能用主键解密,确保即使文件落入错误的手中,信息也无法访问。
此外,通过flask vault edit访问的加密编辑器允许对凭据文件进行安全的直接编辑。此功能对于在不损害安全性的情况下快速调整敏感信息是无价的。
虽然烧瓶资和Dotenv都具有重要功能,但烧瓶库是确保敏感数据的卓越选择。它在烧瓶中的强大加密和无缝集成使其成为管理关键信息的理想解决方案。通过在不牺牲可访问性的情况下优先考虑安全性,烧瓶库使开发人员能够在其数据保护措施中建立和维护应用程序。
flask_vault使用的加密是带有128位键的AES-GCM 。
以下是使用128位密钥使用AES-GCM的一些好处:
安全性:AES-GCM被认为是安全的,并且广泛用于各种应用程序中,包括用于确保Internet通信的TLS(运输层安全性)。
效率:AES-GCM以相对有效的计算资源而闻名。在计算能力可能受到限制的情况下,例如在物联网(物联网)设备上,这一点尤其重要。
快速加密和解密:AES-GCM针对现代处理器进行了优化,这意味着它可以相对较快地对数据进行加密和解密数据。这对于对性能敏感的应用很重要。
并行化:AES-GCM加密和解密可以并行化,这意味着它可以利用现代CPU中的多个处理核心。
具有关联数据(AEAD)的身份验证的加密:AES-GCM既提供机密性和完整性,这不仅意味着数据加密,而且还包括消息认证代码(MAC)以验证数据尚未篡改数据。
基于NONCE的:AES-GCM需要每个加密操作的唯一初始化向量(IV),称为nonce。这意味着,即使您多次使用相同的密钥加密相同的数据,Ciphertext也会有所不同,从而增加了额外的安全性。
广泛支持:AES-GCM受到许多加密库和框架的支持,使其成为广泛应用程序的实用选择。
合规性:经常通过各种安全标准和合规框架建议或要求AES-GCM。
烧瓶库利用很少的依赖项来保护数据和文件,以下是该库的两个主要依赖关系:
python = " >=3.7 "
cryptography = " ^41.0.3 "使用PIP安装和更新
$ > pip install Flask-Vault使用诗歌安装和更新
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli启用Flask-Vault 。 from flask import Flask
from flask_vault . cli import vault_cli
app = Flask ( __name__ )
...
# Register Command using the
app . cli . add_command ( vault_cli )
...Flask-Vault使用的默认编辑器为VI 。
下面的示例显示了如何使用vi以外的其他编辑器显示或编辑凭据保存的credentials.toml.enc 。如图所示,该示例将使用nano Editor使用flask vault show命令。
$ > EDITOR=nano flask vault show烧瓶保险库初始化:
flask vault init命令将初始化烧瓶库操作所需的环境。此命令将创建credentials.toml.enc文件,master.key文件和tmp文件夹(将通过烧瓶内部使用)。如果您第二次运行此命令,则不会采取任何措施,因为您将无法覆盖创建的文件。
烧瓶库get [secret_name] :
flask vault get命令将解密credentials.toml.enc,并在终端显示所选秘密。
烧瓶库秀:
flask vault show命令将使用master.key解密credentials.toml.enc文件的内容,并以仅读取模式打开它以显示保存的凭据。
烧瓶保险库编辑:
flask vault show命令将使用master.key解密credentials.toml.enc文件的内容,并在编辑模式下打开它。
烧瓶保险库加密[文件名] :
flask vault encrypt命令将创建一个加密文件。生成的文件将受AES-GCM加密保护,并将使用.enc扩展名将其与明文文件区分开。
烧瓶保险库解密[文件名] :
flask vault decrypt命令将解密带有扩展.enc的文件,并在终端中显示其内容。
flask_vault.utils.aes_gcm_encrypt加密数据加密数据而不使用flask_vault.utils.aes_gcm_encrypt在应用程序中公开加密密钥
from flask import Flask
from flask_vault . utils import aes_gcm_encrypt
app = Flask ( __name__ )
@ app . route ( "/encrypted" , methods = [ "GET" ])
def encrypted ():
ctx = {
"encrypted" : aes_gcm_encrypt ( "my.app.secret" )
}
return render_template ( "encrypted.html" , ** ctx )flask_vault.utils.aes_gcm_decrypt解密数据解密数据而不使用flask_vault.utils.aes_gcm_decrypt在应用程序中公开加密密钥
from flask import Flask
from flask_vault . utils import aes_gcm_decrypt
app = Flask ( __name__ )
@ æpp . route ( "/decrypt" , methods = [ "GET" ])
def decrypt ():
encrypted_data = request . args . get ( "encrypted" , None )
ctx = {
"plaintext" : aes_gcm_decrypt ( encrypted_data ) if encrypted_data is not None else "Missing encrypted data!"
}
return render_template ( "decrypt.html" , ** ctx )credentials.toml.enc文件下面的示例显示了如何使用flask-vault的get_secret函数从credentials.toml.enc文件获取秘密。在此示例中, get_secret将用于配置数据库,以防止任何无法访问master.key人。
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc获取秘密使用flask_vault.utils.get_secret函数获取存储在credentials.toml.enc文件中的秘密和凭据。
flask_vault.utils.get_secret import sys
import mariadb
from flask import Flask , request , g
from flask_vault . utils import get_secret
app = Flask ( __name__ )
def get_db ():
db = getattr ( g , "_database" , None )
if db is None :
try :
conn = mariadb . connect (
user = get_secret ( "db" ). get ( "username" ),
password = get_secret ( "db" ). get ( "password" ),
host = "127.0.0.1" ,
port = 3306 ,
database = get_secret ( "db" ). get ( "name" ),
)
db = g . _database = conn
except mariadb . Error as e :
print ( f"Error connecting to MariaDB Platform: { e } " )
sys . exit ( 1 )
return db
@ app . teardown_appcontext
def close_connection ( exception ):
db = getattr ( g , "_database" , None )
if db is not None :
db . close ()问题,评论或改进,请在GitHub上创建一个问题。
要建议对代码或文档进行更改,请在GitHub上创建一个新的拉请请求。另外,请通过重新打入主分支,将多个承诺挤入您的拉力请求中的单一提交中。
如果您认为我的工作很有用,并且有兴趣支持该项目和任何未来的项目,请使用以下加密货币之一给我捐款。
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawp麻省理工学院许可证
版权(c)2023-present adriano romanazzo <github.com/multiversecoder>
特此免费授予获得此软件副本和相关文档文件副本(“软件”)的任何人,以无限制处理该软件,包括无限制的使用权,复制,复制,修改,合并,合并,发布,分发,分发,分发,订婚,和/或允许软件的副本,并允许对以下条件提供以下条件,以下是以下条件。
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人都不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权的诉讼中还是其他责任,是由软件,使用或与软件中的使用或其他交易有关的。