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

السؤال

Recommended Posts

  • 1
نشر

لا يمكنك منع المتصفح 100% وجعل الوصول حصريًا لل API فقط وهذا بسبب أن:

  • أي متصفح يستطيع إرسال Requests مثل أي API Client.
  • Postman  و fetch  و axios  و curl هي كلها HTTP Requests في النهاية يتم إرسالها .

ولكنك تستطيع التحكم بمن يُسمح له باستخدام ال API وتمنع الاستخدام العشوائي أو غير المصرح به.

ويمكنك إستخدام المصادقة لفعل هذا الأمر فيجب أن يتم إرسال token وتقوم بالتحقق به وإم بالسماح أو رفض الطلب .

وأشهر الطرق هي :

  • JWT Token.
  • OAuth2.
  • API Key.

أو يمكنك إستخدام ال cors وهو السماح فقط بالطلبات من مواقع معينة . فمثلا لو تم إرسال الطلب من موقع x مثلا وأنت لم تسمح بالموقع x بهذا الأمر لن يتم إستقبال الطلب وسيتم إعادة خطأ cors .

 

  • 1
نشر

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

من المستحيل تقنيا منع المتصفح تماما من الوصول إلى API في Laravel لأن المتصفح وأي API Client آخر مثل Postman أو تطبيقات الهاتف أو curl يستخدمون نفس بروتوكول HTTP/HTTPS وأي طلب يمكن محاكاته من أي أداة.

الحل الصحيح هو تأمين API بدلا من محاولة حظر نوع معين من العملاء وذلك عبر تطبيق المصادقة (Authentication) باستخدام Laravel Sanctum للتطبيقات البسيطة و SPAs والتطبيقات التي تملكها بالكامل أو Laravel Passport إذا كنت تحتاج OAuth2 الكامل للتطبيقات الخارجية التابعة لجهات ثالثة.

أي يجب أن تفرض على كل الطلبات إرسال Token صالح في ال Authorization header مع تطبيق التفويض (Authorization) عبر Policies وGates للتحكم الدقيق في الصلاحيات واستخدام CORS لتحديد النطاقات المسموح لها بالوصول مع العلم أن CORS يُطبق فقط من المتصفحات وليس من أدوات مثل Postman بالإضافة إلى تفعيل HTTPS + HSTS لتأمين النقل وتشفير البيانات الحساسة ومراقبة السجلات (Logging) لرصد المحاولات المشبوهة.

  • 0
نشر

لا يمكنك تقنيًا منع المتصفح من الوصول إلى الـ API بشكل كامل، لأن الـ API في النهاية يعمل عبر HTTP، والمتصفح يستطيع إرسال طلبات HTTP مثل أي عميل آخر.
لكن يمكنك جعل الوصول المباشر من المتصفح عديم الفائدة وغير مسموح عمليًا.

التوضيح والحل يكون كالتالي:

أولًا: اجعل كل الـ API محميًا بالتحقق من الهوية (Authentication)
أي endpoint مهم يجب ألا يُرجع بيانات إلا إذا أُرسل معه:

  • Token (مثل JWT)
  • أو Session صالحة

بدون ذلك:

  • يرجع 401 Unauthorized
  • حتى لو فتح المستخدم الرابط مباشرة في المتصفح

ثانيًا: استخدم الصلاحيات (Authorization)
ليس كل مستخدم له نفس الحق في الوصول.
تحقق من الدور (role) داخل السيرفر:

  • مستخدم
  • مشرف
  • نظام داخلي
  • وأي طلب بلا صلاحية يرجع 403 Forbidden.

ثالثًا: تقييد CORS

  • هذا يمنع أي موقع آخر من استهلاك الـ API من المتصفح.
  • تسمح فقط لنطاق واجهتك الأمامية.
  • هذا لا يمنع الطلبات تمامًا، لكنه يمنع الاستخدام غير المصرح من المتصفحات.

رابعًا: لا تُرجع صفحات HTML

  1. الـ API يجب أن يُرجع:
  2. JSON فقط
  3. Status Codes واضحة
  4. عند فتح الرابط في المتصفح سيظهر JSON غير مفيد للمستخدم العادي.

خامسًا: استخدم Middleware للحماية
أي endpoint حساس يمر عبر Middleware للتحقق من:

  • التوكن
  • الصلاحيات
  • صحة البيانات

سادسًا: Rate Limiting
لتقليل:

  • التخمين
  • التجربة العشوائية
  • إساءة الاستخدام

الخلاصة المهمة جدًا
لا تحاول منع المتصفح نفسه، بل:

امنع أي طلب غير موثوق

اجعل أي وصول بلا توكن أو صلاحية مرفوضًا

واجعل الـ API “مفتوح شكليًا، مغلق فعليًا”

بهذا الشكل:

المستخدم لا يستفيد من فتح الرابط مباشرة

والـ API يعمل فقط مع الواجهة أو العملاء المصرّح لهم

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...