יש לי טופס התחברות מהמסד, איך אני מאבטח אותו?
בשביל לאבטח את המסד אתה צריך לחשוב כמו SQL, ובמילים אחרות יש תווים מיוחדים כמו: גרש ( ' ) הערות ( -- ) וכ'ו
למשל יש לי תופס התחברות (ראה את הקוד הנ"ל) בשפת PHP:
קוד PHP:
$port='localhost:3306'; $user="root"; $password=""; $link = mysql_connect($port, $user, $password); if (!$link) { die("לא יכול ליצור קשר עם המסד: " . mysql_error()); } $db_selected = mysql_select_db("webSQL", $link); if (!$db_selected) { die ("לא יכול להיכנס למסד נתונים: " . mysql_error()); }
$UserName = $_REQUEST['User_Name']; $Password = $_REQUEST['Password'];
$Name = mysql_query("SELECT * FROM Errors WHERE Password = '" . $Password . "';"); $Name_array = mysql_fetch_assoc($Name);
(אין צורך להמשיך את הקוד, הדברים הבסיסיים נכתבו)
(ה-port הבסיסי ה-3306, חשוב לציין)
התחברות רגילה למסד, הלא כן?
אז זהו שלא!
משתמש רגיל יכול לגשת לשדה הסיסמה ולכתוב:
והוא רואה את המסד, איך, למה איפה אתם שואלים?
בואו נבחן עוד פעם את הקטעים החשובים ונפרק את הקוד:
קוד PHP:
$Name = mysql_query("SELECT * FROM Errors WHERE Password = '" . $Password . "';");
הגדרת משתנה וכניסת אפשרות למסד, נורמטיבי לחלוטין.
קוד PHP:
$Name = mysql_query("
פה השורה החשובה:
קוד PHP:
SELECT * FROM Errors WHERE Password = '" . $Password . "';
פה החור אבטחה, הדבר שגורם לכל הבעיות והחדירות למערכת.
אם נחשוב טוב נבין שכתבנו סקריפט עם חור אבטחה.
שהמשתמש מקיש את הקוד שצויין הקוד משתלב עם הסקריפט ונותן הרשאה למרות שהסיסמא לא נכונה.
איך פותרים את הבעיה?
שיטה 1:
בעיקרון זאת שיטה מאוד פשוטה, בודקים אם יש את הגרש (
' ) ומנטרלים אותו, להלן דוגמה ב-PHP:
קוד PHP:
$Password = $_REQUEST['Password'];
$pos = strrpos($Password, "'");
if($pos != 0)
}
//continue of the code
{
else {
echo "There is an error!" ;
}
פשוט לא?

אנחנו בודקים אם בסיסמא יש לפחות גרש אחד ואם כן זה מדפיס בעיה, אם לא זה ממשיך כרגיל
בהמשך אני אלמד על איך להתגונן בטפסי הרשמה עם החדרת מידע לא רצוי.
שיטה 2 (מומלצת יותר):
להלן דוגמה ב-PHP:
קוד PHP:
<?php$id = $_GET['id'];
$secure = mysql_real_escape_string($id);
$a = mysql_query("SELECT `username` from `users` WHERE `id` = '{$secure}'") ;
$b = mysql_fetch_array($a);
echo $b['username'];
?>
פשוט השיטה mysql_real_escape_string(); מנטרלת את התווים שיכולים לפגוע.
(קרדיט ל-Crazy_Style)
עד פה

בהצלחה בשמירה על המסד!