24-04-2008, 22:05
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
אני אנסה לתת תשובה קצת יותר רחבה מזו של התגובה מעלי:
נניח שאתה בונה טופס פשוט להתחברות של משתמש. לצורך העניין, הטופס שלנו יהיה טריביאלי עד כדי טיפשות:
אתה מקבל שם משתמש וסיסמא משדות טקסט name ו-pass ואז אתה בודק האם חוזר משהו משאילתא כמו:
קוד PHP:
SELECT * FROM users_table WHERE Username = '<name>' AND Password = '<pass>'
(מכיוון שאני לא יודע ASP, פשוט כתבתי <name> ו-<pass> שהם משתנים שמתקבלים ישירות מתיבות הטקסט)
זה יעבוד כי אם לא חוזרות תוצאות משמע אין שם וסיסמא מתאימים כאלו, ואם חוזרת תוצאה יחידה, אזי יש התאמה והמשתמש נכנס.
אלא שקוד כזה יוצר לך בעיה חמורה! מה יקרה אם משתמש זדוני ינסה להכניס לך:
קוד:
User: Admin
Pass: bla' OR '1' = '1
השאילתא הנ"ל תקבל את הצורה הבאה:
קוד PHP:
SELECT * FROM users_table WHERE Username = 'Admin' AND Password = 'bla' OR '1' = '1'
מכיוון שהמשתמש הזדוני השתמש ב-OR ומכיוון ש 1 תמיד יהיה שווה ל-1, הרי שהתנאי יחזיר לך את כל השדות במסד הנתונים - לא אפס שדות => הוא מקבל גישה, ועוד של Admin.
השימוש בקלט שמהווה נסיון של שבירת השאילתא שלך נקרא SQL INJECTION כי למעשה מזריקים לך לשאילתא פרמטרים לא צפויים.
למעשה זה פותח פתח לבעיות נוספות, במיוחד ב-ASP שלעיתים כשנתקל בביטוי SQL לא תקין פשוט יציג אותו למשתמש, מה שיקל עוד יותר על מציאת פירצה בו.
לפרטים נוספים אני ממליץ על גוגל
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
|