ما هو 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
و غاتلقى الطريقة.