PHP/SQL Injection
מראה
< PHP
SQL Injection (בעברית: הזרקת SQL) הינה שיטה לשליפת נתונים מתוך מסד באמצעות שינוי השאילתה. השינוי מתבצע באמצעות ניצול חור אבטחה הקיים במערכות שונות שלא בודקות את הקלט כראוי.
דוגמה
[עריכה]<?php
$link = mysql_connect ('localhost','root','');
mysql_select_db('info',$link);
$query = "SELECT * FROM `names` WHERE id='".$_GET['id']."';";
$result_q = mysql_query($qyery);
$result = mysql_fetch_array($result_q);
// הדפסת התוצאה...
?>
עמוד זה מתחבר למסד הנתונים info שעל שרת ה־MySQL שנמצא ב־Localhost ומבצע שליפה של מידע בטבלת שמות, לפי ה־ID שמתקבל בכתובת. אם נכתוב במקום המזהה את השורה הבאה, למשל:
' UNION SELECT `username`,`password` FROM `users` WHERE username="admin"
כך, באמצעות איחוד שאילתות, ניתן לשלוף את שם המשתמש והסיסמה של המנהל.
הגנה מפני הזרקות
[עריכה]כדי להתגונן מפני מצב זה, יש לעטוף את שורות הזנת הפלט בפונקציה escape_string השייכת למחלקה של בסיס הנתונים, לדוגמה:
<?php
$id = mysql_escape_string($_GET['id']);
//עכשיו ניתן להריץ בבטחה שאילתה המכילה את המשתנה
?>
הפונקציה למעשה מחליפה סימנים הנמצאים בשימוש בשאילתות בסימנים אחרים שמייצגים אותם אבל לא משפיעים.
הפרק הקודם: קידוד |
SQL Injection | הפרק הבא: תקיפת סקריפט משרת מרוחק |