שיטות עבודה מומלצות לאבטחה
אימות והרשאות
JWT (JSON Web Tokens)
- כל נקודות הקצה המוגנות חייבות להשתמש ב-
JwtAuthGuard. - הטוקנים חתומים עם
JWT_SECRETומכיליםuserIdו-role. - לטוקנים יש אורך חיים קצר (בדוק את הגדרות
AuthModule), עם refresh tokens להפעלות ארוכות טווח.
RBAC (בקרת גישה מבוססת תפקידים)
- אל תסתמך רק על
isAuthenticated(). - הגדר במפורש הרשאות נדרשות לכל נקודת קצה באמצעות
@Permissions(). - דוגמה:
@Get()
@Permissions(Permission.MANAGE_USERS) // דורש יכולת ספציפית
findAll() { ... }
בידוד נתונים (Multi-Tenancy)
- לעולם אל תבטח ב-User ID שסופק מהלקוח ב-body לבדיקות בעלות נתונים.
- השתמש תמיד ב-
userIdמ-req.user(מוזרק על ידיTenantInterceptorאוAuthGuard). - בעת שימוש ב-Prisma, ה-
TenantMiddlewareמסנן שאילתות באופן אוטומטי. אל תעקוף את ה-middleware הזה (למשל, באמצעות SQL גולמי) ללא בדיקה זהירה.
אימות קלט
- השתמש ב-Zod עבור כל ה-DTOs (
nestjs-zod). - אימות קפדני מונע התקפות הזרקה ומבטיח שלמות נתונים.
- נקה קלטים שיוצגו ב-HTML (אמנם React מטפל ברוב XSS, היזהר עם
innerHTML).
הגבלת קצב
- נקודות קצה ציבוריות (Login, Register) חייבות להשתמש ב-
RateLimitGuardאו דקורטור@RateLimit(). - הגדר מגבלות כדי למנוע התקפות brute-force.
רישום ביקורת
- פעולות קריטיות (Login, Delete, Update Config) חייבות להירשם דרך
AuditService. - רשומות יומן צריכות לכלול:
userId,action,resource,ipAddress, ו-status.
ניהול סודות
- לעולם אל תשמור סודות ב-Git.
- השתמש בקבצי
.envו-ConfigService. - החלף
JWT_SECRETומפתחות API באופן תקופתי.