I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تحمي الـ API بتاعك من الهجمات وتطبق تقنية تحديد الطلبات (Rate Limiting)

إزاي تحمي الـ API بتاعك من الهجمات وتطبق تقنية تحديد الطلبات (Rate Limiting) تخيل معايا إنك تعبت في بناء الـ API الخاص بيك، وخلصت كل الـ Endpoints، وفجأة لقيت ا

إزاي تحمي الـ API بتاعك من الهجمات وتطبق تقنية تحديد الطلبات (Rate Limiting)
Reading Count: 8

إزاي تحمي الـ API بتاعك من الهجمات وتطبق تقنية تحديد الطلبات (Rate Limiting)

تخيل معايا إنك تعبت في بناء الـ API الخاص بيك، وخلصت كل الـ Endpoints، وفجأة لقيت السيرفر بتاعك وقع أو فاتورة الاستضافة زادت بشكل جنوني! دي كوابيس بتواجه أي مطور لما الـ API بتاعه يتعرض لهجمات زي حجب الخدمة (DDoS) أو هجمات التخمين (Brute Force). النهاردة هنتكلم عن "حارس البوابة" اللي هيحميك من كل ده، وهو تحديد عدد الطلبات أو ما يعرف بالـ Rate Limiting.

ليه الـ Rate Limiting مش مجرد رفاهية؟

ببساطة، الـ Rate Limiting هو أسلوب بيخليك تتحكم في عدد الطلبات (Requests) اللي أي مستخدم أو IP Address يقدر يعملها في فترة زمنية معينة. بدون الحماية دي، أي شخص ممكن يبعت آلاف الطلبات في الثانية الواحدة، وده بيؤدي لـ:

  • استنزاف موارد السيرفر (CPU & RAM).
  • تهنيج قاعدة البيانات (Database overload).
  • زيادة تكلفة الاستضافة (Cloud billing).
  • تعطيل الخدمة للمستخدمين الحقيقيين.

استراتيجيات تحديد الطلبات (Rate Limiting Strategies)

في أكتر من طريقة لتطبيق الـ Rate Limiting، وأشهرهم:

1. Fixed Window: ودي أسهل طريقة، بتحدد عدد طلبات معين في نافذة زمنية ثابتة (مثلاً 100 طلب كل دقيقة). المشكلة هنا إن المستخدم ممكن يبعت الـ 100 طلب في آخر ثانية من الدقيقة الأولى وأول ثانية من الدقيقة التانية، وده بيعمل ضغط مفاجئ.

2. Sliding Window: دي طريقة أكثر دقة، بتعتمد على نظام تراكمي بيحسب الطلبات في نافذة زمنية متحركة، وبتقلل الضغط المفاجئ اللي بيحصل في النوع الأول.

3. Token Bucket: ودي الطريقة الأكثر شيوعاً، بتخيل إن لكل مستخدم "دلو" فيه عدد معين من الرموز (Tokens)، كل طلب بيسحب رمز. لو الدلو فضي، الـ API بيرفض الطلبات الجديدة لحد ما الرموز تتجدد تاني.

مثال عملي باستخدام Node.js و Express

لو بتستخدم Node.js، فالموضوع أسهل ما يكون باستخدام مكتبة express-rate-limit. تعال نشوف الكود ده:


const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 دقيقة
  max: 100, // الحد الأقصى 100 طلب لكل IP في الـ 15 دقيقة
  message: "يا بطل، أنت بتبعت طلبات كتير جداً، استنى شوية!"
});

// طبق الـ Middleware على كل الـ Routes
app.use(limiter);

نصائح إضافية لزيادة أمن الـ API

تحديد الطلبات لوحده مش كفاية، لازم تأمن الـ API بتاعك بطرق تانية:

  • استخدام الـ API Key: متسمحش لأي حد يكلم الـ API من غير مفتاح تعريف.
  • تفعيل الـ HTTPS: عشان تشفر البيانات وهي ماشية بين الكلاينت والسيرفر.
  • استخدام الـ Web Application Firewall (WAF): خدمات زي Cloudflare بتوفر حماية متقدمة جداً ضد الـ DDoS قبل ما الطلبات توصل للسيرفر بتاعك أصلاً.
  • التحقق من البيانات (Input Validation): دايماً اتأكد إن البيانات اللي داخلة للـ API نظيفة ومطابقة للشكل المطلوب عشان تتجنب هجمات الـ SQL Injection.

نصيحة من أخ لمطوري المستقبل

يا صديقي، الأمن (Security) مش حاجة بتعملها مرة واحدة في نهاية المشروع، ده "أسلوب حياة" وأنت بتكتب الكود. دايماً فكر بعقلية الهاكر (Hacker Mindset) وأنت بتبني: "لو أنا عايز أبوظ الـ API ده، هعمل إيه؟". لما تجاوب على السؤال ده، هتعرف تحمي مشروعك صح. ابدأ طبق الـ Rate Limiting من النهاردة، حتى لو على الـ Endpoints الحساسة بس زي تسجيل الدخول أو تغيير كلمة السر، والفرق في أداء واستقرار السيرفر بتاعك هيبان فوراً.


Share

Related posts

May 17, 2026 • 1 min read
Reading Count: 5
أهم أدوات اختبار واجهات برمجة التطبيقات: رحلة من Postman لـ Insomnia

أهم أدوات اختبار واجهات برمجة التطبيقات: رحلة من Postman لـ Insomnia أكيد مريت بالموقف ده: خلصت الـ...

May 17, 2026 • 1 min read
Reading Count: 8
دليلك الشامل لفهم واستخدام التوكنز (JSON Web Tokens - JWT) ببساطة

دليلك الشامل لفهم واستخدام التوكنز (JSON Web Tokens - JWT) ببساطة لو أنت شغال في مجال تطوير الويب (W...

May 16, 2026 • 1 min read
Reading Count: 8
إزاي تبني REST API نظيف واحترافي: دليلك الكامل للتطوير

إزاي تبني REST API نظيف واحترافي: دليلك الكامل للتطوير أكيد مريت بالموقف ده: بتبدأ مشروع جديد، وبتكت...