ربط الأصل
يعد ربط الأصل أهم وظيفة يقدمها ZTXBAS، وهو السبب الذي يمنع مستخدمًا تعرض للتصيد من الموافقة على تسجيل دخول المهاجم.
المشكلة التي يعالجها
تجري المصادقة التقليدية متعددة العوامل عبر الإشعارات كما يلي:
- يدخل المستخدم كلمة مروره في
paypal-secure.example.com(موقع تصيد). - يمرّر المهاجم بيانات الاعتماد إلى
paypal.comالحقيقي. - يرسل PayPal الحقيقي إشعارًا إلى هاتف المستخدم: «هل توافق على تسجيل الدخول؟».
- يضغط المستخدم «موافقة» لأنه حاول للتو تسجيل الدخول.
- يصبح المهاجم داخل الحساب.
لا يعرف الهاتف الموقع الذي نشأت منه محاولة الدخول. ولا يتضمن إشعار الموافقة أصلًا يعرضه، وبالتالي لا يملك المستخدم ما يقارن به.
ما الذي يفعله ZTXBAS؟
يرتبط كل تحدٍ بأصل عند إنشائه، ويظهر هذا الأصل للمستخدم على هاتفه.

لا يستطيع التطبيق المعتمد على المصادقة (RP) إنشاء تحدٍ إلا لأصل سُجل مسبقًا عبر POST /v1/origins. ويفشل التحدي لأصل https://phishing.example.com برمز 403 UNREGISTERED_ORIGIN، لأن أي مسؤول شرعي لم يسجل ذلك الأصل.
الفحوص الثلاثة بالترتيب
عند استدعاء POST /v1/auth/challenge ينفذ ZTXBAS ثلاثة فحوص:
- التحقق من HMAC. الطلب موقّع بسر التطبيق، وهو سر لا يملكه موقع التصيد.
- التأكد من تسجيل الأصل. الأصل الذي يعلنه RP مسجل في
originsلهذا التطبيق. ولا يستطيع موقع التصيد تسجيل أصله تحت تطبيقك لأنه لا يمتلك صلاحيات الإدارة. - التأكد من وجود المستخدم. يمنع حملات التحديات التي تستهدف تعداد المستخدمين.
بعد ذلك فقط يُرسل إشعار الهاتف.
توحيد صيغة الأصل
تُوحّد الأصول قبل المقارنة:
- تُحوّل أحرف المخطط والمضيف إلى الصغيرة.
- تُزال المنافذ الافتراضية (
:443لـhttps و:80لـhttp). - تُرفض المسارات اللاحقة؛ فالأصل هو
scheme://host[:port]دون مسار.
وبالتالي يتطابق HTTPS://APP.example.com:443 وhttps://app.example.com. والصيغة الموحّدة هي التي تُربط بالتحدي وتعود في مطالبة JWT المسماة origin.
مطالبة origin داخل JWT
بعد الموافقة، يحمل JWT الأصل الموحّد داخل المطالبة origin. يستطيع نظامك الخلفي (وينبغي له) التأكد من مطابقته للأصل المتوقع:
if claims.Origin != "https://app.example.com" {
return errors.New("token issued for a different origin")
}
يسد ذلك هجومًا دقيقًا يعيد فيه المهاجم استخدام JWT حصل عليه شرعيًا لحسابه لدى أصل آخر يتحكم به.
موضوعات ذات صلة
- توقيع HMAC — كيف يثبت RP هويته.
- التحقق من JWT — كيف تتحقق من صحة التأكيد.