אחד הלקוחות שלנו, סטארטאפ פינטק, איבד פעם גישה לפאנל הניהול שלו: תוקף יירט סשן על פני HTTP לא מוצפן, וסיסמת המנהל נשמרה ב-MD5. השחזור ארך יומיים, ופרצת הנתונים עלתה להם 18–26 אלף דולר בפיצויים. תקריות כאלה נובעות מטעויות נפוצות: חשיש חלש, חוסר הגבלת קצב, וניהול סשן לא תקין. אנו מתכננים ומיישמים מערכות התחברות עם הגנה רב-שכבתית מפני התקפות אימות. לצוות שלנו ניסיון של 10+ שנים באבטחת אינטרנט, עם 50+ פרויקטים ללקוחות פינטק, מדטק ומסחר אלקטרוני שבהם נתונים הם הנכס העיקרי.
מאילו איומים אנו מטפלים?
- ברוט פורס: ניחוש סיסמאות אוטומטי. ללא הגבלת קצב, תוקף יכול לשלוח 10,000 בקשות בשעה. אנו מגבילים ל-5 ניסיונות בדקה לכל IP, ולאחר 10 כשלונות, חוסמים ל-15 דקות.
- חשיש חלש: MD5/SHA-1 ללא מלח ניתן לפיצוח תוך שניות על GPU. אנו משתמשים ב-bcrypt (cost=12) או Argon2id (t=3, m=1GB) — שניהם עמידים בפני טבלאות קשת והתקפות מקבילות.
- זיוף בקשות בין-אתרים (CSRF): כל טופס התחברות מוגן על ידי טוקן. Laravel מייצר טוקן CSRF אוטומטית עם
@csrf. - חטיפת סשן: רק HTTPS, Set-Cookie עם דגלי Secure, HttpOnly ו-SameSite=Lax.
כיצד אנו מגנים על סיסמאות באחסון?
סיסמאות לעולם אינן מאוחסנות בטקסט פשוט. אנו משתמשים ב-bcrypt עם פקטור עלות ≥ 12 או Argon2id. אלגוריתמים ישנים כמו MD5 או SHA-1 ללא מלח אינם מקובלים: ניתן לפצח אותם תוך דקות על GPU סטנדרטי. Bcrypt איטי בכוונה: cost=12 לוקח כ-100 אלפיות השנייה לכל חשיש, מה שמקשה משמעותית על ברוט פורס. Argon2id, הזוכה בתחרות Password Hashing Competition (PHC), עמיד בפני התקפות תזמון וחישוב מקבילי.
// Laravel
$hash = Hash::make($password); // bcrypt, cost=12 по умолчанию
// Верификация
if (!Hash::check($request->password, $user->password)) {
throw new AuthenticationException();
}
// Проверка необходимости rehash (при смене cost factor)
if (Hash::needsRehash($user->password)) {
$user->update(['password' => Hash::make($password)]);
}השוואת אלגוריתמים:
| אלגוריתם | חוסן | מהירות חשיש | המלצות |
|---|---|---|---|
| bcrypt | גבוה (עד 2^24 סבבים) | ~100 אלפיות השנייה (cost=12) | טוב למערכות ישנות |
| Argon2id | גבוה מאוד (עמידות ל-GPU) | ~150 אלפיות השנייה (t=3,m=1GB) | מומלץ על ידי OWASP |
מדוע הגבלת קצב הכרחית?
ללא הגבלת מספר הניסיונות, תוקף יכול לנסות מיליוני שילובים ביום. אנו מיישמים הגבלת קצב הן ברמת היישום והן ברמת שרת האינטרנט. דוגמה ב-Laravel:
// Laravel — через RateLimiter
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->ip())
->response(fn() => response()->json([
'message' => 'Слишком много попыток. Повторите через 60 секунд.'
], 429));
});
// Дополнительно — блокировка по email+IP на 15 минут после 10 неудачных попыток
אמצעי זה מונע התקפות ברוט פורס ומפחית את עומס השרת. אנו גם מוסיפים CAPTCHA לאחר 3 ניסיונות כושלים. הנחיות OWASP מאשרות את יעילות הגישה הזו.
כיצד אנו מיישמים Remember Me?
התכונה "Remember Me" דורשת טיפול זהיר. אנו לעולם לא מאחסנים את הטוקן בטקסט פשוט. אנו מייצרים טוקן אקראי באורך 60 תווים, מאחסנים את חשיש ה-SHA-256 שלו במסד הנתונים עם תאריך תפוגה של 30 יום.
// Создание долгоживущего токена
if ($request->boolean('remember')) {
$token = Str::random(60);
$user->update([
'remember_token' => hash('sha256', $token),
'remember_token_expires_at' => now()->addDays(30),
]);
Cookie::queue('remember_token', $token, 60 * 24 * 30, secure: true, httpOnly: true);
}הטוקן מקושר ל-IP ול-User-Agent; אם אלה משתנים, הסשן מתבטל.
JWT לעומת סשנים: מה לבחור ומתי?
עבור רינדור בצד השרת (SSR, MPA), סשנים מבוססי עוגיות מתאימים. עבור SPA ולקוחות ניידים, אנו משתמשים ב-JWT (טוקני גישה + רענון). JWT ב-SPA מציע אימות מהיר יותר על ידי ביטול מצב בצד השרת.
| גישה | מתי להשתמש |
|---|---|
| סשנים מבוססי עוגיות | Laravel Blade, דפים עם רינדור שרת |
| JWT | SPA (React/Vue), API לנייד |
| Sanctum (Laravel) | SPA באותו דומיין |
| Passport (Laravel) | שרת OAuth2, לקוחות צד שלישי |
אבטחת טפסים
-
// Laravel $hash = Hash::make($password); // bcrypt, cost=12 по умолчанию // Верификация if (!Hash::check($request->password, $user->password)) { throw new AuthenticationException(); } // Проверка необходимости rehash (при смене cost factor) if (Hash::needsRehash($user->password)) { $user->update(['password' => Hash::make($password)]); }— תכונה נכונה למנהלי סיסמאות - טוקן CSRF בבקשות POST
- הודעות שגיאה אחידות עבור "משתמש לא נמצא" ו"סיסמה שגויה" — אנו לעולם לא חושפים אם חשבון קיים
- HTTPS הוא חובה כפי שמומלץ על ידי OWASP
מה כלול בעבודה שלנו
- ביקורת על הארכיטקטורת האימות הנוכחית וזיהוי נקודות תורפה
- תכנון תוכנית חשיש, הגבלת קצב וניהול סשן
- יישום עם שילוב אלגוריתמים וטוקנים נבחרים
- מסירת תיעוד ארכיטקטורה והוראות למנהלים
- הכשרת צוות על עקרונות אימות מאובטח
- תמיכה טכנית לחודש לאחר הפריסה
תהליך העבודה שלנו
- ניתוח: ביקורת על הארכיטקטורה הנוכחית, זיהוי נקודות תורפה (סוג פרוטוקול, אלגוריתמים, תצורת סשן).
- תכנון: בחירת מחסנית (Laravel/Firebase Auth), תכנון תוכנית אימות, התאמה לפרופיל העומס.
- יישום: כתיבת קוד עם שילוב חשיש, הגבלת קצב וטוקנים. בדיקות יחידה ואינטגרציה מכסות תרחישים קריטיים.
- בדיקות: בדיקות חדירה עם התקפות מדומות (ברוט פורס, CSRF, חטיפת סשן). בדיקות עומס עד 10,000 בקשות במקביל.
- פריסה: הגדרת CI/CD, ניטור מדדי אבטחה (כניסות כושלות, חסימות).
לוחות זמנים ועלות
יישום בסיסי של התחברות/סיסמה עם הגבלת קצב, סשנים ו-Remember Me אורך 2 עד 5 ימי עבודה. העלות מחושבת באופן פרטני לפי מורכבות ומחסנית. לפי IBM, העלות הממוצעת של פרצת נתונים היא 4.24 מיליון דולר, כך שהשקעה באימות מאובטח מחזירה את עצמה פי כמה. כדי לקבל פתרון סוהר, צרו קשר להערכת פרויקט. אנו מבטיחים אמינות וסודיות.
קבלו ייעוץ ממהנדס אבטחה — בקשו יישום מערכת אימות לפרויקט שלכם.







