رابط إعادة كلمة السر بيطلع لموقع تاني؟ اضبط Referrer-Policy
المتصفح بيبعت عنوان صفحتك مع الطلبات بهيدر Referer. الهيدر Referrer-Policy بيحدد قديش منه بيروح، وno-referrer بيشيله كله عن الصفحات الحساسة.

صفحة إعادة كلمة السر بموقعك فيها زر صغير لحساب الشركة على السوشيال بالفوتر. المستخدم فتح الصفحة من رابط بالإيميل، وكبس عالزر، فممكن الموقع التاني يستلم عنوان الصفحة كله، مع التوكن يلي فيه. بهالمقال رح تعرف شو بيطلع من موقعك مع كل طلب، وكيف تحدّه بسطر بالسيرفر أو بالـ HTML.
شو هو هيدر Referer؟
هيدر الـ Referer هو عنوان الصفحة يلي طلع منها الطلب، والمتصفح بيبعته لحاله لما المستخدم يكبس على رابط، أو لما صفحتك تحمّل صورة أو ملف.
حسب صفحة MDN عن مخاطر الـ Referer على الخصوصية والأمان، الهيدر فيه عنوان الصفحة السابقة يلي المستخدم كبس منها على الرابط، أو عنوان الصفحة يلي عم تحمّل صورة أو ملف. استعمالاته العادية التحليلات والسجلات والكاش، بس ممكن ينستعمل للتتبع أو لسرقة معلومات، أو يسرّب معلومة حساسة بلا قصد.
كيف ممكن يتسرّب رابط إعادة كلمة السر؟
رابط إعادة كلمة السر بيتسرّب لما الصفحة يلي فيها التوكن تبعت عنوانها لموقع تاني، برابط بيكبس عليه المستخدم أو بصورة بتتحمّل من برّا.
نفس صفحة MDN بتعطي هالمثال: صفحة «reset password» بفوترها رابط سوشيال. إذا المستخدم كبس عليه، وحسب طريقة مشاركة المعلومات، موقع السوشيال ممكن يستلم رابط إعادة كلمة السر، ويضل قادر يستعمله. والصفحة بتقول إنو صورة من موقع تاني جوّا صفحتك ممكن تسرّب معلومات حساسة لهداك الموقع بنفس الطريقة.
شو بيعمل Referrer-Policy؟
الـ Referrer-Policy هيدر رد من السيرفر بيحدد قديش من عنوان الصفحة بيروح مع الطلبات بهيدر الـ Referer.
حسب صفحة Referrer-Policy على MDN، هاي القيم يلي بتلزمك أكتر شي:
القيمة | شو بيروح مع الطلب |
|---|---|
| ولا شي: الطلب بيروح بلا هيدر Referer |
| الأصل بس، متل |
| العنوان كامل لطلبات نفس الموقع، وولا شي لموقع تاني |
| العنوان كامل لنفس الموقع، والأصل بس لموقع تاني من HTTPS لـ HTTPS، وولا شي من HTTPS لـ HTTP |
| العنوان كامل مع الـ query لكل طلب، شو ما كان |
إذا ما حطيت سياسة، أو حطيت قيمة غلط، المتصفح بيمشي على strict-origin-when-cross-origin. والصفحة بتحذّر إنو unsafe-url بيسرّب معلومات ممكن تكون خاصة من عناوين HTTPS لمواقع مش آمنة.
إذا المتصفح بيحمي لحاله، ليش تحط الهيدر؟
الهيدر بيخلّي السياسة قرارك إنت، لأنو الافتراضي بيبعت العنوان كامل مع الـ query لطلبات موقعك نفسه، وبيبعت الأصل لأي موقع تاني على HTTPS.
ورقة هيدرات HTTP عند OWASP بتقول اضبط الهيدر بإيدك بدل ما تتّكل على افتراضي المتصفح، وبتعطي هالقيمة مثال:
Referrer-Policy: strict-origin-when-cross-originوعلى صفحة إعادة كلمة السر وصفحة الدفع، no-referrer أحسن: هالصفحات ما إلها حاجة تقول لحدا من وين إجا الطلب.
كيف تحط السياسة من الـ HTML؟
إذا ما بتقدر تعدّل هيدرات السيرفر، فيك تحط السياسة للصفحة كلها بوسم meta، أو لعنصر واحد بالخاصية referrerpolicy.
صفحة Referrer-Policy على MDN بتورجي التلات طرق:
<meta name="referrer" content="no-referrer" />
<img src="https://cdn.example.com/logo.png" referrerpolicy="no-referrer" />
<a href="https://social.example.com/company" rel="noreferrer">Follow us</a>الخاصية referrerpolicy بتنحط على <a> و<area> و<img> و<iframe> و<script> و<link>. وانتبه للكتابة: noreferrer بالخاصية rel بلا شرطة، وno-referrer بالـ meta مع شرطة.
شو بيمنع التسريب من أساسه؟
يلي بيمنع التسريب من أساسه إنو العنوان ما يحمل شي بيفيد حدا تاني: رابط إعادة كلمة السر بينستعمل مرة وحدة، والبيانات الحساسة ما بتمرق بالرابط.
صفحة MDN عن مخاطر الـ Referer بتقول إنو التطبيق المرتّب بيعمل روابط إعادة كلمة سر بتنستعمل مرة وحدة، أو بيربطها بتوكن خاص بالمستخدم. وبتنصح تستعمل POST بدل GET قد ما فيك، لحتى ما تمرق البيانات الحساسة بالعناوين، وتشيل المحتوى من مواقع تانية، متل أزرار السوشيال جوّا iframe، من صفحات إعادة كلمة السر والدفع وتسجيل الدخول.
من وين تبلّش هلق؟
افتح صفحة إعادة كلمة السر بموقعك، وشوف هيدرات الرد بأدوات المطوّر. إذا ما في Referrer-Policy، زيده بالسيرفر بقيمة strict-origin-when-cross-origin، وحط no-referrer على هالصفحة نفسها. بعدها دوّر بفوترها على أي صورة أو زر من موقع تاني.
وإذا عم ترتّب هيدرات الأمان كلها، كمّل بـ تفعيل HSTS صح وبـ CSP بوضع Report-Only، ولسكربتات الـ CDN شوف Subresource Integrity. وإذا بدك حدا يفحص منصتك كلها قبل ما يلاقي الثغرة غيرك، مُحَصَّن بيعمل هالشغلة.
بصفحة إعادة كلمة السر عندك، شو في من مواقع تانية؟
أسئلة شائعة
شو بيبعت المتصفح إذا موقعي ما فيه Referrer-Policy؟
بيمشي على strict-origin-when-cross-origin: العنوان كامل لطلبات نفس الموقع، والأصل بس لموقع تاني إذا الطلب من HTTPS لـ HTTPS، وولا شي إذا الطلب رايح من HTTPS لـ HTTP.
شو الفرق بين noreferrer وno-referrer؟
noreferrer بلا شرطة قيمة للخاصية rel على الرابط. وno-referrer مع شرطة قيمة للهيدر Referrer-Policy، ولوسم meta لما تحط السياسة للصفحة كلها.
بقدر حط سياسة لصورة وحدة بس؟
إي. حط الخاصية referrerpolicy على العنصر نفسه. بتنحط على a وarea وimg وiframe وscript وlink.


