שיעור 5: SQL Injection — כשהמשתמש כותב SQL
SQL היא שפה פשוטה שמחשבים משתמשים בה לדבר עם מסד הנתונים — "תן לי את כל המשתמשים", "אחסן את ההזמנה הזו". רוב אתרי ה-Web בונים שאילתות SQL כך: לוקחים את מה שהמשתמש הקליד ושוזרים אותו ישירות לתוך הפקודה. הבעיה: אם לא מנקים את הקלט — תוקף יכול 'לברוח' מהנתונים ולהכניס פקודות SQL משלו לתוך השאילתה. זוהי
SQL Injection זה כמו מישהו במסעדה שבמקום להזמין מנה, כותב הוראות מטבח נוספות על דף ההזמנה וצולח אותן ישירות למטבח — והטבח מבצע אותן בלי לבדוק.
- SQL Injection
- פגיעות שבה קלט משתמש לא מנוטרל מוכנס ישירות לשאילתת SQL, ומאפשר לתוקף לשנות את לוגיקת השאילתה.
- שאילתה מפרמטרת
- שאילתת SQL שבה ערכי הקלט מועברים כפרמטרים נפרדים ולא מחוברים ישירות לטקסט השאילתה — מונעת SQL Injection.
- Payload
- הקלט הזדוני שהתוקף שולח — למשל: `' OR '1'='1` — כדי לנצל פגיעות.
- UNION SELECT
- מילת מפתח SQL שמאחדת תוצאות של שתי שאילתות. בהקשר של SQLi, תוקף יכול להשתמש בה כדי לשאוב נתונים מטבלאות אחרות.