Open Redirect
إعادة التوجيه المفتوحة Open Redirect
Open Redirect تحدث عندما يقبل موقعك وجهة إعادة توجيه من رابط أو معامل يتحكّم به المستخدم دون تحقّق، فيُستخدم رابط موقعك الموثوق كواجهة لتحويل الضحية لموقع تصيّد.
ميزة شائعة: "بعد تسجيل الدخول، عد للصفحة التي كنت فيها" — تُنفَّذ عادة بمعامل رابط مثل `?next=` أو `?returnUrl=`. لو قبل الخادم أي قيمة بهذا المعامل دون تحقّق وأعاد توجيه المتصفّح إليها مباشرة، يستطيع مهاجم صياغة رابط يبدو من نطاقك الموثوق لكنه يوجّه الضحية فعليًّا لموقع تصيّد بعد المرور بموقعك.
خطورتها ليست بالتحكّم بالخادم نفسه، بل باستغلال **ثقة المستخدم بنطاقك** كغطاء لهجوم هندسة اجتماعية.
الصياغة
GET /login?next=<وجهة يتحكّم بها المستخدم>
📄 مثال
// ✅ آمن: تحقّق من الوجهة مقابل قائمة بيضاء من المسارات الداخلية فقط
function safeRedirectTarget(next) {
if (typeof next !== "string") return "/";
if (!next.startsWith("/") || next.startsWith("//")) return "/"; // لا روابط خارجية
return next;
}
res.redirect(safeRedirectTarget(req.query.next));أهم النقاط
| النقطة | الوظيفة |
|---|---|
| next / returnUrl | معامل شائع لتحديد وجهة إعادة التوجيه بعد إجراء |
| //evil.com | شكل مسار نسبي يبدأ بشرطتين يفسَّره المتصفّح كرابط خارجي كامل |
| القائمة البيضاء | الدفاع الموثوق: اسمح فقط بمسارات داخلية معروفة، لا أي رابط |
💡 نصائح عملية
- الأسهل والأضمن: لا تقبل رابطًا كاملًا من المستخدم إطلاقًا — استخدم معرّفًا قصيرًا يُترجَم لوجهة معروفة على الخادم
⚠️ أخطاء شائعة
- التحقّق من الوجهة بفحص "هل تبدأ بـ /" فقط دون رفض "//" — لا يزال يُفسَّر كرابط خارجي بمتصفّحات كثيرة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CYBERSECURITY الكامل بالعربي.