בקצרה: אפליקציה עוברת מבדק חדירות בפעם הראשונה כשהאבטחה היא חלק מהדרך שבה כותבים את הקוד. כסו את OWASP Top 10 (במהדורת 2025 בקרת גישה פגומה נמצאת במקום הראשון), סרקו תלויות בכל Pull Request, שמרו סודות ב-Vault, אמתו כל קלט בצד השרת, ובמובייל השתמשו באחסון המאובטח של הפלטפורמה. אבטחה שנבנית מההתחלה עולה הרבה פחות מתיקונים אחרי מבדק החדירות.
הרבה אפליקציות נכשלות במבדק החדירות הראשון
ראינו את זה עשרות פעמים. חברה בונה אפליקציה חצי שנה, שוכרת חברה למבדקי חדירות, ומקבלת דוח של 40 עמודים עם פרצות שמחייבות שינויים בארכיטקטורה. התיקונים אוכלים עוד 2 עד 3 חודשי פיתוח, כי את האבטחה הדביקו בסוף, במקום לבנות אותה מההתחלה.
הדרך האחרת פשוטה: בונים את האבטחה לתוך תהליך הפיתוח מהיום הראשון. היא לא נדחית לשלב נפרד בסוף. היא חלק מכל ספרינט ומכל שורת קוד.
OWASP Top 10: מה תוקפים מנצלים בפועל
הארגון OWASP (Open Web Application Security Project) מפרסם רשימה של עשרת הסיכונים הקריטיים ביותר באפליקציות Web. המהדורה העדכנית היא OWASP Top 10:2025. רוב המתקפות המוצלחות מנצלות את הבעיות המוכרות האלה, ולכן מי שמטפל בהן סוגר חלק גדול מהסיכון.
בקרת גישה פגומה (Broken Access Control) נמצאת במקום הראשון ברשימת 2025, כמו ב-2021. משתמשים מגיעים לנתונים או לפעולות שאין להם הרשאה אליהם, כי ה-Endpoint לא בודק הרשאות. אכפו הרשאות בצד השרת בכל בקשה, וקבעו חסימה כברירת מחדל.
הזרקות (Injection) ירדו למקום החמישי ב-2025, אחרי שהיו במקום השלישי ב-2021. הזרקת SQL, הזרקת NoSQL, הזרקת פקודות. הפתרון: אף פעם לא לשרשר קלט של משתמש לתוך שאילתה. השתמשו בשאילתות עם פרמטרים וב-ORM. תמיד, בלי יוצאים מן הכלל. גם לא בכלי ניהול, וגם לא ב-API פנימי.
כשלי הזדהות (Authentication Failures) נמצאים במקום השביעי ב-2025, ובעבר נקראו Broken Authentication. הכוונה לטוקנים של סשן שאפשר לנחש, סיסמאות שנשמרות כטקסט גלוי, או מסכי התחברות בלי הגבלה על מספר הניסיונות. השתמשו בספריות הזדהות מוכרות (Clerk, Auth0, Firebase Auth), ואל תבנו לבד. בכל מערכת הזדהות שנבנתה בהתאמה אישית ועברה אצלנו סקר, מצאנו לפחות פרצה קריטית אחת.
כשלים קריפטוגרפיים (Cryptographic Failures), במקום הרביעי ב-2025, נקראו עד 2021 Sensitive Data Exposure. הם קורים כשמידע עובר בלי הצפנה, נשמר בלוגים, או נגיש דרך Endpoints שלא בודקים הרשאות כמו שצריך. הצפינו את המידע באחסון ובתעבורה, ובדקו הרשאות בכל Endpoint.



