Flask-Vault มีคำสั่ง CLI และฟังก์ชั่น Python หลายอย่างเพื่อเก็บความลับที่คุณไม่ต้องการให้ชัดเจนโดยใช้การเข้ารหัสแบบสมมาตรด้วย AES-GCM คำสั่งและฟังก์ชั่นเหล่านี้ช่วยให้คุณอ่าน/เขียนข้อมูลรับรองที่สำคัญมากเช่นคีย์ API, ข้อมูลรับรองฐานข้อมูล ฯลฯ ได้อย่างปลอดภัย ฯลฯ
นอกจากนี้ Vlask-Vault ยังมีผู้ช่วยหลายคนเพื่อทำให้การเข้ารหัสและการถอดรหัสข้อมูลง่ายขึ้น
ในโลกของการพัฒนาเว็บการปกป้องข้อมูลที่ละเอียดอ่อนเป็นข้อกังวลที่สำคัญยิ่ง เมื่อพูดถึงการจัดการข้อมูลรับรองเมื่อใช้ขวดมีสองตัวเลือกที่โดดเด่นเกิดขึ้น: ขวดน้ำ--วิหาร และ dotenv ในขณะที่ทั้งคู่มีข้อดีของพวกเขา ห้องน้ำขนาดใหญ่โดด เด่นเป็นตัวเลือกที่เหนือกว่าสำหรับการรักษาความปลอดภัยข้อมูลที่สำคัญ
Flask-Vault นำเสนอทางออกที่แข็งแกร่งสำหรับการปกป้องข้อมูลที่ละเอียดอ่อน เก็บไว้ในไฟล์รับรองที่เข้ารหัส toml.enc ข้อมูลนี้ได้รับการป้องกันโดยเลเยอร์ที่เพิ่มเข้ามาของความปลอดภัย มันสามารถถอดรหัสด้วยคีย์หลักเท่านั้นเพื่อให้มั่นใจว่าแม้ว่าไฟล์จะตกอยู่ในมือที่ไม่ถูกต้อง แต่ข้อมูลก็ยังไม่สามารถเข้าถึงได้
นอกจากนี้ตัวแก้ไขที่เข้ารหัสซึ่งเข้าถึงได้ผ่าน flask vault edit ช่วยให้สามารถแก้ไขไฟล์รับรองได้โดยตรงอย่างปลอดภัย คุณลักษณะนี้มีค่าสำหรับการปรับเปลี่ยนข้อมูลที่ละเอียดอ่อนโดยไม่ลดทอนความปลอดภัย
ในขณะที่ทั้ง ขวดน้ำขวด และ dotenv ให้บริการฟังก์ชั่นที่สำคัญ แต่ ห้องเก็บของขวด ถือเป็นตัวเลือกที่เหนือกว่าสำหรับการรักษาความปลอดภัยข้อมูลที่ละเอียดอ่อน การเข้ารหัสที่แข็งแกร่งและการรวมเข้าด้วยกันอย่างราบรื่นภายใน Flask ทำให้เป็นโซลูชันที่เหมาะสำหรับการจัดการข้อมูลที่สำคัญ โดยการจัดลำดับความสำคัญด้านความปลอดภัยโดยไม่ต้องเสียสละการเข้าถึง ตู้ไฟขวด ช่วยให้นักพัฒนาพัฒนาเพื่อสร้างและบำรุงรักษาแอปพลิเคชันด้วยความมั่นใจสูงสุดในมาตรการป้องกันข้อมูลของพวกเขา
การเข้ารหัสที่ใช้โดย flask_vault คือ AES-GCM พร้อม คีย์ 128 บิต
นี่คือประโยชน์บางอย่างของการใช้ AES-GCM กับคีย์ 128 บิต:
ความปลอดภัย: AES-GCM ได้รับการพิจารณาว่าปลอดภัยและใช้กันอย่างแพร่หลายในแอปพลิเคชันต่าง ๆ รวมถึง TLS (การรักษาความปลอดภัยเลเยอร์การขนส่ง) สำหรับการรักษาความปลอดภัยการสื่อสารทางอินเทอร์เน็ต
ประสิทธิภาพ: AES-GCM เป็นที่รู้จักกันดีว่ามีประสิทธิภาพในแง่ของทรัพยากรการคำนวณ สิ่งนี้มีความสำคัญอย่างยิ่งในสถานการณ์ที่พลังการคำนวณอาจมี จำกัด เช่นบนอุปกรณ์ IoT (Internet of Things)
การเข้ารหัสและถอดรหัสที่รวดเร็ว: AES-GCM ได้รับการปรับให้เหมาะสมสำหรับโปรเซสเซอร์ที่ทันสมัยซึ่งหมายความว่าสามารถเข้ารหัสและถอดรหัสข้อมูลได้อย่างรวดเร็ว นี่เป็นสิ่งสำคัญสำหรับแอปพลิเคชันที่ไวต่อประสิทธิภาพ
การขยายแบบขนาน: การเข้ารหัสและการถอดรหัส AES-GCM สามารถขนานกันซึ่งหมายความว่าสามารถใช้ประโยชน์จากแกนประมวลผลหลายแกนในซีพียูที่ทันสมัย
การเข้ารหัสที่ได้รับการรับรองความถูกต้องด้วยข้อมูลที่เกี่ยวข้อง (AEAD): AES-GCM ให้ทั้งความลับและความสมบูรณ์ซึ่งหมายความว่าไม่เพียง แต่เป็นข้อมูลที่เข้ารหัส แต่ยังรวมถึงรหัสการตรวจสอบข้อความ (MAC) เพื่อตรวจสอบว่าข้อมูลไม่ได้ถูกดัดแปลงด้วย
Nonce-based: AES-GCM ต้องการเวกเตอร์การเริ่มต้นที่ไม่ซ้ำกัน (IV) ที่เรียกว่า NONCE สำหรับการเข้ารหัสแต่ละครั้ง ซึ่งหมายความว่าแม้ว่าคุณจะเข้ารหัสข้อมูลเดียวกันกับคีย์เดียวกันหลายครั้ง CipherText จะแตกต่างกันเพิ่มเลเยอร์ความปลอดภัยพิเศษ
ได้รับการสนับสนุนอย่างกว้างขวาง: AES-GCM ได้รับการสนับสนุนจากห้องสมุดและกรอบการเข้ารหัสหลายครั้งทำให้เป็นตัวเลือกที่ใช้งานได้จริงสำหรับแอพพลิเคชั่นที่หลากหลาย
การปฏิบัติตาม: AES-GCM มักจะแนะนำหรือจำเป็นตามมาตรฐานความปลอดภัยและกรอบการปฏิบัติตามกฎระเบียบ
Flask-Vault ใช้การพึ่งพาเพียงเล็กน้อยเพื่อรักษาความปลอดภัยข้อมูลและไฟล์นี่คือ 2 การพึ่งพาหลักของไลบรารีนี้:
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 เพื่อใช้คำสั่ง flask vault show
$ > EDITOR=nano flask vault showFlask Vault Init : คำสั่ง
flask vault initจะเริ่มต้นสภาพแวดล้อมที่จำเป็นสำหรับการทำงานของขวดเพื่อใช้งาน คำสั่งนี้จะสร้างไฟล์credentials.toml.enc, ไฟล์master.keyและโฟลเดอร์tmp(ซึ่งจะใช้ภายในโดย Flask-Vault) หากคุณเรียกใช้คำสั่งนี้เป็นครั้งที่สองจะไม่มีการดำเนินการใด ๆ เนื่องจากคุณจะไม่สามารถเขียนทับไฟล์ที่สร้างขึ้นได้
Flask Vault รับ [Secret_name] : คำสั่ง
flask vault getจะถอดรหัสcredentials.toml.encและแสดงความลับที่เลือกในเทอร์มินัล
Flask Vault Show : คำสั่ง
flask vault showจะถอดรหัสเนื้อหาของcredentials.toml.encโดยใช้master.keyและเปิดในโหมดอ่านอย่างเดียวเพื่อแสดงข้อมูลรับรองที่บันทึกไว้
Flask Vault Edit : คำสั่ง
flask vault showจะถอดรหัสเนื้อหาของไฟล์credentials.toml.encโดยใช้master.keyและเปิดในโหมดแก้ไข
Flask Vault Encrypt [ชื่อไฟล์] : คำสั่ง
flask vault encryptจะสร้างไฟล์ที่เข้ารหัส ไฟล์ที่สร้างขึ้นจะได้รับการปกป้องโดยการเข้ารหัส AES-GCM และจะใช้ส่วนขยาย.encเพื่อแยกความแตกต่างจากไฟล์ plaintext
Flask Vault Decrypt [ชื่อไฟล์] : คำสั่ง
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 นอกจากนี้โปรดสควอชหลายครั้งในการร้องเรียนเดียวในการร้องขอการดึงของคุณโดย rebasing ไปยังสาขาหลัก
หากคุณรู้สึกว่างานของฉันมีประโยชน์และคุณสนใจที่จะสนับสนุนโครงการนี้และโครงการในอนาคตใด ๆ โปรดปล่อยให้ฉันบริจาคโดยใช้หนึ่งใน cryptocurrencies ต่อไปนี้
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpใบอนุญาต MIT
Copyright (c) 2023-present Adriano Romanazzo <github.com/multiversecoder>
ได้รับอนุญาตโดยไม่ต้องเสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้สำเนาดัดแปลงผสานเผยแพร่เผยแพร่
ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือการติดต่ออื่น ๆ ในซอฟต์แวร์