المصادقة الآمنة في C#: حماية لا يمكن اختراقها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كلمة مرورك ليست مجرد سلسلة نصية: لماذا تتطلب المصادقة في C# نهجًا خاصًا

\n\n

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

\n\n

في هذه المقالة، سنناقش ليس فقط النظرية، بل طرق الحماية الفعلية: من التجزئة الصحيحة لكلمات المرور إلى تطبيق JWT و OAuth. ستتعرف على لماذا SHA256 بدون ملح هو شر، وكيف لا تقع في فخ هجمات التخمين، وماذا تفعل إذا كان مشروعك قد تجاوز طرق المصادقة "الأولية". هيا بنا!

\n\n

أركان الأمان الثلاثة: التجزئة، الملح، والخوارزميات البطيئة

\n\n

أكثر نمط معادي شيوعًا للمبتدئين هو تخزين كلمات المرور بنص واضح أو استخدام MD5 العادي. حتى لو كان لديك "مجرد مشروع تعليمي"، فإن العادة تترسخ. المصادقة الآمنة في C# تبدأ بثلاث قواعد:

\n\n
    \n
  • لا تخزن كلمات المرور بنص واضح أبدًا. حتى في قاعدة البيانات المحلية.
  • \n
  • استخدم الملح (salt) - سلسلة عشوائية لكل مستخدم.
  • \n
  • اختر خوارزميات بطيئة - BCrypt، PBKDF2، Argon2.
  • \n
\n\n

لماذا "بطيئة"؟ لأن المخترق يحتاج إلى تجربة مليارات التركيبات في الثانية. إذا استغرقت التجزئة 0.1 ثانية، يصبح الهجوم غير مربح اقتصاديًا.

\n\n

التجزئة الصحيحة لكلمات المرور في C# باستخدام BCrypt

\n\n

BCrypt هو المعيار الذهبي لمطوري .NET. هو يولد الملح بنفسه ويضمنه في التجزئة. لست بحاجة لتخزين الملح بشكل منفصل.

\n\n

قم بتثبيت الحزمة عبر NuGet:

\n
Install-Package BCrypt.Net-Next
\n\n

الآن مثال لتسجيل المستخدم:

\n\n
using BCrypt.Net;\n\npublic class AuthService\n{\n    public string HashPassword(string plainPassword)\n    {\n        // Work factor = 12 — التوازن الأمثل بين السرعة والأمان\n        return BCrypt.HashPassword(plainPassword, workFactor: 12);\n    }\n\n    public bool VerifyPassword(string plainPassword, string hashedPassword)\n    {\n        return BCrypt.Verify(plainPassword, hashedPassword);\n    }\n}\n\n// الاستخدام:\nvar auth = new AuthService();\nstring hash = auth.HashPassword("MyS3cur3P@ss!");\nbool isValid = auth.VerifyPassword("MyS3cur3P@ss!", hash); // true
\n\n

لاحظ: workFactor (عامل التكلفة) يحدد عدد مرات تكرار التجزئة التي سيتم تنفيذها. 12 قيمة جيدة لعام 2024. إذا كان خادمك قويًا، يمكن رفعه إلى 13-14.

\n\n

PBKDF2 — أداة .NET المدمجة

\n\n

إذا كنت لا تريد مكتبات خارجية، استخدم Rfc2898DeriveBytes - وهو تطبيق PBKDF2 المدمج في .NET. مثال:

\n\n
using System.Security.Cryptography;\n\npublic static string HashWithPBKDF2(string password, byte[] salt, int iterations = 100_000)\n{\n    using var deriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.SHA256);\n    byte[] hash = deriveBytes.GetBytes(32); // 32 بايت = 256 بت\n    return Convert.ToBase64String(salt) + ":" + Convert.ToBase64String(hash);\n}\n\n// توليد الملح (16 بايت)\nbyte[] salt = RandomNumberGenerator.GetBytes(16);\nstring result = HashWithPBKDF2("userPassword", salt);
\n\n

هام: لا تستخدم أقل من 100,000 تكرار. وحدات معالجة الرسوميات الحديثة يمكنها تجربة ملايين التجزئات في الثانية.

\n\n

JWT — المصادقة الحديثة بدون جلسات

\n\n

عندما ينمو تطبيق C# الخاص بك ليصبح خدمات مصغرة أو SPA (React، Vue)، يصبح تخزين الجلسات على الخادم غير مريح. هنا تأتي JSON Web Tokens (JWT) - رموز وصول مدمجة ومكتفية ذاتيًا.

\n\n

المصادقة الآمنة في C# مع JWT تُبنى على ثلاثة مبادئ:

\n
    \n
  • ت

المدونات

توصيات الكتب