Aller au contenu principal
NUKOE

بناء كاشف تسرب كلمات المرور في بايثون: دليل عملي خطوة بخطوة

• 6 min •
Capture d'écran d'un vérificateur de fuites de mots de passe en Python

تخيل هذا: تستخدم نفس كلمة المرور على مواقع متعددة منذ سنوات. في صباح أحد الأيام، تتلقى تنبيهاً يفيد بأن بيانات اعتمادك تنتشر على الويب المظلم. هذا الموقف ليس افتراضياً – فهو يحدث يومياً لآلاف المستخدمين. ومع ذلك، فإن معظم المطورين يجهلون كيفية التحقق بشكل استباقي مما إذا كانت كلمات مرورهم قد تم اختراقها.

على عكس ما قد يعتقده المرء، لا تحتاج إلى أن تكون خبيراً في الأمن السيبراني لإنشاء أدوات حماية أساسية. في أقل من 50 سطراً من كود بايثون، يمكنك بناء مدقق لتسرب كلمات المرور يستخدم بيانات فعلية من الانتهاكات. يرشدك هذا المقال خطوة بخطوة في إنشاء مثل هذه الأداة، موضحاً لماذا هذا النهج أكثر فعالية من الفحوصات اليدوية وكيفية دمجه في سير عمل التطوير الخاص بك.

لماذا فحص ملفات النص بحثاً عن كلمات مرور واضحة؟

قبل التحقق مما إذا كانت كلمة المرور قد تسربت عبر الإنترنت، يجب أولاً التأكد من أنها غير مخزنة بشكل واضح في الكود أو ملفات التكوين الخاصة بك. كما يشير مستخدم في مجتمع Spiceworks، فإن البحث عن كلمات مرور مُشفرة في ملفات النص هو مصدر قلق حقيقي لفرق تكنولوجيا المعلومات. يمكن تكييف سكريبت بايثون الذي سنطوره لفحص الدلائل بحثاً عن سلاسل أحرف تشبه كلمات المرور – خط الدفاع الأول الذي غالباً ما يتم إهماله.

يتكون النهج التقليدي من البحث عن أنماط محددة، ولكن كما تلاحظ المناقشة على Spiceworks، فإن هذه الطريقة لها حدودها. قد تتجنب كلمة مرور مثل "P@ssw0rd2025!" بحثاً يعتمد على مصطلح "password". لهذا السبب ستركز أداتنا أولاً على التحقق الخارجي عبر قواعد بيانات التسربات المعروفة.

واجهة برمجة التطبيقات Have I Been Pwned: حليفك ضد التسريبات

سيعتمد قلب كاشفنا على واجهة برمجة التطبيقات Have I Been Pwned (HIBP)، وهي خدمة يديرها Troy Hunt تجمع مليارات الحسابات المخترقة. بدلاً من إرسال كلمة المرور بشكل واضح، سنستخدم تقنية k-anonymity: حيث يتم إرسال بادئة فقط من تجزئة SHA-1 لكلمة المرور، مما يحافظ على الخصوصية. ثم تُرجع واجهة برمجة التطبيقات القائمة الكاملة للتجزئات المطابقة لهذه البادئة، والتي سنقارنها محلياً مع التجزئة الكاملة.

يمثل هذا النهج، الموصوف في مقالة من مجتمع DEV، الطريقة الموصى بها للتحقق من التسريبات دون الكشف عن كلمة المرور الأصلية. فهو يجمع بين الكفاءة واحترام الخصوصية – وهما جانبان حاسمان غالباً ما يكونان في حالة توتر في أدوات الأمان.

الكود: سكريبت بايثون من ثلاثة أجزاء

1. تثبيت التبعيات

يتطلب سكريبتنا فقط مكتبة `requests`، والتي يمكنك تثبيتها عبر pip:

pip install requests

2. وظيفة التجزئة الآمنة

import hashlib
import requests

def check_password_leak(password):
    # إنشاء تجزئة SHA-1 لكلمة المرور
    sha1_hash = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
    prefix = sha1_hash[:5]
    suffix = sha1_hash[5:]
    
    # استعلام واجهة برمجة التطبيقات HIBP
    url = f"https://api.pwnedpasswords.com/range/{prefix}"
    response = requests.get(url)
    
    if response.status_code == 200:
        hashes = (line.split(':') for line in response.text.splitlines())
        for h, count in hashes:
            if h == suffix:
                return True, int(count)
        return False, 0
    else:
        raise Exception("فشل طلب واجهة برمجة التطبيقات")

