אבטחת מידע · מתקדם
הזרקות: להפריד בין הוראה לנתון
בשורה אחת: כל מקום שבו מחרוזת מהמשתמש מורכבת לתוך פקודה הוא פרצה — הפתרון הוא פרמטרים, לא סינון.
העיקרון האחד
המנוע צריך לקבל את הפקודה ואת הנתונים בנפרד. שאילתות עם פרמטרים, פקודות מערכת עם מערך ארגומנטים, ומנועי תבניות שמסמנים תוכן לא בטוח. סינון מחרוזות הוא מרוץ שתמיד מפסידים בו.
איפה זה מופיע
בסיסי נתונים, פקודות מערכת הפעלה, שאילתות ספריות, קריאות למנוע חיפוש, וגם בכתובות שנבנות דינמית. וכן — גם בהנחיות למודל שפה, שבו התוכן החיצוני עלול להתפרש כהוראה.
הגנת עומק
הרשאות מינימליות למשתמש בסיס הנתונים, כך שגם אם משהו עבר, הנזק מוגבל. ואימות קלט לפי סכמה — לא כתחליף להפרדה, אלא כשכבה נוספת שמונעת קלט אבסורדי מלכתחילה.
לעומק
הריצו בדיקות אוטומטיות שמזינות קלט חריג לכל שדה — תווים מיוחדים, אורך קיצוני, קידודים שונים — ובדקו שהתגובה היא שגיאה מסודרת ולא התנהגות חריגה. זה תופס גם באגים רגילים, לא רק פרצות.