شرح صفوف ومحتوى الفقرة
يُعيد استدعاء window.location.reload() تحميل الصفحة الحالية من جديد (وتُستدعى قياسياً بلا أي معاملات لأن المتصفحات الحديثة أهملت المعامل القديم true).
قاعدة أمنية حاسمة (الوقاية من التوجيه المفتوح وDOM XSS): تقرأ كثير من المواقع معامل عودة بعد تسجيل الدخول مثل ?returnTo=/profile لتوجيه المستخدم إليه؛ فإذا زوّر مهاجم الرابط ليصبح ?returnTo=https://phish.example (ثغرة Open Redirect) أو ?returnTo=javascript:alert(1) (ثغرة DOM XSS)، فإن التوجيه الأعمى يوقع الضحية في الفخ فوراً! حلّل المسار دائماً عبر new URL(target, window.location.origin) واشترط تطابق الأصل parsed.origin === window.location.origin.
function safeReturnPath(rawTarget) {
try {
const base = 'https://closetag.com';
const u = new URL(rawTarget, base);
return u.origin === base ? u.pathname : '/home';
} catch (err) {
return '/home';
}
}
document.getElementById('val-out').textContent =
'Valid: ' + safeReturnPath('/courses') + '\n' +
'Blocked: ' + safeReturnPath('https://evil.test/login');
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
فككت في هذا الدرس أجزاء العنوان عبر خصائص window.location، وحللت معاملات البحث بأمان عبر URLSearchParams، وقارنت بين assign() وreplace()، وحصّنت التوجيه ضد ثغرتي Open Redirect وروابط javascript: عبر فحص origin. الخطوة التالية: انتقل الآن إلى درس «كائن سجل التصفح window history في JavaScript» للتنقل عبر خطوات الجلسة بدوال back() وforward() وgo().