Rate Limiting و أهميته في حماية ال API

Rate Limiting و أهميته في حماية ال API

7 أكتوبر 2022|3 دقائق قراءة

ما هو Rate limiting ؟

Rate limiting هو تقنية كاتمكنا من تحديد عدد الطلبات اللي يقدر يرسل كل مستخدم ل Server فمدة زمنية محددة, مثلا إلى حددنا 5 طلبات في الدقيقة و المستخدم أرسل 30 طلب في دقيقة واحدة, Server غايعالج فقط 5 طلبات الأولى, و 25 طلب الأخرين غايتم رفضهم.

أنواع Rate limiting :

كاينين 2 أنواع ديال rate limiting :

rate limiting حسب ال IP address :

هنا كانحسبو عدد الطلبات اللي كاديرو كل IP address فواحد المدة زمنية و إلى شي IP تعدات العدد المسموح به من الطلبات, مكانقوموش بمعالجات باقي الطلبات.

rate limiting حسب ال Key :

هادا كيستخدموه المنصات اللي كايبيعو خدمات ال API, مثلا شي منصة كاتبيع API اللي كايمكنك من أنك تحصل على المعلومات المتعلقة بالطقس, لنفترض أن هاد المنصة كاتبيع 10 ألاف طلب ب 5 دولارات. ملي شي مستخدم كايشري هاد الخدمة, المنصة كاتعطيه واحد ل kEY اللي كاتكون عبارة عن String طويلة, كايضيفها لل url ديال ل API باش يحصل على Data. المنصة كاتحسب عدد الطلبات اللي كاديرها كل Key و كاتنقصها من عدد الطلبات اللي عندها حق دير, و ملي داك ل Key كاتستنفد عدد الطلبات اللي عندها, Server كايتوقف عن معالجة الطلبات ديالها.

دور Rate limiting في حماية ال API :

الدور ديالو كايتجلا في حماية ال API من البوتات و الإستغلال و هجمات حجب الخدمة, غانعطيو مثال لكل وحدة :

  • البوتات : لنفترض عندك تطبيق أو موقع إلكتروني فيه الصفحة ديال تسجيل الدخول, و بطبيعة الحال كاين API اللي غايقوم بإرسال معلومات المستخدم ل Server باش إعالجها, أي واحد إقدر يقاد شي Script اللي يبقى يرسل معلومات عشوائية لغرض الإستلاء على حسابات المستخدمين. باش نحاربو هادشي غانستعملو rate limiting باش نقبلو 5 طلبات فقط في كل 10 دقائق. هادشي كايعني أنه واخا يتم إرسال 1000 طلب فديك ل 10 دقائق, غاتم معالجة 5 فقط و 995 طلب الأخرين غايتم رفضهم.

  • الإستغلال : لنفترض عندك API خاص بموقعك الإلكتروني أو التطبيق ديالك, باش تجنب أن شي واحد يهز ل API ديالك و يخدم بيه لأغراضو الشخصية, خاصك دير rate limiting, مثلا أنت عارف أن المستخدم العادي مغايفوتش 100 طلب في الدقيقة, غاتحدد بلي غاتقبل غير 100 طلب في الدقيقة و باقي الطلبات غايتم رفضهم.

  • هجمات حجب الخدمة : بما أن Server كايحتاج لوقت و جهد باش يعالج الطلبات, إلى كان عدد الطلبات كايفوت القدرة الإستعابية ديالو, غايتوقف عن العمل. بإستعمال rate limiting غاتقدر ترفض الطلبات اللي كاترسلهم شي IP address إلى فاتو الحد المسموح به.

إستعمال Rate limiting في Nodejs :

باش نستخدموه غانحتاجو ل 2 packages :

  • express : هادا كايمكنا من أننا نشؤو Server بطريقة سهلة و بسيطة.
  • express-rate-limit : هادا هو اللي كايمكنا من أننا نقادو rate limiting.

1- أول حاجة هي نشؤو مشروع عن طريق تنفيذ هاد الأمر :

npm init -y

2- الأن غانتبتو ل packages :

npm i express express-rate-limit

3- الأن غانشؤو ملف نسميوه index.js و غانحطو فيه هاد ل code 👇.

// index.js // اللي ثبتنا `packages` غانبداو بإضافة ل const express = require('express'); const rateLimit = require('express-rate-limit'); // server غانشؤو const server = express(); // rate limiter هنا غانقادو // و غانحددو بلي غانقبلو 2 طلبات في كل 10 ثوان const apiLimiter = rateLimit({ windowMs: 10000, // الوقت ب أجزاء الثانية, هنا حددنا 10 ثوان max: 2, // هنا حددنا عدد الطلبات المسموح به كل 10 ثوان message: 'لقد تجاوزت عدد الطلبات المسموح بها', standardHeaders: true, // header في ل rate limiting هنا كانحددو بلي بغينا المعلومات ديال legacyHeaders: false, // Disable the `X-RateLimit-*` headers }); // rate limiter يستعمل server غانقولو ل server.use(apiLimiter); //API ملي نعيطو ل // hello world غايجاوبنا ب server.get('/', (req, res) => { res.send('Hello World!'); }); // server غانخدمو server.listen(3000, () => { console.log(`server listening at http://localhost:3000`); });

ملي غانتجاوزو 2 طلبات في مدة 10 ثوان, server غايجاوبنا بهاد الرسالة👈 لقد تجاوزت عدد الطلبات المسموح بها.

النهاية :

بإمكانك تقاد rate limiting بأي لغة برمجية كاتستخدمها في server كل ما عليك هو شويا ديال البحث في google و غاتلقى الطريقة.