הגנה מפני הזרקת SQL: בדיקת יישום והטמעה
הזרקת SQL היא אחת מפגיעויות האינטרנט המסוכנות ביותר. לקוח — חנות מקוונת על PHP 7.4 עם MySQL 5.7 — איבד 50,000 רשומות לקוחות בגלל מרכאה אחת שלא הוצפנה. הנזק מפריצה כזו יכול להגיע ל-30–50 אלף דולר כולל קנסות ואובדן מוניטין. התאוששות לאחר מתקפה עולה פי 3–5 יותר מאשר מניעה. האתר שלך יכול להיות הבא בתור. הצוות שלנו מציע פתרון מקיף להגנה מפני הזרקת SQL, עם ניסיון של 10+ שנים ויותר מ-200 פרויקטים מוצלחים.
מקרה אמיתי: איך הצלנו חנות מקוונת מהזרקת SQL
הלקוח פנה אלינו לאחר תקרית — תוקף, דרך טופס חיפוש פגיע, רוקן את כל טבלת customers. הסיבה הייתה שרשור ישיר של קלט לתוך שאילתת SQL: $sql = "SELECT * FROM products WHERE name LIKE '%{$search}%'";. מצאנו 12 נקודות כאלה בקוד legacy. הצוות שלנו ביצע בדיקה של 3 ימים כדי לזהות את כל נקודות הכניסה, ולאחר מכן השקיע 4 ימים בהחלפת כל השאילתות בשאילתות פרמטריות באמצעות PDO, הגדיר WAF מבוסס ModSecurity עם כללי OWASP CRS, והגביל את הרשאות משתמש מסד הנתונים ברמת MySQL. סריקות עוקבות לא מצאו פגיעויות. הלקוח קיבל גם ניטור לוגים בזמן אמת.
למה הזרקות SQL עדיין מסוכנות
לפי OWASP Top 10, מתקפות הזרקת קוד הן בין שלוש הפגיעויות הקריטיות ביותר. שורש הבעיה הוא היעדר הצהרות מוכנות (prepared statements) בקוד legacy. מחקרים עדכניים מראים כי למעלה מ-60% מיישומי האינטרנט כוללים לפחות פגיעות SQL אחת. שאילתות פרמטריות מונעות 99.9% מהמתקפות, מה שאמין פי 50 מאשר אימות קלט בלבד (שמספק רק 70–80% הגנה).
איך אנחנו מגנים על האתר שלך מפני הזרקות SQL
אנחנו מיישמים גישה רב-שכבתית המשלבת מספר שיטות הגנה:
| שיטה | אמינות | מורכבות הטמעה |
|---|---|---|
| הצהרות מוכנות (Prepared statements) | גבוהה (99.9%) | בינונית (דורש רפקטורינג) |
| אימות קלט | בינונית (70–80%) | נמוכה (בדיקות נוספות) |
| WAF (חומת אש ליישומי אינטרנט) | הגנה נוספת | נמוכה (הגדרת כללים) |
| עקרון הרשאות מינימליות | גבוהה | נמוכה (הגדרת הרשאות מסד נתונים) |
| הצפנה (לא מומלץ) | נמוכה (50–60%) | בינונית |
התוצאות הטובות ביותר מתקבלות משילוב של הצהרות מוכנות עם עקרון הרשאות מינימליות. הצהרות מוכנות חוסמות כמעט את כל ההזרקות, בעוד שהגבלת הרשאות משתמש מסד הנתונים ממזערת נזק במקרה של מתקפה מוצלחת.
דוגמאות לשאילתות פרמטריות בשפות שונות
| שפה / ספרייה | דוגמת קוד |
|---|---|
| PHP (PDO) | $stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?'); $stmt->execute([$email]); |
| Python (psycopg2) | cur.execute('SELECT * FROM users WHERE email = %s', (email,)) |
| Node.js (pg) | client.query('SELECT * FROM users WHERE email = $1', [email]) |
| Java (JDBC) | PreparedStatement stmt = conn.prepareStatement('SELECT * FROM users WHERE email = ?'); stmt.setString(1, email); |
| Laravel Eloquent | User::where('email', $email)->get(); (ללא raw) |
בכל הדוגמאות, הנתונים מועברים בנפרד מקוד SQL, מה שהופך הזרקה לבלתי אפשרית.
איך לבדוק את הקוד שלך לפגיעויות
התחל בחיפוש אחר מקומות שבהם קלט משתמש משורשר ישירות לשאילתות SQL. השתמש ב-grep כדי לחפש $_GET, $_POST, Request::input() ואחריהם שרשור. שים לב במיוחד לשאילתות raw ב-ORM, כמו whereRaw או DB::raw. לאוטומציה, ניתן להשתמש בכלי ניתוח סטטי (Phan, Psalm) עם כללי אבטחה.
הצהרות מוכנות: תקן הזהב
שאילתות פרמטריות הן הדרך הבטוחה היחידה. הן מפרידות בין קוד לנתונים. דוגמה ב-PHP:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND active = ?');
$stmt->execute([$email, 1]);
$user = $stmt->fetch();מסגרות ORM מודרניות (Eloquent, Sequelize) עושות זאת אוטומטית. אבל היזהר: חלק מהשיטות מקבלות קטעי raw.
דפוסי ORM מסוכנים
// Laravel — ОПАСНО
User::whereRaw("name = '$name'")->get();
// БЕЗОПАСНО
User::whereRaw('name = ?', [$name])->get();תמיד השתמש בקשירת פרמטרים. זה מפחית סיכון ב-95%.
שכבות הגנה נוספות
WAF (ModSecurity, Cloudflare) מיירט הזרקות ברמת HTTP. עקרון הרשאות מינימליות מגביל את הרשאות משתמש מסד הנתונים — גם אם מתקפה מצליחה, התוקף לא יכול למחוק טבלאות.
התהליך שלנו
- ניתוח קוד — מציאת שרשורים ו-whereRaw באמצעות grep.
- תיקון — החלפה בהצהרות מוכנות או ORM.
- הגדרת WAF — הוספת כללים למתקפות אופייניות.
- אימות — סריקה עם sqlmap ובדיקות חדירה.
- ניטור — הגדרת לוגים והתראות.
מה כלול
- בדיקת קוד מקור מלאה עם דוח מפורט.
- תיקון כל הפגיעויות שזוהו.
- הגדרת WAF וניטור.
- המלצות לפיתוח מאובטח.
- אחריות של 6 חודשים על התיקונים.
לוחות זמנים ותוצאות
- בדיקה: 1–3 ימים.
- תיקון: 2–7 ימים.
- WAF + ניטור: יום אחד.
חיסכון בתקציב בהשוואה להתאוששות מתקרית — עד 80%. לאחר העבודה שלנו, הסיכון להזרקות SQL מופחת ב-95%. רוצה לבדוק את האתר שלך? צור קשר — נבדוק נקודת קצה אחת ללא עלות. הזמן בדיקה וקבל ייעוץ מהנדס.







