20 הפרצות
אבטחה לאפליקציות AI

20 הפרצות שיש לך באפליקציה

כל אחת מהן מופיעה כמעט בכל אפליקציה שנבנתה מהר עם AI. לכל פרצה: מה הסיכון, פקודה אחת לבדיקה, ומה עושים.

9קריטיות
7גבוהות
4בינוניות

הפרומפט

הדביקו לקלוד בתוך הפרויקט. הוא עובר על כל 20 ומחזיר דוח.

audit-prompt.txt

אתה מבקר אבטחה. עבור על הקוד של הפרויקט הזה ובדוק אחת־אחת את 20 הנקודות הבאות.

הנקודות
  1. קובץ סביבה או מפתחות בהיסטוריית הגיט
  2. מפתחות API שנחשפים לצד הלקוח
  3. הרשאות ברמת השורה כבויות בדאטהבייס
  4. בדיקות הרשאה שמתבצעות בצד הלקוח בלבד
  5. היעדר הגבלת קצב, במיוחד על נתיבים שעולים כסף
  6. שאילתות שנבנות בשרשור מחרוזות
  7. היעדר ולידציה של קלט בצד השרת
  8. הזרקת HTML של משתמשים
  9. סיסמאות שנשמרות בלי hash חזק
  10. טוקנים שנשמרים בדפדפן במקום בעוגייה מאובטחת
  11. נתיבי אדמין בלי middleware שמאמת הרשאה
  12. הגדרות CORS מתירניות מדי
  13. הרשמה בלי אימות כתובת מייל
  14. גישה למשאבים לפי מזהה בלי בדיקת בעלות
  15. לוגים ששומרים את גוף הבקשה המלא
  16. Webhooks בלי אימות חתימה
  17. פירוט שגיאות שחוזר למשתמש בפרודקשן
  18. חבילות עם פרצות ידועות
  19. היעדר דרישות חוזק לסיסמה
  20. העלאת קבצים בלי הגבלת סוג, גודל ושם
מה להחזיר
  • לכל נקודה: סטטוס (תקין / בעייתי / לא רלוונטי), ואם בעייתי — הקובץ והשורה, הסיכון, והתיקון.
  • דירוג חומרה לכל ממצא: קריטי, גבוה או בינוני.
  • טבלת סיכום של כל 20 הנקודות.
  • רשימת תיקונים לפי סדר עדיפות, מהמסוכן לפחות מסוכן.
  • קוד מתוקן לשלושת הממצאים הקריטיים ביותר.

אל תניח שמשהו תקין בלי לבדוק אותו בקוד עצמו. אם אין מספיק מידע כדי לקבוע — תגיד את זה במפורש.

הרשימה המלאה

