سجل التعديلات
الفرق مقارنةً بالنسخة السابقة
+ **المصادقة** تجيب عن سؤال: **من أنت؟** وهي تختلف عن [التفويض](/wiki/authorization) الذي يجيب عن: **ماذا يحق لك أن تفعل؟**+ ## تخزين كلمات المرور++ لا تخزن كلمة المرور نفسها، ولا تشفرها تشفيراً قابلاً للفك، ولا تستخدم دوال تجزئة سريعة مثل MD5 أو SHA-256 وحدها. استخدم خوارزمية مخصصة لكلمات المرور، بطيئة ومع ملح (salt) لكل مستخدم: **Argon2id** (المفضلة) أو **scrypt** أو **bcrypt**.++ ```js+ 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 على الصفحة).+ - روابط استعادة كلمة المرور بلا انتهاء صلاحية أو قابلة لإعادة الاستخدام.
مقال مرجعي رسمي من فريق عرب كود
ملاحظة المراجعة: Approved for publication: site owner written instruction 2026-10-24 (final completion directive: populate the wiki via the official editorial identity)