Flask-Vault bietet mehrere CLI-Befehle und Python-Funktionen, um Geheimnisse zu speichern, die Sie nicht mit symmetrischer Verschlüsselung mit AES-GCM aufbewahren möchten. Mit diesen Befehlen und Funktionen können Sie sicher sehr wichtige Anmeldeinformationen wie API -Schlüssel, Datenbankanmeldeinformationen usw. lesen/schreiben.
Darüber hinaus enthält Flask-Vault mehrere Helfer, um die Verschlüsselung und Entschlüsselung von Daten zu vereinfachen.
In der Welt der Webentwicklung ist das Schutz sensibler Informationen ein wichtiges Problem. Wenn es darum geht, Anmeldeinformationen bei der Verwendung von Flaschen zu verwalten, entstehen zwei herausragende Optionen: Flask-Vault und Dotenv. Während beide ihre Verdienste haben, fällt Flask-Vault als überlegene Wahl für die Sicherung kritischer Daten aus.
Flask-Vault bietet eine robuste Lösung zum Schutz sensibler Informationen. Diese Daten werden in einer verschlüsselten Anmeldeinformationen.Toml.enc -Datei gespeichert und werden durch eine zusätzliche Sicherheitsebene abgeschirmt. Es kann nur mit dem Hauptschlüssel entschlüsselt werden, um sicherzustellen, dass die Informationen auch dann unzugänglich sind, selbst wenn die Datei in die falschen Hände fällt.
Darüber hinaus ermöglicht der verschlüsselte Editor, auf das über flask vault edit zugegriffen wird, eine sichere direkte Bearbeitung der Anmeldeinformationen. Diese Funktion ist von unschätzbarem Wert, um schnelle Anpassungen an sensible Informationen vorzunehmen, ohne die Sicherheit zu beeinträchtigen.
Während sowohl Flask-Vault als auch Dotenv wichtige Funktionen erfüllen, ist Flask-Vault die überlegene Wahl für die Sicherung sensibler Daten. Die robuste Verschlüsselung und die nahtlose Integration in Flask machen es zur idealen Lösung für die Verwaltung kritischer Informationen. Durch die Priorisierung der Sicherheit, ohne die Zugänglichkeit zu beeinträchtigen, ermöglicht Flask-Vault Entwickler, Anwendungen mit größtem Vertrauen in ihre Datenschutzmaßnahmen zu erstellen und zu pflegen.
Die von flask_vault verwendete Verschlüsselung ist AES-GCM mit einem 128-Bit-Schlüssel .
Hier sind einige Vorteile der Verwendung von AES-GCM mit einem 128-Bit-Schlüssel:
Sicherheit: AES-GCM wird als sicher angesehen und wird in verschiedenen Anwendungen häufig verwendet, einschließlich TLS (Transport Layer Security) zur Sicherung der Internetkommunikation.
Effizienz: AES-GCM ist dafür bekannt, dass sie in Bezug auf Rechenressourcen relativ effizient sind. Dies ist besonders wichtig in Szenarien, in denen die Rechenleistung begrenzt sein kann, z. B. auf IoT -Geräten (Internet of Things).
Schnelle Verschlüsselung und Entschlüsselung: AES-GCM ist für moderne Prozessoren optimiert, was bedeutet, dass sie Daten relativ schnell verschlüsseln und entschlüsseln können. Dies ist wichtig für leistungsempfindliche Anwendungen.
Parallelisierung: AES-GCM-Verschlüsselung und Entschlüsselung können parallelisiert werden, was bedeutet, dass sie mehrere Verarbeitungskerne in modernen CPUs nutzen können.
Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD): AES-GCM bietet sowohl Vertraulichkeit als auch Integrität, was bedeutet, dass nicht nur die Daten verschlüsselt sind, sondern auch einen Nachrichtenauthentifizierungscode (MAC) enthält, um zu überprüfen, ob die Daten nicht mehr manipuliert wurden.
Nonce-basiert: AES-GCM erfordert einen eindeutigen Initialisierungsvektor (IV), der für jeden Verschlüsselungsvorgang als Nonce bezeichnet wird. Dies bedeutet, dass auch wenn Sie dieselben Daten mehrmals mit demselben Schlüssel verschlüsseln, der Chiffretext unterschiedlich ist und eine zusätzliche Sicherheitsebene hinzufügt.
Weithin unterstützt: AES-GCM wird von vielen kryptografischen Bibliotheken und Frameworks unterstützt, was es zu einer praktischen Wahl für eine Vielzahl von Anwendungen macht.
Compliance: AES-GCM wird häufig von verschiedenen Sicherheitsstandards und Compliance-Frameworks empfohlen oder erforderlich.
Flask-Vault verwendet nur wenige Abhängigkeiten, um Daten und Dateien zu sichern. Hier sind die beiden Hauptabhängigkeiten dieser Bibliothek:
python = " >=3.7 "
cryptography = " ^41.0.3 "Installieren und aktualisieren Sie mit PIP
$ > pip install Flask-VaultInstallieren und aktualisieren Sie mithilfe der Poesie
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli um Flask-Vault zu aktivieren. from flask import Flask
from flask_vault . cli import vault_cli
app = Flask ( __name__ )
...
# Register Command using the
app . cli . add_command ( vault_cli )
... Der von Flask-Vault verwendete Standard-Editor ist VI .
Das folgende Beispiel zeigt, wie Sie einen anderen Editor als VI verwenden, um Anmeldeinformationen anzuzeigen oder zu bearbeiten, die in credentials.toml.enc gespeichert sind. Wie gezeigt, verwendet das Beispiel den nano -Editor, um den Befehl flask vault show zu verwenden.
$ > EDITOR=nano flask vault showFlask Vault Init : Der Befehl
flask vault initinitialisiert die Umgebung, die für den Betrieb von Flask-Vault erforderlich ist. Dieser Befehl erstellt die Datei "credentials.toml.enc, diemaster.keyDatei und dentmpOrdner (der intern von Flask-Vault verwendet wird). Wenn Sie diesen Befehl ein zweites Mal ausführen, werden keine Maßnahmen ergriffen, da Sie die erstellten Dateien nicht überschreiben können.
Flask Vault get [secry_name] : Der Befehl
flask vault getentschlüsseltcredentials.toml.encund zeigt das ausgewählte Geheimnis in Terminal an.
Flask Vault Show : Der Befehl
flask vault showentschlüsselt die Inhalte der Dateicredentials.toml.encübermaster.keyund öffnet sie im schreibgeschützten Modus, um die gespeicherten Anmeldeinformationen anzuzeigen.
Flask Vault Bearbeiten : Der Befehl
flask vault showentschlüsselt die Inhalte der Dateicredentials.toml.encübermaster.keyund öffnet sie im Bearbeitungsmodus.
Flask Vault Encrypt [Dateiname] : Der Befehl
flask vault encrypterstellt eine verschlüsselte Datei. Die generierte Datei wird durch AES-GCM-Verschlüsselung geschützt und verwendet eine.encErweiterung, um sie von der Klartextdatei zu unterscheiden.
Flask Vault entschlüsselt [Dateiname] : Der Befehl
flask vault decryptentschlüsselt eine Datei mit der Erweiterung.encund zeigt seinen Inhalt im Terminal an.
flask_vault.utils.aes_gcm_encrypt verschlüsseln Verschlüsseln Sie Daten, ohne den Verschlüsselungsschlüssel in der Anwendung mit flask_vault.utils.aes_gcm_encrypt auszustellen
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 entschlüsseln Entschlüsseln Sie Daten, ohne den Verschlüsselungsschlüssel in der Anwendung mit flask_vault.utils.aes_gcm_decrypt auszustellen
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 , Das folgende Beispiel zeigt, wie Geheimnisse aus der Datei " credentials.toml.enc mithilfe von get_secret -Funktion von Flask-Vault abgerufen werden. In diesem Beispiel wird get_secret verwendet, um die Datenbank zu konfigurieren, und verhindert jemanden, der keinen Zugriff auf den master.key hat, das Lesen des Benutzernamens, des Kennworts und des Datenbanknamens im Löschen von Text zu lesen
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc Verwenden Sie die Funktion flask_vault.utils.get_secret , um Geheimnisse und Anmeldeinformationen in der Datei credentials.toml.enc zu erhalten.
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 ()Fragen, Kommentare oder Verbesserungen, bitte erstellen Sie ein Problem auf GitHub.
Um eine Änderung des Code oder der Dokumentation vorzuschlagen, erstellen Sie bitte eine neue Pull -Anfrage auf GitHub. Setzen Sie auch bitte mehrere Commits in ein einzelnes Commit in Ihre Pull -Anfrage ein, indem Sie auf den Master -Zweig wieder aufgenommen werden.
Wenn Sie der Meinung sind, dass meine Arbeit nützlich war und Sie daran interessiert sind, dieses Projekt und zukünftige Projekte zu unterstützen, lassen Sie mir bitte eine Spende mit einer der folgenden Kryptowährungen.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpMIT -Lizenz
Copyright (C) 2023-Present Adriano Romanazzo <github.com/multiversecoder>
Die Erlaubnis wird hiermit einer Person, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien (der "Software") erhält, kostenlos erteilt, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte, zu verwenden, zu kopieren, zu modifizieren, zusammenzufassen, zu veröffentlichen, zu veröffentlichen, zu verteilen, zu verteilt, und/oder Kopien der Software zu ermöglichen, um Personen zu beanstanden, an denen die Software zugänglich ist.
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall sind die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen haftbar, sei es in einer Vertragsklage, unerbittlich oder auf andere Weise, die sich aus oder im Zusammenhang mit der Software oder anderen Geschäften in der Software ergeben.