לפי חומרה — קריטי קודם.

  1. 01

    קומיט של .env לגיטהאב

    קריטי

    המפתחות שלכם יושבים בהיסטוריית הגיט. גם אם מחקתם את הקובץ — הם עדיין שם.

    בדיקה
    git log --all --full-history -- "*.env"
    תיקון

    החליפו כל מפתח שנחשף, הוסיפו את הקובץ ל־.gitignore, ונקו את ההיסטוריה עם git-filter-repo.

  2. 02

    מפתחות API בצד הלקוח

    קריטי

    כל משתנה שמתחיל ב־NEXT_PUBLIC_ נשלח לדפדפן. אפשר לראות אותו ב־DevTools בשתי שניות.

    בדיקה
    grep -rn "NEXT_PUBLIC_.*\(KEY\|SECRET\|TOKEN\)" .
    תיקון

    העבירו את הקריאה ל־API route בשרת. הדפדפן קורא לשרת שלכם, והשרת קורא לספק.

  3. 03

    RLS כבוי בסופאבייס

    קריטי

    בלי Row Level Security, כל מי שיש לו את המפתח הציבורי קורא וכותב לכל הטבלאות.

    בדיקה
    -- Dashboard → Table Editor → RLS enabled?
    תיקון

    הפעילו RLS על כל טבלה, וכתבו policy מפורשת לכל פעולה: קריאה, כתיבה, עדכון, מחיקה.

  4. 04

    בדיקת הרשאות בצד הלקוח

    קריטי

    תנאי כמו user.role === 'admin' בקוד הדפדפן נעקף מהקונסול.

    בדיקה
    grep -rn "role ===\|isAdmin" src/ app/ --include=*.tsx
    תיקון

    כל בדיקת הרשאה רצה בשרת, על כל בקשה, לפני שמחזירים מידע.

  5. 05

    אפס rate limiting

    גבוה

    בוט אחד שולח מיליון בקשות ומרוקן לכם את חשבון ה־AI בלילה אחד.

    בדיקה
    for i in $(seq 100); do curl -s YOUR_API & done
    תיקון

    הגבילו לפי IP ולפי משתמש. חובה על כל route שעולה כסף.

  6. 06

    שרשור מחרוזות ב־SQL

    קריטי

    שאילתה שנבנית עם ${id} מאפשרת למישהו למחוק לכם את הטבלה.

    בדיקה
    grep -rnE "(query|execute)\(.*\$\{" .
    תיקון

    פרמטרים בלבד: db.query('… WHERE id = $1', [id]), או ORM.

  7. 07

    אפס ולידציה בשרת

    קריטי

    req.body נכנס ישר לדאטהבייס. אפשר לשלוח כל דבר, כולל שדות שלא ביקשתם.

    בדיקה
    grep -rn "req.body" src/ app/ | grep -v parse
    תיקון

    סכמה על כל endpoint. מה שלא מוגדר בסכמה — נזרק, לא נשמר.

  8. 08

    תוכן משתמש כ־HTML גולמי

    גבוה

    הזרקת HTML של משתמש מריצה סקריפט זר בתוך האתר שלכם, עם ההרשאות שלו.

    בדיקה
    grep -rn "dangerouslySetInnerHTML\|innerHTML" .
    תיקון

    אל תזריקו HTML של משתמשים. אם אין ברירה — נקו עם DOMPurify לפני.

  9. 09

    סיסמאות בטקסט גלוי

    קריטי

    אם הדאטהבייס דולף, כל הסיסמאות דולפות איתו — ואנשים חוזרים על אותה סיסמה בכל מקום.

    בדיקה
    SELECT password FROM users LIMIT 1;
    תיקון

    אל תשמרו סיסמאות בעצמכם. ספק אימות מנוהל, או hash עם bcrypt / argon2.

  10. 10

    טוקנים ב־localStorage

    גבוה

    כל סקריפט שרץ בדף יכול לקרוא משם ולגנוב את הסשן.

    בדיקה
    grep -rn "localStorage.*token" .
    תיקון

    עוגייה עם httpOnly, secure ו־sameSite. הדפדפן שולח אותה, JavaScript לא רואה אותה.

  11. 11

    פאנל אדמין בלי אימות

    קריטי

    נתיב אדמין שלא בודק כלום — כל מי שמנחש את הכתובת נכנס.

    בדיקה
    curl -I https://your-app.com/admin
    תיקון

    middleware שחוסם את כל הנתיב, כולל ה־API routes שמתחתיו.

  12. 12

    CORS פתוח לכולם

    גבוה

    Access-Control-Allow-Origin: * מאפשר לכל אתר לקרוא ל־API שלכם בשם המשתמש שלכם.

    בדיקה
    curl -I https://your-app.com/api/x | grep -i access-control
    תיקון

    רשימת דומיינים מפורשת. בלי כוכבית על endpoints מאומתים.

  13. 13

    אין אימות כתובת מייל

    בינוני

    אנשים נרשמים עם כתובות של אחרים, והמערכת מתמלאת בחשבונות מזויפים.

    בדיקה
    -- הירשמו עם כתובת שאינה שלכם ובדקו אם החשבון פעיל
    תיקון

    אל תאפשרו פעולות אמיתיות לפני אימות. רוב ספקי האימות עושים את זה בקליק.

  14. 14

    מזהים גלויים בלי בדיקת בעלות

    גבוה

    משנים /api/orders/1042 ל־1043 ורואים את ההזמנה של מישהו אחר.

    בדיקה
    curl -H "Cookie: $MY_SESSION" /api/orders/1043
    תיקון

    בכל שליפה: WHERE id = ? AND user_id = ?. גם בעדכון וגם במחיקה.

  15. 15

    לוג של גוף הבקשה המלא

    גבוה

    שורת לוג אחת שומרת סיסמאות וטוקנים בקבצים שלכם, בטקסט גלוי.

    בדיקה
    grep -rn "log(req.body\|console.log(req" .
    תיקון

    לוג של שדות נבחרים בלבד, עם רשימת שדות אסורים: סיסמה, טוקן, פרטי תשלום.

  16. 16

    Webhooks בלי אימות חתימה

    גבוה

    כל אחד יכול לשלוח לכם הודעת “תשלום בוצע” ולקבל מוצר בחינם.

    בדיקה
    grep -rn "webhook" src/app/api/ | grep -v signature
    תיקון

    אמתו את חתימת הספק לפני שאתם נוגעים בגוף הבקשה.

  17. 17

    Stack traces בפרודקשן

    בינוני

    שגיאה מחזירה למשתמש את מבנה הקוד, הנתיבים, ולפעמים את מחרוזת החיבור לדאטהבייס.

    בדיקה
    curl https://your-app.com/api/does-not-exist
    תיקון

    בפרודקשן מחזירים הודעה גנרית. הפירוט המלא הולך ללוג הפנימי בלבד.

  18. 18

    חבילות לא מעודכנות

    בינוני

    פרצה ידועה בחבילה שלכם היא פרצה פתוחה — כבר קיים לה exploit מוכן.

    בדיקה
    npm audit --production
    תיקון

    עדכנו קריטיות מיד, והפעילו Dependabot שיפתח PR אוטומטית.

  19. 19

    אין דרישות חוזק לסיסמה

    בינוני

    משתמשים בוחרים 123456, ואז מאשימים אתכם כשהחשבון נפרץ.

    בדיקה
    -- נסו להירשם עם הסיסמה 123456
    תיקון

    מינימום 8 תווים, ובדיקה מול רשימת סיסמאות דלופות.

  20. 20

    העלאת קבצים בלי ולידציה

    קריטי

    accept: */* בלי מגבלת גודל — מישהו מעלה סקריפט, או ממלא לכם את האחסון.

    בדיקה
    grep -rn "upload\|multipart" src/app/api/
    תיקון

    רשימת סוגים מותרים, מגבלת גודל, שם קובץ אקראי, ואחסון מחוץ לשורש האתר.

AI כותב קוד שעובד. הוא לא כותב קוד מאובטח — אלא אם ביקשתם. תריצו את הפרומפט לפני שאתם עולים לאוויר, לא אחרי.