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

السؤال

Recommended Posts

  • 0
نشر

معدل الوصول أو "Rate Limiter" في تطبيقات الويب يستخدم للحد من معدل الطلبات التي يمكن أن يرسلها المستخدم أو النظام خلال فترة زمنية محددة، هذا الأمر يساعد في الحماية ضد الهجمات التي تحاول إغراق النظام بالطلبات (مثل هجمات DDoS) ويضمن توزيع الموارد بشكل عادل بين المستخدمين.

ففي الشيفرة المقدمة في الصورة الأولى تظهر تعريف الحد الأقصى العالمي للطلبات حيث لا يمكن لأي مستخدم إرسال أكثر من 1000 طلب في الدقيقة الواحدة.

use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;

/**
 * Bootstrap any application services.
 */
protected function boot(): void
{
    RateLimiter::for('global', function (Request $request) {
        return Limit::perMinute(1000);
    });
}

فهذا الجزء RateLimiter::for('global', ...) يعرف حدّا للطلبات ينطبق على جميع المستخدمين بينما هنا function (Request $request) { return Limit::perMinute(1000); } تحدد هذه الوظيفة أنه يمكن إجراء ما يصل إلى 1000 طلب في الدقيقة من أي مستخدم أو IP.

في الصورة الثانية، يتم تحديد الحد الأقصى للطلبات على مستوى واجهة برمجة التطبيقات (API)، حيث يتم السماح بـ 60 طلب في الدقيقة الواحدة لكل مستخدم لكنه هنا يعتمد على وجود المستخدم المسجل فذا كان الطلب يأتي من مستخدم مسجل (أي لديه معرف)، فسيستخدم المعرف كمفتاح لمعدل الطلبات؛ وإذا كان الطلب غير مرتبط بمستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح.

RateLimiter::for('api', ...) يعرف حدا للطلبات خاص بواجهة برمجة التطبيقات.

function (Request $request) { ... } تحدد هذه الوظيفة الحد الأقصى للطلبات لكل مستخدم.

$request->user()?->id ?: $request->ip() هذا التعبير يقرر مفتاح الحد للطلبات:

إذا كان هناك مستخدم مسجل ($request->user()?->id يستخدم عرف المستخدم كمفتاح.

إذا لم يكن هناك مستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح.

?: هو مشغل ثلاثي يعود بالقيمة الأولى إذا كانت غير null، وإلا يعود بالقيمة الثانية.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...