יש לי טופס התחברות למסד, איך אני מאבטח אותו?
יש לכם טופס התחברות, נגיד שצורת המסד נראית כך:
| Password |
UserName |
UserID |
| gh6sh2 |
Smoxer |
1 |
| dyehn12 |
Admin |
2 |
(לכל אלה שרצים להתחברות למלא את הפרטים האלה, אין לכם מה לנסות אלו לא הסיסמאות)
נגיד שהתופס התחברות דורש שם משתמש וסיסמא.
צורת ההתחברות למסד ה-SQL, תיהיה כזו מין הסתם:
קוד PHP:
SELECT * FROM Users WHERE (Username = '$UserName') AND (Password = '$Password');
נורמלי לחלוטין.
אבל מה יקרה אם המשתמש ישים בערך של השם משתמש את הקוד הבא:
"נשלב" את הערך של השם משתמש שנכנס עם הערך של הסיסמא:
קוד PHP:
SELECT * FROM Users WHERE (Username = 'Admin'); --') AND (Password = '');
אם לא הבנתם, לא נורא! בשביל זה יש את ההסבר הבא.
הערות ב-SQL, נראות בשני מקפים ( -- )כמו שב-PHP יש ( // ).
אז הקטע אומר להתעלם את כל מה שיבוא אחרי שני המקפים, בגלל שזוהי הערה, ופשוט להתעלם ממה שכתוב אחרי המקפים.
בגלל ההערה קוד ה-SQL, נראה אחרת. בואו נסתכל עליו שוב אבל נוריד את ההערה:
קוד PHP:
SELECT * FROM Users WHERE (Username = 'Admin');
עכשיו זה בודק אם יש שם משתמש בשם Admin, זה רק בודק אם קיים משתמש כזה. ללא צורך בסיסמא.
ככה הפורץ עוקף את האבטחה ונכנס לחשבון. דבר כזה נקרא SQL Injection או בתרגום חופשי "הזרקת SQL".
איך אני מתגונן מההתקפה?
אין כל כך בעיה, יש צורך בבדיקת מחרוזת, לדוגמה בדיקה בשדה של השם משתמש והסיסמה אם המשתמש הכניס
את הסימן המיוחד "--".
להלן דוגמה ב-PHP:
קוד PHP:
$UserNameCheck = strrpos($UserName, "--"); $PasswordCheck = strrpos($Password, "--"); if(($pos3 == 0) || ($pos4 == 0)){
//Continues of the code
} else{ echo("Not this time! ;)"); }
אנחנו בודקים במשתנים $UserName ו-$Password אם קיימת מחרוזת שיש בה "--" אם לא אז יש המשך קוד רגיל.
אם כן אז זה פולט על המסך את המחרוזת הבאה:
או בתרגום חופשי "לא בפעם הזאת (;"
וזהו! 
נתראה במדריך הבא!