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>
特此免費授予獲得此軟件副本和相關文檔文件副本(“軟件”)的任何人,以無限制處理該軟件,包括無限制的使用權,複製,複製,修改,合併,合併,發布,分發,分發,分發,訂婚,和/或允許軟件的副本,並允許對以下條件提供以下條件,以下是以下條件。
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。在任何情況下,作者或版權持有人都不應對任何索賠,損害賠償或其他責任責任,無論是在合同,侵權的訴訟中還是其他責任,是由軟件,使用或與軟件中的使用或其他交易有關的。