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 הפרק הבא:
תקיפת סקריפט משרת מרוחק