היסטוריית OAuth: מסיסמאות לסטנדרטים עולמיים
אתם רואים את זה כל יום. אתם לוחצים על "Login with Google" או "Login with GitHub". אתם לא מקלידים סיסמה. אתם נכנסים לאתר באופן מיידי.
זה עובד בזכות OAuth. זה הסטנדרט העולמי לאבטחה. אבל זה לא התחיל ככה. זה התפתח כדי לפתור בעיות אדירות.
הבעיה עם סיסמאות
בימים הראשונים, יצרתם סיסמה חדשה לכל אתר אינטרנט. זה גרם לשלוש בעיות גדולות:
- אנשים השתמשו באותה סיסמה בכל מקום. אם אתר אחד נפרץ, כל החשבונות היו בסכנה.
- אנשים שכחו סיסמאות. הם בילו יותר זמן בלחיצה על "forgot password" מאשר בשימוש באינטרנט.
- אתרים ראו את הסיסמה הגולמית שלכם. אם אתר נפרץ, הסיסמה שלכם אבדה.
האבולוציה של האבטחה
Basic Auth: שלחתם את שם המשתמש והסיסמה שלכם עם כל בקשה. אם לא השתמשתם ב-HTTPS, האקרים יכלו לראות הכל.
Session Cookies: התחברתם פעם אחת וקיבלתם מזהה סשן (session ID). זה היה טוב יותר, אבל ניתן לגנוב עוגיות (cookies) באמצעות התקפות כמו XSS או CSRF. בנוסף, אתר אחד לא יכול היה להשתמש בהתחברות שלכם כדי לדבר עם אתר אחר.
API Keys: נתתם לאתר מפתח מיוחד. זה היה טוב יותר כי לא שלחתם את הסיסמה שלכם. עם זאת, ל-API keys יש לעיתים קרובות יותר מדי כוח. אם תתנו API key לאפליקציה, לאפליקציה הזו עשוי להיות הכוח לקרוא את האימיילים שלכם, לשלוח הודעות ולמחוק את החשבון שלכם. זה כמו לתת למאמן חניה במלון את מפתח הרכב שלכם, אבל המפתח הזה גם פותח את הבית שלכם.
הפתרון של OAuth: מפתח הוואלה (Valet Key)
OAuth שינה את כללי המשחק. במקום לתת את הסיסמה שלכם, אתם נותנים "token" (אסימון). חשבו על זה כמפתח וואלה (valet key). מפתח וואלה מאפשר לנהג לחנות את הרכב שלכם, אבל הוא לא מאפשר לו לפתוח את תא המטען או לגשת לבית שלכם.
איך OAuth עובד בפועל:
- אתם רוצים להשתמש ב-Canva ולמשוך תמונות מ-Google.
- Canva מבקשת אישור מ-Google.
- Google שואלת אתכם: "האם Canva רשאית לצפות בתמונות שלכם?"
- אתם אומרים: "כן, אבל רק לצפות. אל תתנו להם למחוק שום דבר."
- Google נותנת ל-Canva token ספציפי.
Canva לעולם לא רואה את הסיסמה שלכם ל-Google. גם אם האקר גונב את ה-token הזה, הוא יכול רק לצפות בתמונות לזמן קצר. הוא לא יכול לשנות את הסיסמה שלכם או להזיז את הכסף שלכם.
אבטחה מודרנית: PKCE
לאפליקציות מובייל ואפליקציות ווב יש נקודת תורפה. הן לא יכולות להסתיר סודות בצורה טובה. כדי לתקן זאת, אנחנו משתמשים ב-PKCE (Proof Key for Code Exchange).
זה עובד כמו מערכת הזמנות:
- האפליקציה יוצרת קוד סודי (the verifier).
- האפליקציה שולחת גרסה מוצפנת (hashed) של הקוד הזה (the challenge) ל-Google.
- כשהאפליקציה מבקשת את ה-token, היא שולחת את הקוד הסודי המקורי.
- Google בודקת אם הקוד תואם ל-challenge.
אם הם תואמים, Google יודעת שזו אותה אפליקציה. אם הם לא תואמים, Google חוסמת את הבקשה. זה מונע מהאקרים לגנוב את קוד ההרשאה (authorization code) שלכם.
מפת הדרכים של OAuth
- 2007 (OAuth 1.0): מורכב מאוד והשתמש במתמטיקה כבדה.
- 2012 (OAuth 2.0): מהיר וקל יותר. הוא השתמש ב-tokens ודרש HTTPS.
- 2016 (OAuth 2.0 + PKCE): הוסיף אבטחה לאפליקציות מובייל ואפליקציות ווב מודרניות.
- 2023 (OAuth 2.1): תקן הזהב החדש. הוא מסיר שיטות ישנות ובלתי מאובטחות.
הלקח המרכזי: לעולם אל תתנו את הסיסמה שלכם לאפליקציה אחרת. תנו להם כרטיס מוגבל שפג תוקפו. אתם נשארים בשליטה.
מקור: https://dev.to/gophernment/oauth-elaaaebbprawatisaastr-cchaakrhasphaan-suumaatrthaanolk-16b4
