يوفر Flask-Vault العديد من أوامر CLI ووظائف Python لتخزين الأسرار التي لا ترغب في الاحتفاظ بها في واضحة ، باستخدام التشفير المتماثل مع AES-GCM . تتيح لك هذه الأوامر والوظائف قراءة/كتابة بيانات اعتماد مهمة للغاية مثل مفاتيح API ، وبيانات اعتماد قاعدة البيانات ، وما إلى ذلك.
بالإضافة إلى ذلك ، يحتوي Flask-Vault على العديد من المساعدين لتبسيط التشفير وفك تشفير البيانات.
في عالم تطوير الويب ، يعد حماية المعلومات الحساسة مصدر قلق كبير. عندما يتعلق الأمر بإدارة بيانات الاعتماد عند استخدام Flask ، يظهر خياران بارزان: Flask-Vault و Dotenv. على الرغم من أن كلاهما لهما مزاياهما ، إلا أن Flask-Vault تبرز كخيار متفوق لتأمين البيانات الهامة.
تقدم Flask-Vault حلاً قويًا لحماية المعلومات الحساسة. يتم تخزينها في ملف اعتماد مشفر. لا يمكن فك تشفيرها إلا مع المفتاح الرئيسي ، مما يضمن أنه حتى إذا وقع الملف في الأيدي الخطأ ، تظل المعلومات غير قابلة للوصول.
بالإضافة إلى ذلك ، يسمح المحرر المشفر ، الذي تم الوصول إليه من خلال flask vault edit ، للتحرير المباشر الآمن لملف بيانات الاعتماد. هذه الميزة لا تقدر بثمن لإجراء تعديلات سريعة على المعلومات الحساسة دون المساس بالأمان.
في حين أن كلا من قارورة الفخامة و dotenv يخدمان وظائف مهمة ، فإن قارورة القاعدة تقف كخيار متفوق لتأمين البيانات الحساسة. إن تشفيره القوي والتكامل السلس داخل Flask يجعله الحل المثالي لإدارة المعلومات الهامة. من خلال إعطاء الأولوية للأمن دون التضحية بإمكانية الوصول ، يمكّن Flask-Vault المطورين من بناء التطبيقات والحفاظ عليها مع أقصى درجات الثقة في تدابير حماية البيانات الخاصة بهم.
التشفير المستخدم من قبل flask_vault هو AES-GCM مع مفتاح 128 بت .
فيما يلي بعض فوائد استخدام AES-GCM مع مفتاح 128 بت:
الأمان: يعتبر AES-GCM آمنًا ويستخدم على نطاق واسع في تطبيقات مختلفة بما في ذلك TLS (أمان طبقة النقل) لتأمين الاتصال على الإنترنت.
الكفاءة: تشتهر AES-GCM بأنها فعالة نسبيًا من حيث الموارد الحسابية. هذا مهم بشكل خاص في السيناريوهات التي قد تكون فيها الطاقة الحسابية محدودة ، مثل أجهزة إنترنت الأشياء (إنترنت الأشياء).
التشفير السريع وفك التشفير: تم تحسين 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 . Toml.enc. كما هو موضح ، سيستخدم المثال محرر nano لاستخدام أمر 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] : سيقوم Command
flask vault getGET بفك تشفير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 [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. أيضًا ، يرجى ارتكاب العديد من الالتزامات في طلب واحد في طلب السحب عن طريق إعادة التثبيت على الفرع الرئيسي.
إذا شعرت أن عملي كان مفيدًا وكنت مهتمًا بدعم هذا المشروع وأي مشاريع مستقبلية ، فيرجى ترك تبرع لي باستخدام واحدة من العملات المشفرة التالية.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpرخصة معهد ماساتشوستس للتكنولوجيا
حقوق الطبع والنشر (C) 2023-Present Adriano Romanazzo <github.com/multiversecoder>
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام الأشخاص ونسخها ودمجها ودمجها وتوزيعها وتوزيعها على ما يلي:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لا يجوز بأي حال من الأحوال أن يكون المؤلفون أو حاملي حقوق الطبع والنشر مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو ضرر أو غير ذلك ، ناشئة عن أو خارج البرنامج أو الاستخدام أو غيرها من المعاملات في البرنامج.