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

كيف اعمل نظام Rate Limit بلغة php

علي الكاسر

السؤال

Recommended Posts

  • 0

من الأفضل استخدام Redis كذاكرة مؤقتة لحفظ عناوين IP المستخدمين دون التأثير على بنية الموقع لديك، ويمكنك استخدام الشيفرة التالية كمثال:

<?php
//الاتصال بخادم redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('REDIS_PASSWORD');

$max_calls_limit  = 3; // العدد الأعظمي للطلبات خلال وقت محدد
$time_period      = 10; // نافذة الوقت (الوقت اللازم لإعادة الحساب)
$total_user_calls = 0; // إجمالي عدد الطلبات من نفس المستخدم

// للحصول على عنوان المستخدم من الممكن أن يكون ضمن 3 أماكن في الطلب الذي يتم استقباله
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $user_ip_address = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $user_ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $user_ip_address = $_SERVER['REMOTE_ADDR'];
}

//التحقق في حال كان عنوان  المستخدم جديد وغير موجود في الذاكرة
if (!$redis->exists($user_ip_address)) {
    $redis->set($user_ip_address, 1);
    $redis->expire($user_ip_address, $time_period);
    $total_user_calls = 1;
} else {
    $redis->INCR($user_ip_address);
    $total_user_calls = $redis->get($user_ip_address);
    if ($total_user_calls > $max_calls_limit) {
        echo "User " . $user_ip_address . " limit exceeded.";
        exit();
    }
}

يمكنك مراجعة التوثيق الرسمي لـ Redis وقراءة الأوامر وطرق التثبيت والمزيد من التفاصيل. أو البحث على الانترنت عن تثبيت Redis ضمن نظام التشغيل الموجود لديك في بيئة الاستضافة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 38 دقائق مضت قال Sam Ahw:

من الأفضل استخدام Redis كذاكرة مؤقتة لحفظ عناوين IP المستخدمين دون التأثير على بنية الموقع لديك، ويمكنك استخدام الشيفرة التالية كمثال:

<?php
//الاتصال بخادم redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('REDIS_PASSWORD');

$max_calls_limit  = 3; // العدد الأعظمي للطلبات خلال وقت محدد
$time_period      = 10; // نافذة الوقت (الوقت اللازم لإعادة الحساب)
$total_user_calls = 0; // إجمالي عدد الطلبات من نفس المستخدم

// للحصول على عنوان المستخدم من الممكن أن يكون ضمن 3 أماكن في الطلب الذي يتم استقباله
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $user_ip_address = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $user_ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $user_ip_address = $_SERVER['REMOTE_ADDR'];
}

//التحقق في حال كان عنوان  المستخدم جديد وغير موجود في الذاكرة
if (!$redis->exists($user_ip_address)) {
    $redis->set($user_ip_address, 1);
    $redis->expire($user_ip_address, $time_period);
    $total_user_calls = 1;
} else {
    $redis->INCR($user_ip_address);
    $total_user_calls = $redis->get($user_ip_address);
    if ($total_user_calls > $max_calls_limit) {
        echo "User " . $user_ip_address . " limit exceeded.";
        exit();
    }
}

يمكنك مراجعة التوثيق الرسمي لـ Redis وقراءة الأوامر وطرق التثبيت والمزيد من التفاصيل. أو البحث على الانترنت عن تثبيت Redis ضمن نظام التشغيل الموجود لديك في بيئة الاستضافة.

يعني هذا $redis = new Redis(); مكتبه او اطار عمل او ماذا بالضبط 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال علي الكاسر:

يعني هذا $redis = new Redis(); مكتبه او اطار عمل او ماذا بالضبط 

Redis هو ليس مكتبة ولا إطار عمل، بل تقنية برمجية أشبه بقاعدة بيانات ضمن الذاكرة، مفيد جداً في بعض الحالات التي نحتاج من خلالها لتخزين بعض القيم بشكل مؤقت دون التأثير على عمل التطبيق ولتجنّب التأخير الذي قد يحصل في حال استخدام قاعدة البيانات الأساسية المستخدمة مع موقع الويب.

يمكنك الاطلاع عليها من هذا الفيديو:

أو من القسم الخاص بـ Redis ضمن أكاديمية حسوب على الرابط التالي:

https://academy.hsoub.com/devops/servers/databases/redis/

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعة قال علي الكاسر:

هل برأيك ستعمل على الإستضافات او هاتف اندويد  

لم أفهم ما علاقة الهاتف بالضبط في سؤالك، كون التقنية التي نتحدث عنها في طرف خادم الويب ولا علاقة لها بمستخدم الموقع. ولكن بشكل عام معظم استضافات مواقع الويب توفّر دعم لـ Redis أو يمكنك التواصل مع الدعم الفني أو الاطلاع على التوثيق الخاص بالاستضافة التي لديك معرفة طرق التثبيت.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 19 ساعة قال Sam Ahw:

لم أفهم ما علاقة الهاتف بالضبط في سؤالك، كون التقنية التي نتحدث عنها في طرف خادم الويب ولا علاقة لها بمستخدم الموقع. ولكن بشكل عام معظم استضافات مواقع الويب توفّر دعم لـ Redis أو يمكنك التواصل مع الدعم الفني أو الاطلاع على التوثيق الخاص بالاستضافة التي لديك معرفة طرق التثبيت.

استخدم هاتف الاندرويد كخادم محلي اختبر عليه الموقع ويوجد تطبيق تيرمكس وهو شبيه بنظام لينكس من خلاله يتم تحميل الحزم والخوادم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...