Flask-Vault menyediakan beberapa perintah CLI dan fungsi Python untuk menyimpan rahasia yang tidak ingin Anda simpan di bagian yang jelas, menggunakan enkripsi simetris dengan AES-GCM . Perintah dan fungsi ini memungkinkan Anda membaca/menulis kredensial yang sangat penting seperti kunci API, kredensial basis data, dll.
Selain itu, Flask-Vault berisi beberapa pembantu untuk menyederhanakan enkripsi dan dekripsi data.
Di dunia pengembangan web, melindungi informasi sensitif adalah perhatian yang terpenting. Ketika datang untuk mengelola kredensial saat menggunakan Flask, dua opsi terkemuka muncul: Flask-Vault dan DotenV. Sementara keduanya memiliki kelebihan, flask-vault menonjol sebagai pilihan superior untuk mengamankan data kritis.
Flask-Vault menawarkan solusi yang kuat untuk melindungi informasi sensitif. Disimpan dalam file kredensial terenkripsi.toml.enc, data ini dilindungi oleh lapisan keamanan tambahan. Itu hanya dapat didekripsi dengan kunci utama, memastikan bahwa bahkan jika file tersebut jatuh ke tangan yang salah, informasinya tetap tidak dapat diakses.
Selain itu, editor terenkripsi, diakses melalui flask vault edit , memungkinkan pengeditan langsung yang aman dari file kredensial. Fitur ini sangat berharga untuk membuat penyesuaian cepat untuk informasi sensitif tanpa mengorbankan keamanan.
Sementara Flask-Vault dan DotenV melayani fungsi-fungsi penting, Flask-Vault berdiri sebagai pilihan superior untuk mengamankan data sensitif. Enkripsi yang kuat dan integrasi yang mulus dalam Flask menjadikannya solusi ideal untuk mengelola informasi penting. Dengan memprioritaskan keamanan tanpa mengorbankan aksesibilitas, Vault Flask memberdayakan pengembang untuk membangun dan memelihara aplikasi dengan kepercayaan sepenuhnya dalam langkah-langkah perlindungan data mereka.
Enkripsi yang digunakan oleh flask_vault adalah AES-GCM dengan kunci 128-bit .
Berikut adalah beberapa manfaat menggunakan AES-GCM dengan kunci 128-bit:
Keamanan: AES-GCM dianggap aman dan banyak digunakan dalam berbagai aplikasi termasuk TLS (Transport Layer Security) untuk mengamankan komunikasi internet.
Efisiensi: AES-GCM dikenal sebagai relatif efisien dalam hal sumber daya komputasi. Ini sangat penting dalam skenario di mana kekuatan komputasi mungkin terbatas, seperti pada perangkat IoT (Internet of Things).
Enkripsi dan Dekripsi Cepat: AES-GCM dioptimalkan untuk prosesor modern, yang berarti dapat mengenkripsi dan mendekripsi data relatif cepat. Ini penting untuk aplikasi yang sensitif terhadap kinerja.
Paralelisasi: Enkripsi dan dekripsi AES-GCM dapat diparalelkan, yang berarti dapat memanfaatkan beberapa core pemrosesan dalam CPU modern.
Enkripsi yang diautentikasi dengan data terkait (AEAD): AES-GCM memberikan kerahasiaan dan integritas, yang berarti bahwa tidak hanya data yang dienkripsi, tetapi juga termasuk kode otentikasi pesan (Mac) untuk memverifikasi bahwa data belum dirusak.
Nonce berbasis: AES-GCM membutuhkan vektor inisialisasi yang unik (IV), yang disebut nonce, untuk setiap operasi enkripsi. Ini berarti bahwa bahkan jika Anda mengenkripsi data yang sama dengan kunci yang sama beberapa kali, ciphertext akan berbeda, menambahkan lapisan keamanan tambahan.
Didukung secara luas: AES-GCM didukung oleh banyak perpustakaan dan kerangka kerja kriptografi, menjadikannya pilihan praktis untuk berbagai aplikasi.
Kepatuhan: AES-GCM sering direkomendasikan atau diharuskan oleh berbagai standar keamanan dan kerangka kerja kepatuhan.
Flask-Vault menggunakan beberapa dependensi untuk mengamankan data dan file, berikut adalah 2 dependensi utama perpustakaan ini:
python = " >=3.7 "
cryptography = " ^41.0.3 "Instal dan Perbarui Menggunakan Pip
$ > pip install Flask-VaultInstal dan Perbarui Menggunakan Puisi
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli untuk mengaktifkan 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 )
... Editor default yang digunakan oleh Flask-Vault adalah VI .
Contoh di bawah ini menunjukkan cara menggunakan editor selain VI untuk menunjukkan atau mengedit kredensial yang disimpan dalam credentials.toml.enc . Seperti yang ditunjukkan, contoh akan menggunakan editor nano untuk menggunakan perintah flask vault show .
$ > EDITOR=nano flask vault showFlask Vault Init : Perintah
flask vault initakan menginisialisasi lingkungan yang diperlukan untuk Flask-Vault untuk beroperasi. Perintah ini akan membuat filecredentials.toml.enc, filemaster.keydan foldertmp(yang akan digunakan secara internal oleh flask-vault). Jika Anda menjalankan perintah ini untuk kedua kalinya, tidak ada tindakan yang akan diambil karena Anda tidak akan dapat menimpa file yang dibuat.
Flask Vault Dapatkan [Secret_Name] : Perintah
flask vault getakan mendekripsicredentials.toml.encdan menampilkan rahasia yang dipilih di terminal.
Flask Vault Show : Perintah
flask vault showakan mendekripsi konten filecredentials.toml.encmenggunakanmaster.keydan buka dalam mode read-only untuk menunjukkan kredensial yang disimpan.
Flask Vault Edit : Perintah
flask vault showakan mendekripsi konten filecredentials.toml.encmenggunakanmaster.keydan buka dalam mode edit.
Enkripsi Flask Vault [Nama file] : Perintah
flask vault encryptakan membuat file terenkripsi. File yang dihasilkan akan dilindungi oleh enkripsi AES-GCM dan akan menggunakan ekstensi.encuntuk membedakannya dari file plaintext.
Flask Vault Decrypt [nama file] : Perintah
flask vault decryptakan mendekripsi file dengan ekstensi.encdan menampilkan isinya di terminal.
flask_vault.utils.aes_gcm_encrypt Mengenkripsi data tanpa mengekspos kunci enkripsi dalam aplikasi menggunakan 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 Mendekripsi data tanpa mengekspos kunci enkripsi dalam aplikasi menggunakan 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 Contoh di bawah ini menunjukkan cara mendapatkan rahasia dari file credentials.toml.enc menggunakan fungsi get_secret Flask-Vault. Dalam contoh ini get_secret akan digunakan untuk mengonfigurasi database, mencegah siapa pun yang tidak memiliki akses ke master.key dari membaca nama pengguna, kata sandi, dan nama basis data dalam teks yang jelas
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc Gunakan fungsi flask_vault.utils.get_secret untuk mendapatkan rahasia dan kredensial yang disimpan di dalam file 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 ()Pertanyaan, komentar atau peningkatan, silakan buat masalah di GitHub.
Untuk menyarankan perubahan pada kode atau dokumentasi, silakan buat permintaan tarik baru di GitHub. Juga, silakan hasahkan beberapa komit ke dalam satu komit dalam permintaan tarik Anda dengan rebasing ke cabang master.
Jika Anda merasa bahwa pekerjaan saya bermanfaat dan Anda tertarik untuk mendukung proyek ini dan proyek masa depan, silakan tinggalkan saya sumbangan menggunakan salah satu cryptocurrency berikut.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpLisensi MIT
Hak Cipta (C) 2023-Present Adriano Romanazzo <github.com/multiversecoder>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam perangkat lunak.