Flask-Vault fournit plusieurs commandes CLI et fonctions Python pour stocker des secrets que vous ne voulez pas garder en clair, en utilisant un cryptage symétrique avec AES-GCM . Ces commandes et fonctions vous permettent de lire / écrire des informations d'identification très importantes telles que les clés API, les informations d'identification de base de données, etc.
De plus, Flask-Vault contient plusieurs aides pour simplifier le chiffrement et le déchiffrement des données.
Dans le monde du développement Web, la sauvegarde des informations sensibles est une préoccupation primordiale. En ce qui concerne la gestion des informations d'identification lors de l'utilisation de Flask, deux options proéminentes émergent: Flask-Vault et Dotenv. Bien que les deux aient leurs mérites, Flask-Vault se démarque comme le choix supérieur pour garantir des données critiques.
Flask-Vault offre une solution robuste pour protéger les informations sensibles. Stockés dans un fichier Criventings.toml.enc crypté, ces données sont protégées par une couche de sécurité supplémentaire. Il ne peut être décrypté qu'avec la clé maître, garantissant que même si le fichier tombe entre de mauvaises mains, les informations restent inaccessibles.
De plus, l'éditeur chiffré, accessible via flask vault edit , permet l'édition directe sécurisée du fichier d'identification. Cette fonctionnalité est inestimable pour effectuer des ajustements rapides aux informations sensibles sans compromettre la sécurité.
Alors que Flask-Vault et Dotenv remplissent des fonctions importantes, Flask-Vault est le choix supérieur pour sécuriser les données sensibles. Son chiffrement robuste et son intégration transparente dans Flask en font la solution idéale pour gérer les informations critiques. En priorisant la sécurité sans sacrifier l'accessibilité, Flask-Vault permet aux développeurs de créer et de maintenir des applications avec la plus grande confiance dans leurs mesures de protection des données.
Le chiffrement utilisé par flask_vault est AES-GCM avec une clé 128 bits .
Voici quelques avantages de l'utilisation d'AES-GCM avec une clé 128 bits:
Sécurité: AES-GCM est considéré comme sécurisé et est largement utilisé dans diverses applications, y compris TLS (Transport Layer Security) pour sécuriser la communication sur Internet.
Efficacité: AES-GCM est connu pour être relativement efficace en termes de ressources de calcul. Ceci est particulièrement important dans les scénarios où le pouvoir de calcul peut être limité, comme sur les appareils IoT (Internet des objets).
Cryptage et déchiffrement rapides: AES-GCM est optimisé pour les processeurs modernes, ce qui signifie qu'il peut crypter et déchiffrer les données relativement rapidement. Ceci est important pour les applications sensibles à la performance.
Parallélisation: le cryptage et le déchiffrement AES-GCM peuvent être parallélisés, ce qui signifie qu'il peut profiter de plusieurs cœurs de traitement dans des processeurs modernes.
Encryption authentifiée avec les données associées (AEAD): AES-GCM fournit à la fois la confidentialité et l'intégrité, ce qui signifie que non seulement les données sont cryptées, mais elle comprend également un code d'authentification de message (Mac) pour vérifier que les données n'ont pas été falsifiées.
NONCE-BASE: AES-GCM nécessite un vecteur d'initialisation unique (IV), appelé nonce, pour chaque opération de chiffrement. Cela signifie que même si vous cryptez les mêmes données avec la même clé plusieurs fois, le texte chiffré sera différent, ajoutant une couche de sécurité supplémentaire.
Largement pris en charge: AES-GCM est soutenu par de nombreuses bibliothèques et cadres cryptographiques, ce qui en fait un choix pratique pour un large éventail d'applications.
Conformité: AES-GCM est souvent recommandé ou requis par diverses normes de sécurité et cadres de conformité.
Flask-Vault utilise quelques dépendances pour sécuriser les données et les fichiers, voici les 2 principales dépendances de cette bibliothèque:
python = " >=3.7 "
cryptography = " ^41.0.3 "Installer et mettre à jour à l'aide de PIP
$ > pip install Flask-VaultInstaller et mettre à jour en utilisant la poésie
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli pour activer 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 )
... L'éditeur par défaut utilisé par Flask-Vault est VI .
L'exemple ci-dessous montre comment utiliser un éditeur autre que VI pour afficher ou modifier les informations d'identification enregistrées dans credentials.toml.enc . Comme indiqué, l'exemple utilisera nano Editor pour utiliser la commande flask vault show .
$ > EDITOR=nano flask vault showFLASK VAULT INIT : La commande
flask vault initinitialisera l'environnement nécessaire pour que Flask-Vault fonctionne. Cette commande créera le fichiercredentials.toml.enc, le fichiermaster.keyet le dossiertmp(qui sera utilisé en interne par Flask-Vault). Si vous exécutez cette commande une deuxième fois, aucune action ne sera prise car vous ne pourrez pas écraser les fichiers créés.
Flask Vault Get [Secret_Name] : La commande
flask vault getDERALT DESCRIPTcredentials.toml.encET Afficher le secret sélectionné dans le terminal.
Flask Vault Show : La commande
flask vault showdécryptera le contenu du fichier descredentials.toml.encà l'aidemaster.keyet de l'ouvrir en mode en lecture seule pour afficher les informations d'identification enregistrées.
Flask Vault Edit : La commande
flask vault showdécryptera le contenu du fichiercredentials.toml.encà l'aide demaster.keyet de l'ouvrir en mode édition.
FLASK VAULT ECRYPT [FILENAME] : La commande
flask vault encryptcréera un fichier chiffré. Le fichier généré sera protégé par le cryptage AES-GCM et utilisera une extension.encpour la distinguer du fichier en texte en clair.
FLASK Vault Decrypt [nom de fichier] : La commande
flask vault decryptdécryptera un fichier avec l'extension.encet affichera son contenu dans le terminal.
flask_vault.utils.aes_gcm_encrypt Crypter les données sans exposer la clé de chiffrement dans l'application à l'aide de 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 Décriture des données sans exposer la clé de chiffrement dans l'application à l'aide de 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 L'exemple ci-dessous montre comment obtenir des secrets à partir du fichier d' credentials.toml.enc à l'aide de la fonction get_secret de Flask-Vault. Dans cet exemple, get_secret sera utilisé pour configurer la base de données, empêchant quiconque n'a pas accès au master.key de lire le nom d'utilisateur, le mot de passe et le nom de la base de données dans un texte clair
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc Utilisez la fonction flask_vault.utils.get_secret pour obtenir des secrets et des informations d'identification stockés dans le fichier 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 ()Questions, commentaires ou améliorations, veuillez créer un problème sur GitHub.
Pour suggérer une modification du code ou de la documentation, veuillez créer une nouvelle demande de traction sur GitHub. En outre, veuillez écraser plusieurs engagements dans un seul engagement dans votre demande de traction en repoussant la branche maître.
Si vous pensez que mon travail a été utile et que vous souhaitez soutenir ce projet et tous les futurs projets, laissez-moi un don en utilisant l'une des crypto-monnaies suivantes.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpLicence MIT
Copyright (C) 2023-présent Adriano Romanazzo <github.com/MultiversEcoder>
L'autorisation est accordée gratuitement à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copie, de modification, de fusion, de publication, de distribution, de sublince et / ou de vendre des copies des conditions suivantes.
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation sont inclus dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les détenteurs de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres relations dans le logiciel.