ממפים את החיבור לפני שבוחנים הגנה
API הוא ממשק שבאמצעותו מערכות מבקשות מידע או מבצעות פעולות. בעסק הוא עשוי לחבר חנות ל-CRM, מערכת משלוחים לאתר או טופס לשירות דיוור. פותחים רישום של בעל החיבור, הכתובות והגרסאות הפעילות, סוגי המידע והפעולות האפשריות. כוללים גם ממשקים ישנים וסביבות בדיקה שנשארו זמינות.
רשמו מה יקרה אם החיבור יופסק או יפעל פעמיים: הזמנה שלא תועבר, הודעת SMS בתשלום או שינוי מלאי כפול. כך אפשר להגדיר בדיקה עסקית ומגבלות שימוש. זהו מיפוי לצורך החלטה, לא הרשאה לסרוק שרת של ספק או לבדוק נתונים של לקוח אחר.
אימות זהות אינו הרשאה לכל מידע
אימות שואל מי המשתמש או המערכת. הרשאה שואלת איזו רשומה, פעולה או תכונה מותר להם לקרוא ולשנות. משתמש מחובר יכול להיות מוגבל להזמנותיו בלבד; מפתח קריאה אינו אמור לאפשר החזר כספי. בדקו שההחלטה נעשית בצד השרת ולא רק באמצעות הסתרת כפתור בדפדפן.
מכינים יחד עם המפתח שני משתמשי בדיקה ונתונים מלאכותיים נפרדים, תפקיד תפעולי ותפקיד מנהל לפי הצורך. לכל בדיקה כותבים תוצאה צפויה וראיה מסוננת. בדיקת הפרדה בין חשבונות מתבצעת בסביבה ובתנאים שאושרו, ולא על ידי ניסיון לגשת לרשומות אמיתיות של אחרים.
| זהות בדיקה | הפעולה | התוצאה המוסכמת |
|---|---|---|
| משתמש ללא התחברות | גישה לפעולה שאינה ציבורית | דחייה בלי חשיפת מידע מוגן |
| לקוח בדיקה א | קריאת רשומה שלו | רק השדות המותרים לו |
| לקוח בדיקה ב | בקשה לרשומה של א | דחייה ללא תוכן הרשומה |
| מפתח קריאה | פעולת שינוי | דחייה גם אם המפתח מזוהה |
| תפקיד תפעולי | פעולה ניהולית מוגבלת | דחייה בהתאם להגדרת התפקיד |
שדות, מסמכים ופלט: מאשרים רק מה שנחוץ
גם כאשר הרשומה הנכונה נשלחת, היא עלולה לכלול שדות שהצרכן אינו צריך: הערות פנימיות, נתוני תשלום או מזהים של מערכת אחרת. בקשו רשימת שדות שמותר להחזיר ולשנות. נתון שהדפדפן אינו מציג עדיין יכול להיכלל בתגובה ולהיחשף למי שקיבל אותה.
קלט צריך לעבור בדיקת סוג, אורך וערכים מורשים, אך בדיקת קלט אינה מחליפה הרשאה, קידוד פלט או שאילתות בטוחות. לגבי העלאות וקישורי קבצים מגדירים גודל, סוג, אחסון וגישה בהתאם לצורך. כתובת שהמערכת מתבקשת לפתוח מחייבת בקרה מתאימה כדי למנוע גישה ליעדים פנימיים או לא מאושרים.
מגבלות שימוש מגינות גם על התקציב
מספר בקשות הוא רק חלק מצריכת המשאבים. פעולה אחת יכולה להפעיל חיפוש יקר, ייצוא, הודעת SMS או שירות בתשלום. מגדירים עם הספק מגבלה לפי המשתמש, הפעולה והעלות, יחד עם ניטור והתנהגות ברורה כשהמכסה נחצית. אין מספר בקשות אוניברסלי שמתאים לכל עסק.
בבדיקה מורשית מאמתים תרחיש מצומצם שתוכנן מראש או בוחנים תצורה וראיות מהספק. לא מייצרים עומס על ייצור כדי למצוא את גבולו. בקשו לדעת מי מקבל התראה, אם קיימת תקרת חיוב ואיך עוצרים חיבור חריג בלי להשבית באופן גורף את השירות העסקי.
| פעולה | החשיפה העסקית | שאלה לספק |
|---|---|---|
| שליחת הודעה | עלות חיצונית ושימוש לרעה | איזו מכסה ומי מקבל התראה? |
| ייצוא נתונים | חשיפת מידע ועומס | מי מורשה ומהו היקף הייצוא? |
| יצירת הזמנה | כפילויות ומלאי | איך מזהים בקשה שכבר טופלה? |
| עיבוד קובץ | משאבי מחשוב ואחסון | מהם גבולות הגודל והזמן? |
| חיפוש ציבורי | צריכה אוטומטית | מה מגביל שימוש חריג ומה נרשם? |
מפתחות, OAuth ו-webhooks: מתעדים את מחזור החיים
לכל סוד צריך להיות בעלים, סביבה, הרשאות ותהליך ביטול. שומרים סודות בצד המתאים למימוש ולא בקוד לקוח ציבורי או במאגר משותף. מפתח שנחשף מחייב הערכת היקף ושינוי מתואם; מחיקתו מצילום או מהגרסה האחרונה אינה מבטלת עותקים שכבר נחשפו.
בחיבור נכנס מבררים איך מאמתים את השולח ואיך מטפלים בהודעה חוזרת או מאוחרת. בחיבור יוצא בודקים את היעד ואת המידע הנשלח. הפרטים תלויים בפרוטוקול ובספק: אין מנגנון חתימה יחיד שמתאים לכל API, ואין להסיק משם הטכנולוגיה בלבד שהרשאות ומועדי ביטול הוגדרו נכון.
תקלות ויומנים בלי להפוך את התיעוד למאגר סודות
יומן שימושי כולל זמן, מזהה בקשה, פעולה ותוצאה שמתאימים לבירור. הוא אינו צריך להכיל אסימון מלא או גוף בקשה עם כל פרטי הלקוח. מסכמים גישה ליומן, צמצום ושמירה לפי הצורך והחובות החלות. הודעת שגיאה למשתמש אינה המקום לפרטי תצורת שרת או חיבור פנימי.
תוצאה חסרה אינה תמיד כשל: ייתכן שהמערכת המרוחקת ביצעה את הפעולה והתשובה לא הגיעה. לפני ניסיון חוזר מבררים לפי מזהה העסקה או התיעוד הרלוונטי. ההחלטה אם לחזור על פעולה צריכה להיות חלק מתכנון החיבור, כדי לצמצם הזמנות, חיובים או הודעות כפולים.
איך משתמשים ברשימה מול ספק
פתחו מסמך קצר לכל חיבור: מטרתו, בעליו, התפקידים, סוגי המידע, העלות והחרגות הבדיקה. בקשו מהמפתח להסביר איך כל דרישה נאכפת ולמסור ראיה מתאימה, לא רק לסמן כן. OWASP API Security Top 10 במהדורת 2023 הוא מסמך מודעות לסיכונים, לא אישור תאימות ולא רשימת בדיקה מלאה לכל מימוש.
לכל פער קובעים בעלים, עדיפות עסקית ובדיקה חוזרת. סקירת תצורה ובדיקות קבלה אינן מחליפות ביקורת קוד או מבדק חדירה כאשר הם נחוצים. אם אין גישה או הרשאה לאימות, רשמו לא נבדק ומה דרוש כדי להשלים; אל תהפכו תשובת ספק לממצא שנבדק בעצמכם.
