Flask-Vault предоставляет несколько команд CLI и функций Python для хранения секретов, которые вы не хотите сохранять в чистоте, используя симметричное шифрование с AES-GCM . Эти команды и функции позволяют вам безопасно читать/писать очень важные учетные данные, такие как клавиши API, учетные данные базы данных и т. Д.
Кроме того, Flask-Vault содержит несколько помощников, чтобы упростить шифрование и дешифрование данных.
В мире веб -разработки защита конфиденциальной информации является первостепенной проблемой. Когда дело доходит до управления учетными данными при использовании колбы, появляются два заметных варианта: Flask-Vault и Dotenv. В то время как оба имеют свои достоинства, Flask-Vault выделяется как превосходный выбор для обеспечения критических данных.
Flask-Vault предлагает надежное решение для защиты конфиденциальной информации. Сохраненные в зашифрованном файле учетных данных. Его можно расширить только с помощью мастер -ключа, гарантируя, что даже если файл падает в чужие руки, информация остается недоступной.
Кроме того, зашифрованный редактор, доступный через flask vault edit , допускает безопасное прямое редактирование файла учетных данных. Эта функция неоценима для внесения быстрых корректировок в конфиденциальную информацию без ущерба для безопасности.
В то время как Flask-Vault и Dotenv выполняют важные функции, Flask-Vault выступает в качестве превосходного выбора для обеспечения конфиденциальных данных. Его надежное шифрование и бесшовная интеграция в колбе делают его идеальным решением для управления критической информацией. Рассказывая приоритетом безопасности, не жертвуя доступностью, Flask-Vault дает разработчикам создавать и поддерживать приложения с максимальной уверенностью в своих мерах защиты данных.
Шифрование, используемое flask_vault , является AES-GCM с 128-битным ключом .
Вот некоторые преимущества использования AES-GCM с 128-битным ключом:
Безопасность: AES-GCM считается безопасным и широко используется в различных приложениях, включая TLS (безопасность транспортного уровня) для обеспечения общения в Интернете.
Эффективность: AES-GCM известен тем, что является относительно эффективным с точки зрения вычислительных ресурсов. Это особенно важно в сценариях, где вычислительная мощность может быть ограничена, например, на устройствах IoT (Интернет вещей).
Быстрое шифрование и дешифрование: AES-GCM оптимизирован для современных процессоров, что означает, что он может относительно быстро шифровать и расшифровать данные относительно быстро. Это важно для чувствительных к производительности приложений.
Параллелизация: шифрование и дешифрование AES-GCM могут быть параллелизированы, что означает, что он может воспользоваться несколькими ядрами обработки в современных процессорах.
Аутированное шифрование с соответствующими данными (AEAD): AES-GCM обеспечивает как конфиденциальность, так и целостность, что означает, что данные не только зашифрованы, но также включают код аутентификации сообщений (MAC), чтобы убедиться, что данные не были подделаны.
На основе Nonce: AES-GCM требуется уникальный вектор инициализации (IV), называемый nonce, для каждой операции шифрования. Это означает, что даже если вы шифруете одни и те же данные с одним и тем же ключом несколько раз, зашифрованный текст будет отличаться, добавив дополнительный уровень безопасности.
Широко поддерживается: AES-GCM поддерживается многими криптографическими библиотеками и рамками, что делает его практическим выбором для широкого спектра приложений.
Соответствие: AES-GCM часто рекомендуется или требуется различными стандартами безопасности и рамками соответствия.
Flask-Vault использует мало зависимостей для обеспечения данных и файлов, вот две основные зависимости этой библиотеки:
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 showFlask Vault Init : Команда
flask vault initбудет инициализировать среду, необходимую для работы Flask-Vault. Эта команда создаст файлcredentials.toml.enc, файлmaster.keyи папкуtmp(который будет использоваться внутри Flask-Vault). Если вы запустите эту команду во второй раз, никаких действий не будет предпринято, поскольку вы не сможете перезаписать созданные файлы.
Flask Vault Get [secret_name] : Команда
flask vault getбудет расшифроватьcredentials.toml.enc.
Показ Flask Vault : Команда
flask vault showрасширит содержимое файлаcredentials.toml.encс использованиемmaster.keyи откроет его в режиме только для чтения, чтобы показать сохраненные учетные данные.
Редактировать Flask Vault : Команда
flask vault showрасширит содержимое файлаcredentials.toml.encс использованиемmaster.keyи откроет его в режиме редактирования.
Flask Vault Encrypt [FileName] : Команда
flask vault encryptсоздаст зашифрованный файл. Сгенерированный файл будет защищен путем шифрования AES-GCM и будет использовать расширение.enc, чтобы отличить его от файла открытого текста.
Flask Vault Decrypt [Filename] : Команда
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 В приведенном ниже примере показано, как получить секреты из файла credentials.toml.enc , используя функцию get_secret от Flask-Vault. В этом примере 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. Кроме того, пожалуйста, раздавите несколько коммитов в один коммит в вашем запросе на притяжение, перебив главную филиал.
Если вы чувствуете, что моя работа была полезна, и вы заинтересованы в поддержке этого проекта и любых будущих проектах, пожалуйста, оставьте мне пожертвование, используя одну из следующих криптовалют.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpMIT Лицензия
Copyright (C) 2023-Present Adriano Rommanazzo <github.com/multiversecoder>
Настоящим дается разрешение, бесплатно, любому лицу, получающему копию этого программного обеспечения и связанные с ними файлы документации («Программное обеспечение»), чтобы иметь дело в программном обеспечении без ограничений, включая, без ограничения, права на использование, копирование, изменение, объединение, публикацию, распределение, сублиценность и/или продавать копии программного обеспечения и разрешения лиц, на которые программное обеспечение подходит для того, чтобы поступить так, чтобы поступить на следующие условия: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: к следующим условиям: на следующие условия: к следующим условиям: на следующие условия: на следующие условия.
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть», без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и несоответствия. Ни в коем случае авторы или владельцы авторских прав не будут нести ответственность за любые претензии, убытки или другую ответственность, будь то в действии контракта, деликт или иным образом, возникающие из или в связи с программным обеспечением или использованием или другими сделками в программном обеспечении.