المصادقة
إثبات هوية المستخدم، ثم تحديد ما يحق له فعله.
المصادقة
نموذج تسجيل دخول يردّ بعبارة «هذا البريد الإلكتروني غير موجود» خلال 12 ميلي ثانية، وبعبارة «كلمة المرور غير صحيحة» خلال 180 ميلي ثانية، يكشف مجانًا أيّ الحسابات موجودة على خدمتك. لا يحتاج المهاجم حتى إلى قراءة الرسالة: فارق الزمن وحده يكفي، لأن مسار «بريد إلكتروني غير معروف» يتخطى خطوة التجزئة. وعلى قائمة من عشرة ملايين عنوان مستخرجة من تسريب سابق، يستخرج في بضع ساعات القائمة الدقيقة لمستخدميك، ثم يركّز محاولاته عليهم.
هذا النوع من التفاصيل يلخّص المصادقة: الآلية الأساسية سهلة الكتابة، والأطراف المحيطة بها هي التي تفتح الثغرات. ملف تعريف ارتباط بلا السمة HttpOnly، أو فحص دور يُطبَّق على جسم الطلب بدل الرمز المميز، أو تسجيل خروج لا يُبطل أي شيء، أو مقارنة سرّ باستخدام ===. يعالج هذا الدرس المسار الاعتيادي بسرعة ليخصّص الجزء الأكبر لهذه الأطراف، لأن الحوادث تقع هناك.
كلمات المرور
كلمة المرور لا تُشفَّر، بل تُجزَّأ — فالعملية يجب أن تكون غير قابلة للعكس. ولا تُستخدم SHA-256 لهذا الغرض: فهذه الدوال مصمَّمة لتكون سريعة، وهذا عكس ما نريده تمامًا. استخدم دالة بطيئة وقابلة للضبط، ويُفضَّل argon2id، أو bcrypt في حال تعذّره.
import argon2 from 'argon2';
const OPTIONS = {
type: argon2.argon2id,
memoryCost: 19456, // 19 Mo
timeCost: 2,
parallelism: 1,
};
export const hacher = (motDePasse) => argon2.hash(motDePasse, OPTIONS);
export const verifier = (hash, motDePasse) => argon2.verify(hash, motDePasse);
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش