هندسة الأمان

قائمة فحص أمان API: Rate Limiting والتحقق من المدخلات وتكوين CORS

تأمين APIs مع rate limiting والتحقق من المدخلات وتكوين CORS. قائمة فحص مختبرة إنتاجياً تغطي المصادقة والتشفير ومعالجة الأخطاء.

Khalid Aboubakr
20 دقيقة قراءة
Api SecurityOwaspInput ValidationRate LimitingSecurity HeadersCorsHelmet

مقدمة

واجهات البرمجة هي سطح الهجوم للتطبيقات الحديثة. كل نقطة نهاية هي نقطة دخول محتملة للمهاجمين. يغطي هذا الدليل تقنيات التقوية العملية التي طبقتها لتأمين واجهات البرمجة في الإنتاج.

التحقق من المدخلات

التحقق القائم على المخطط

import { z } from 'zod'; const createUserSchema = z.object({ email: z.string() .email('تنسيق بريد إلكتروني غير صالح') .max(255) .transform(email => email.toLowerCase()), password: z.string() .min(12, 'كلمة المرور يجب أن تكون 12 حرفاً على الأقل') .regex(/[A-Z]/, 'يجب أن تحتوي على حرف كبير') .regex(/[0-9]/, 'يجب أن تحتوي على رقم'), name: z.string() .min(1) .max(100) .regex(/^[\u0600-\u06FFa-zA-Z\s'-]+$/, 'الاسم يحتوي على أحرف غير صالحة'), }); function validateBody<T extends z.ZodType>(schema: T) { return (req: Request, res: Response, next: NextFunction) => { const result = schema.safeParse(req.body); if (!result.success) { return res.status(400).json({ error: 'فشل التحقق', details: result.error.issues, }); } req.body = result.data; next(); }; }

تحديد المعدل

تحديد المعدل المتدرج

const rateLimiters = { auth: rateLimit({ windowMs: 15 * 60 * 1000, max: 5, keyGenerator: (req) => req.body.email || req.ip, }), api: rateLimit({ windowMs: 60 * 1000, max: 100, keyGenerator: (req) => req.user?.id || req.ip, }), }; app.use('/api/auth', rateLimiters.auth); app.use('/api', rateLimiters.api);

رؤوس الأمان

import helmet from 'helmet'; app.use(helmet({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'"], }, }, hsts: { maxAge: 31536000, includeSubDomains: true, }, }));

تكوين CORS

const corsOptions = { origin: ['https://app.example.com'], methods: ['GET', 'POST', 'PUT', 'DELETE'], credentials: true, }; app.use(cors(corsOptions));

الخلاصة

أمان واجهات البرمجة يتطلب دفاعاً متعدد الطبقات:

  1. تحقق من جميع المدخلات بمخططات صارمة
  2. حدد المعدل بناءً على حساسية نقطة النهاية
  3. اضبط رؤوس الأمان بشكل مناسب
  4. كوّن CORS بشكل مقيد
  5. سجّل بأمان للتدقيق والتصحيح

الأمان ليس اختيارياً - إنه متطلب أساسي لأي واجهة برمجة إنتاجية.

مقالات ذات صلة