3. واجهة مستخدم بسيطة

def main():
    print("=== مدقق تسرب كلمات المرور ===")
    password = input("أدخل كلمة المرور للتحقق: ")
    
    try:
        leaked, count = check_password_leak(password)
        if leaked:
            print(f"⚠️  تم العثور على كلمة المرور هذه في {count} تسرب للبيانات.")
            print("التوصية: قم بتغييرها فوراً.")
        else:
            print("✅ لم يتم العثور على كلمة المرور هذه في التسريبات المعروفة.")
            print("ملاحظة: هذا لا يضمن قوتها أو أمانها.")
    except Exception as e:
        print(f"خطأ: {e}")

if name == "main":
    main()

ما وراء التحقق: التوليد والتخزين الآمن

التحقق من التسريبات هو مجرد جزء من المعادلة. إذا تم اختراق كلمة مرورك، فيجب استبدالها – ولكن بماذا؟ كما يشير Stack Overflow، في بايثون 3.6+، يجب استخدام وحدة `secrets` لتوليد كلمات مرور آمنة من الناحية التشفيرية. إليك مثالاً تكميلياً:

import secrets
import string

def generate_secure_password(length=16):
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

بمجرد إنشاء كلمة مرور جديدة، تبرز مسألة التخزين. يتناول موضوع آخر في Stack Overflow هذه المشكلة بالضبط: كيفية تخزين بيانات الاعتماد بشكل آمن في سكريبت بايثون؟ تتراوح الحلول من التشفير المحلي إلى استخدام خزائن كلمات مرور مخصصة، مروراً برموز الوصول الشخصية مثل تلك الموصوفة في وثائق Microsoft لـ Azure DevOps.

التطبيقات العملية والقيود

يمكن توسيع هذا السكريبت الأساسي بعدة طرق:

  • فحص ملفات التكوين تلقائياً بحثاً عن كلمات مرور مُشفرة (كما تمت مناقشته في مجتمع Spiceworks)
  • دمج التحقق في خط أنابيب CI/CD للتنبيه إذا تم إرسال بيانات اعتماد حساسة عن طريق الخطأ
  • إنشاء واجهة ويب بسيطة للفرق غير التقنية

ومع ذلك، فإنه يعرض قيوداً مهمة. فهو يتحقق فقط ضد التسريبات الموثقة بالفعل في HIBP. قد تمر كلمة مرور ضعيفة ولكن لم يتم تسريبها بعد عبر الاختبار. لهذا السبب تتضمن KnowledgeHut مشاريع اختبار قوة كلمة المرور في قائمة مشاريع الأمن السيبراني الخاصة بها – فالنهجان مكملان لبعضهما البعض.

المستقبل: عندما يلتقي التعلم العميق بأمن كلمات المرور

ينبثق نهج رائع من جانب البحث: استخدام التعلم العميق لتحديد كلمات المرور في الملفات أو الكود. يستخدم مشروع DeepPass، المقدم على SpecterOps، نماذج التعلم العميق للكشف عن "مرشحي كلمات المرور" في سياقات متنوعة. على الرغم من أن تنفيذه أكثر تعقيداً من سكريبتنا البسيط، إلا أن هذا الاتجاه يوضح كيف يمكن للذكاء الاصطناعي في المستقبل أتمتة اكتشاف التكوينات الخطرة.

الخلاصة: الأمن كممارسة يومية

بناء مدقق لتسرب كلمات المرور في بايثون ليس مجرد تمرين تقني – إنه اعتماد عقلية استباقية في مواجهة المخاطر الرقمية. من خلال فهم كيفية عمل هذه الأدوات، تصبح مجهزاً بشكل أفضل لتقييم أمان ممارساتك الخاصة ومشاريعك.

الكود المقدم هنا هو نقطة انطلاق. يمكنك توسيعه للتعامل مع قوائم كلمات المرور، أو إضافة اختبارات قوة أساسية، أو دمجه في عمليات تدقيق منتظمة. في عالم حيث، وفقاً لمقالة مجتمع DEV، تنتشر مليارات بيانات الاعتماد على الويب المظلم، يمكن لهذه الأسطر القليلة من بايثون أن تحدث الفرق بين أمان وهمي وحماية حقيقية.

ابدأ باختبار كلمات مرورك الخاصة – قد تفاجئك النتائج. ثم شارك هذه الأداة مع فريقك. الأمن ليس شأن خبراء فقط؛ إنه مسؤولية جماعية تبدأ بأدوات يمكن الوصول إليها.

للمزيد