تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

المصادقة (Authentication)

المصادقة تجيب عن سؤال: من أنت؟ وهي تختلف عن التفويض الذي يجيب عن: ماذا يحق لك أن تفعل؟

تخزين كلمات المرور

لا تخزن كلمة المرور نفسها، ولا تشفرها تشفيراً قابلاً للفك، ولا تستخدم دوال تجزئة سريعة مثل MD5 أو SHA-256 وحدها. استخدم خوارزمية مخصصة لكلمات المرور، بطيئة ومع ملح (salt) لكل مستخدم: Argon2id (المفضلة) أو scrypt أو bcrypt.

import argon2 from 'argon2';
const hash = await argon2.hash(password);           // عند التسجيل
const ok = await argon2.verify(hash, attempt);       // عند الدخول

الجلسات

بعد التحقق ينشئ الخادم جلسة ويرسل معرفاً عشوائياً طويلاً في ملف تعريف ارتباط (cookie):

Set-Cookie: session=<random>; HttpOnly; Secure; SameSite=Lax; Path=/
  • HttpOnly: لا تقرؤه JavaScript (يحد من سرقته عبر XSS).
  • Secure: يُرسل عبر HTTPS فقط.
  • SameSite: يحد من إرساله في طلبات من مواقع أخرى (CSRF).

جدّد معرف الجلسة عند تسجيل الدخول، وأبطله على الخادم عند تسجيل الخروج.

الرموز (Tokens)

رموز JWT موقعة ومناسبة بين الخدمات، لكن إبطالها قبل انتهاء صلاحيتها صعب. لتطبيقات الويب التقليدية تكون الجلسات المخزنة على الخادم أبسط وأسهل إبطالاً.

المصادقة متعددة العوامل

أضف عاملاً ثانياً: رمز TOTP من تطبيق مصادقة، أو مفتاح أمان (WebAuthn / Passkeys). رموز SMS أضعف لكنها أفضل من لا شيء.

الحماية من التخمين

  • حد لمحاولات الدخول لكل حساب ولكل عنوان IP.
  • رسالة خطأ موحدة: «البريد أو كلمة المرور غير صحيحة» حتى لا تكشف وجود الحساب.
  • فحص كلمات المرور الجديدة مقابل قوائم كلمات المرور المسربة.

أخطاء شائعة

  • تخزين رمز الجلسة في localStorage (تقرؤه أي JavaScript على الصفحة).
  • روابط استعادة كلمة المرور بلا انتهاء صلاحية أو قابلة لإعادة الاستخدام.

المصادر

  1. OWASP Authentication Cheat Sheet
  2. OWASP Password Storage Cheat Sheet
  3. OWASP Session Management Cheat Sheet