הגנו על נכסיכם הדיגיטליים: כיצד Prepared Statements יכולים להציל אתכם ממתקפת SQL Injection

השקיעו בהגנה על הנתונים שלכם ותמנעו הפסדים כבדים
הנתונים שלכם הם הנכס היקר ביותר של העסק. דליפת מידע רגיש יכולה להוביל להפסדים כספיים עצומים, פגיעה במוניטין ואפילו לתביעות משפטיות.
SQL Injection מאפשר לתוקפים לגשת בקלות לנתונים האלה.
מאמר זה מבהיר כיצד תוכלו להגן על העסק שלכם מפני איום זה באמצעות Prepared Statements.

 

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

טכניקה זו נובעת מהתלות של צד השרת במידע מן המשתמש כדי לבצע שאילתות על מסד הנתונים בצורה מלאה, ומסכנת ארגונים קטנים כגדולים.
מתקפת SQL Injection היא ממצא נפוץ במבדקי ה־PT האפליקטיביים שמבוצעים על ידי צוות המומחים של IPV Security, וחומרתו היא תמיד קריטית, ומכאן חשיבות הסברת ההגנה מפניו ומניעתו באפליקציה שלכם.

כיצד מתבצעת מתקפת SQL Injection?
ניקח דוגמה לשאילתה פשוטה שמבוצעת על השרת:
"SELECT * FROM users WHERE username = '" .$username. "'" ;
שאילתה זו אינה שלמה בשל התלות שלה במשתנה username. תוקף יכול לנצל זאת על ידי הזרקת קוד SQL זדוני:
Enter Username: [ shay';delete from users where id='1 ]
המשפט שנשלח לשרת יהיה:
"SELECT * FROM users WHERE username ='shay'; delete from user where id='1'";

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

מניעת SQL Injection באמצעות Prepared Statements
Prepared Statements הם אמצעי הגנה חזק נגד מתקפות SQL Injection – הם משתמשים בפרמטרים כ־Placeholderים בשאילתות SQL, ובכך מחייבים את המתכנת להגדיר את כל קוד ה־SQL מראש. הקוד מקומפל פעם אחת, וכל קלט מצד הלקוח מבצע Bind לפרמטרים, בלי לפרש את הקלט כפקודות SQL.

מדוע Prepared Statements יעילים
היעילות של Prepared Statements נובעת מתהליך ה־ Pre-Compilation שמבוצע פעם אחת בלבד. מכיוון שהקוד מקומפל לפני הכנסת הנתונים מהלקוח, כל פקודות SQL לא יפורשו ככאלה, אלא כטקסט פשוט. לפיכך הקלט מהלקוח לא יבוצע כפקודת SQL.

תהליך העבודה של Prepared Statements
Prepared Statements עוברים תהליך מובנה:
1. Parsing and Normalization
2. Compilation
3. Query Optimization
4. Caching

לדוגמה:
UPDATE user set username=? And password=? Where id=?
שאילתה זו עם Placeholderים תעבור קומפילציה ואופטימיזציה, ותישמר ב־Cache.
במהלך ההרצה, ה־Placeholderים יוחלפו בנתוני המשתמש, והשרת יתייחס לקלט כטקסט בלבד.

אנלוגיה דומה לכך אפשר למצוא בפגיעות ה־XSS במקרים שבהם מוזרקים קטעי HTML ו־JS מהצד של התוקף, אך הם מוצגים עם Application/json Content-Type:. הגדרה כזו תגרום לדפדפן שלא להתייחס לקטעי הקוד המוזרקים כ־HTML ולכן אינם מורצים בפועל בדפדפן, זאת בדומה לקוד ה־SQL המוזרק אשר אינו מיוחס כקוד SQL ואינו מורץ בשאילתה.

דוגמה ליישום
Prepared Statement מאובטח (שימוש ב־Placeholderים):
<?php
$link = new PDO("mysql:dbname=injection;host=localhost", 'root','mysql');
$username = $_POST['username'];
$password = $_POST['password'];
$compile = $link->prepare("SELECT * FROM users WHERE username=? AND password=?");
$compile->execute([$username,$password]);
While($row = $compile->fetch())
{
Var_dump($row);
}
?>

שאילתה רגילה ופגיעה (שרשור ישיר של קלט המשתמש):
<?php
$link = new PDO("mysql:dbname=injection;host=localhost", 'root','mysql');
$username = $_POST['username'];
$password = $_POST['password'];
$q = "SELECT * FROM users WHERE username = '".$username."' AND password = '".$password."';
$result  = mysqli_querry($link,$q);
while($row = $mysqli_fetch_assoc($result))
{
var_dump($row);
}
?>

לסיכום,
שימוש ב־Prepared Statements הוא חיוני להגנה על אפליקציות מפני מתקפות SQL Injection.
על ידי קומפילציה מוקדמת של שאילתות SQL והתייחסות לקלט המשתמש כנתון טהור, הם מספקים הגנה חזקה מפני גישה לא מורשית ומניפולציה של מסדי נתונים.
יישום Prepared Statements לא משפר את האבטחה בלבד, אלא גם את ביצועי השאילתות ויעילותן, מה שהופך אותן לפרקטיקה מומלצת בכל פיתוח אפליקציות.

באמצעות אימוץ Prepared Statements, ארגונים יכולים לצמצם באופן משמעותי את הסיכון למתקפות SQL Injection ולהבטיח את שלמות ואבטחת מסדי הנתונים שלהם. היו פרואקטיביים באבטחת אפליקציות על ידי שילוב הטכניקה החיונית הזו בפרקטיקות הפיתוח שלכם.

להתייעצות עם מומחה אפליקציות או להזמנת בדיקת חדירה אפליקטיבית? פנו למומחי איי פי וי סקיוריטי!

לחצו כאן

 

להתייעצות מקצועית ניתן לפנות אלינו לאימייל info@ipvsecurity.com או במספר הטלפון 077-4447130. IPV Security מתמחה זה 19 שנה באבטחת מידע, סייבר, סקרי סיכונים ותקנים ורגולציות הנוגעים לביטחון מידע ועוד.