اذهب إلى المحتوى

السؤال

نشر (معدل)

 عند استخدام post في fetch في laravel لابد يكون هناك token او يحدث خطأ. هل وجود token في ال head او body شيء غير امن؟ , ام هناك طريقة لجعل token غير موجود في html?

تم التعديل في بواسطة Zerious San

Recommended Posts

  • 0
نشر

السلام عليكم ورحمة الله،

وجود CSRF token في طلبات POST في Laravel هو إجراء أمني ضروري لمنع هجمات Cross-Site Request Forgery ووضع التوكن داخل الـ HTML من خلال meta tag أو hidden input أو إرساله في headers عبر fetch ليس غير آمن بحد ذاته لأن التوكن ليس سرّا مثل API key بل هو قيمة قصيرة العمر ومرتبطة بجلسة المستخدم ومفيدة فقط داخل المتصفح نفسه.

الخطر الوحيد هو إذا قام المطور بكتابة التوكن داخل ملف JavaScript ثابت بحيث يمكن لأي شخص تحميله من السيرفر وهذا خطأ والطريقة الصحيحة هي جعل Laravel يولّد التوكن داخل الصفحة (Blade) ثم قراءته من DOM وإرساله مع كل POST أو إزالة الحاجة له تماما عند بناء API باستخدام sanctum أو passport حيث يتم تعطيل CSRF واعتماد نظام token-based authentication.

  • 0
نشر

السلام عليكم ورحمة الله تعالى وبركاته،

وجود ال CSRF token في HTML أو ال header ليس غير آمن بطبيعته بل هو تصميم مقصود للحماية من ال CSRF attacks ف Laravel يولّد token فريد لكل session ويخزّنه في ال server-side وعند إرسال الطلب يقارن بين القيمتين للتحقق من صحة الطلب.

أي أنّ إرسال الـ token في ال header مثل X-CSRF-TOKEN يعدّ أكثر أمانا من إرساله في ال body لأن سياسة CORS تمنع JavaScript من إضافة custom headers في cross-origin requests بينما يمكن استغلال form tags لإرسال بيانات body دون قيود Same-Origin Policy.

وهنا نجد أنّ Laravel نفسه يوفّر آلية أكثر أمانا عبر XSRF-TOKEN cookie المشفّر الذي يرسل تلقائيا مع كل response حيث يمكن لمكتبات مثل Axios قراءته وإرساله في ال header دون تعريضه في HTML.

ولإخفاء ال token من HTML تماما يمكنك استخدام ال XSRF-TOKEN cookie مع:

HttpOnly: false

وهو إعداد Laravel الافتراضي وذلك لتمكين JavaScript من قراءته أو استخدم HttpOnly cookies لل authentication tokens الحساسة فقط مع الاحتفاظ ب CSRF token متاحا لل client-side فالمشكلة الحقيقية ليست في ظهور ال token في HTML بل في XSS vulnerabilities التي تمكّن المهاجم من سرقة أي token سواء كان في HTML أو cookies غير HttpOnly.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...