View Single Post
ישן 28-04-12, 13:57   # 6
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

נהיה כאן קצת סלט.

קודם כל, המונחים שעליהם אתה מדבר כאן הם בעיקר SQL Injection ו- XSS.
מדובר בפירצות אבטחה די נפוצות ובסיסיות, כל מתכנת שנוגע קצת בתחום אבטחת המידע סביר להניח שיתקל בהן כבר בראשית דרכו.
אתה מוזמן לקרוא עליהן בויקיפדיה/ OWASP, יש עליהן מידע בכל חור רלוונטי שתחפש בו.

עכשיו כשאתה מבין מפני מה אתה צריך להגן, אתה צריך להבין מה ומתי אתה צריך להגן.
טעות נפוצה של מתכנתים זה שהם מעבירים כל קלט שהתקבל מהמשתמש סדרת עינויים שבה הם מבצעים את כל הבדיקות והסינונים שהם מכירים על מנת שבסופו של דבר הקלט ייחשב "בטוח" ולא יוכל לגרום שום נזק למערכת.
כשאתה קולט מידע מהמשתמש - חשוב שתבין מה אתה עושה איתו, איפה הוא עובר, איך ניתן לנצל אותו ומה הערך שאמור להיות בו.

לדוג' - אם אתה קולט מהמשתמש ID של עמוד במטרה לשלוף אותו מהמסד, הבדיקה הראשונה והעיקרית שאתה צריך לעשות זה לוודא שהוא מספר (בהנחה שזה המצב, לצורך העניין זה כן), אחר כך אתה יכול גם להגדיל ראש ולוודא שהוא גדול מ- 0 ובסופו של דבר חשוב לוודא שבאמת קיימת רשומה עם ה- ID הזה במסד הנתונים.
אין שום סיבה לסנן אותו מתגיות HTML, אין שום סיבה להבריח בו כל מיני תווים כאלה ואחרים, זה מיותר וחסר תועלת, אין שום מספר שכולל בתוכו תווים כמו "<" או ";", אם היו - הוא לא היה מספר.
אותו רעיון גם לגבי ערך שניתן לצפות מראש (למשל שדות שאמורים לקבל "true" או "false"), לגבי ערכים עם תבנית מוגדרת (אך ורק אותיות באנגלית בטווח של A-Z) וכו'.


בעניין השאילתות שאתה קצת פוחד מהם -
אין ספק שבתור מתכנת שלא מכיר את העניין אולי זה נראה קצת מוזר.
אבל, אם יש לך ידע בסיסי כלשהו ב- OOP או לפחות ידע בסיסי כלשהו במחלקות (ואם אין כדאי שיתחיל להיות), אין כאן שום דבר יוצא דופן.
הדרך הזאת חוסכת ממך המון בכל הנוגע להברחת המידע שאתה מכניס לשאילתה, היא מפרידה לחלוטין את תחביר השאילתה מהקלט עצמו ולמעשה גם מאפשרת לך להגדיר מה אמור להיות בכל משתנה.


שיהיה בהצלחה.

Last edited by אדיר; 28-04-12 at 14:00..
  Reply With Quote