כל אחת מהן מופיעה כמעט בכל אפליקציה שנבנתה מהר עם AI. לכל פרצה: מה הסיכון, פקודה אחת לבדיקה, ומה עושים.
הדביקו לקלוד בתוך הפרויקט. הוא עובר על כל 20 ומחזיר דוח.
אתה מבקר אבטחה. עבור על הקוד של הפרויקט הזה ובדוק אחת־אחת את 20 הנקודות הבאות.
אל תניח שמשהו תקין בלי לבדוק אותו בקוד עצמו. אם אין מספיק מידע כדי לקבוע — תגיד את זה במפורש.
לפי חומרה — קריטי קודם.
.env לגיטהאבהמפתחות שלכם יושבים בהיסטוריית הגיט. גם אם מחקתם את הקובץ — הם עדיין שם.
git log --all --full-history -- "*.env"
החליפו כל מפתח שנחשף, הוסיפו את הקובץ ל־.gitignore, ונקו את ההיסטוריה עם git-filter-repo.
כל משתנה שמתחיל ב־NEXT_PUBLIC_ נשלח לדפדפן. אפשר לראות אותו ב־DevTools בשתי שניות.
grep -rn "NEXT_PUBLIC_.*\(KEY\|SECRET\|TOKEN\)" .
העבירו את הקריאה ל־API route בשרת. הדפדפן קורא לשרת שלכם, והשרת קורא לספק.
בלי Row Level Security, כל מי שיש לו את המפתח הציבורי קורא וכותב לכל הטבלאות.
-- Dashboard → Table Editor → RLS enabled?
הפעילו RLS על כל טבלה, וכתבו policy מפורשת לכל פעולה: קריאה, כתיבה, עדכון, מחיקה.
תנאי כמו user.role === 'admin' בקוד הדפדפן נעקף מהקונסול.
grep -rn "role ===\|isAdmin" src/ app/ --include=*.tsx
כל בדיקת הרשאה רצה בשרת, על כל בקשה, לפני שמחזירים מידע.
בוט אחד שולח מיליון בקשות ומרוקן לכם את חשבון ה־AI בלילה אחד.
for i in $(seq 100); do curl -s YOUR_API & done
הגבילו לפי IP ולפי משתמש. חובה על כל route שעולה כסף.
שאילתה שנבנית עם ${id} מאפשרת למישהו למחוק לכם את הטבלה.
grep -rnE "(query|execute)\(.*\$\{" .
פרמטרים בלבד: db.query('… WHERE id = $1', [id]), או ORM.
req.body נכנס ישר לדאטהבייס. אפשר לשלוח כל דבר, כולל שדות שלא ביקשתם.
grep -rn "req.body" src/ app/ | grep -v parse
סכמה על כל endpoint. מה שלא מוגדר בסכמה — נזרק, לא נשמר.
הזרקת HTML של משתמש מריצה סקריפט זר בתוך האתר שלכם, עם ההרשאות שלו.
grep -rn "dangerouslySetInnerHTML\|innerHTML" .
אל תזריקו HTML של משתמשים. אם אין ברירה — נקו עם DOMPurify לפני.
אם הדאטהבייס דולף, כל הסיסמאות דולפות איתו — ואנשים חוזרים על אותה סיסמה בכל מקום.
SELECT password FROM users LIMIT 1;
אל תשמרו סיסמאות בעצמכם. ספק אימות מנוהל, או hash עם bcrypt / argon2.
כל סקריפט שרץ בדף יכול לקרוא משם ולגנוב את הסשן.
grep -rn "localStorage.*token" .
עוגייה עם httpOnly, secure ו־sameSite. הדפדפן שולח אותה, JavaScript לא רואה אותה.
נתיב אדמין שלא בודק כלום — כל מי שמנחש את הכתובת נכנס.
curl -I https://your-app.com/admin
middleware שחוסם את כל הנתיב, כולל ה־API routes שמתחתיו.
Access-Control-Allow-Origin: * מאפשר לכל אתר לקרוא ל־API שלכם בשם המשתמש שלכם.
curl -I https://your-app.com/api/x | grep -i access-control
רשימת דומיינים מפורשת. בלי כוכבית על endpoints מאומתים.
אנשים נרשמים עם כתובות של אחרים, והמערכת מתמלאת בחשבונות מזויפים.
-- הירשמו עם כתובת שאינה שלכם ובדקו אם החשבון פעיל
אל תאפשרו פעולות אמיתיות לפני אימות. רוב ספקי האימות עושים את זה בקליק.
משנים /api/orders/1042 ל־1043 ורואים את ההזמנה של מישהו אחר.
curl -H "Cookie: $MY_SESSION" /api/orders/1043
בכל שליפה: WHERE id = ? AND user_id = ?. גם בעדכון וגם במחיקה.
שורת לוג אחת שומרת סיסמאות וטוקנים בקבצים שלכם, בטקסט גלוי.
grep -rn "log(req.body\|console.log(req" .
לוג של שדות נבחרים בלבד, עם רשימת שדות אסורים: סיסמה, טוקן, פרטי תשלום.
כל אחד יכול לשלוח לכם הודעת “תשלום בוצע” ולקבל מוצר בחינם.
grep -rn "webhook" src/app/api/ | grep -v signature
אמתו את חתימת הספק לפני שאתם נוגעים בגוף הבקשה.
שגיאה מחזירה למשתמש את מבנה הקוד, הנתיבים, ולפעמים את מחרוזת החיבור לדאטהבייס.
curl https://your-app.com/api/does-not-exist
בפרודקשן מחזירים הודעה גנרית. הפירוט המלא הולך ללוג הפנימי בלבד.
פרצה ידועה בחבילה שלכם היא פרצה פתוחה — כבר קיים לה exploit מוכן.
npm audit --production
עדכנו קריטיות מיד, והפעילו Dependabot שיפתח PR אוטומטית.
משתמשים בוחרים 123456, ואז מאשימים אתכם כשהחשבון נפרץ.
-- נסו להירשם עם הסיסמה 123456
מינימום 8 תווים, ובדיקה מול רשימת סיסמאות דלופות.
accept: */* בלי מגבלת גודל — מישהו מעלה סקריפט, או ממלא לכם את האחסון.
grep -rn "upload\|multipart" src/app/api/
רשימת סוגים מותרים, מגבלת גודל, שם קובץ אקראי, ואחסון מחוץ לשורש האתר.
AI כותב קוד שעובד. הוא לא כותב קוד מאובטח — אלא אם ביקשתם. תריצו את הפרומפט לפני שאתם עולים לאוויר, לא אחרי.