![]() |
# 1 |
חבר מתקדם
|
שאלת אבטחה בהכנסת נתונים
באחד האתרים שאני ממיר מ ASP ל PHP - נתקלתי בבעיה הבאה, שקשרה לאבטחה -
אני מודע לכך שיש פונקציות שתפקידן תטפל בהכנסת נתונים לדטה בייס ולבדוק אם הן לא מכילות פרמטרים אסורים הפונקציה העיקרית שהבנתי שאני צריך להשתמש בה הינה: mysql_real_escape_string הבעיה היא כזו- למיטב הבנתי הפונקציה לא שומרת על הטקסט ומחזירה שגיאה במידה ונמצאו בו התווים הבאים: (תקנו אותי אם אני טועה) \x00 \n \r \ ' " \x1a אבל מצד שני כן הייתי רוצה לאפשר למשתמשים להכניס \ , " , ' ... ואולי עוד פרמטרים האם אין פונקציה מוכנה , אפילו לא מובנית ב PHP שכבר מריצה והופכת ל HTML או תוים בטוחים את המחרוזת שהוכנס לה גם אם היא מחזיקה ניסיון פריצה? כלומר שומרת על הכתוב כך שבמידה ואכן נכנס משתמש תמים שהחליט לעשות איזה סמיילי שכולל /r או ' ' שהוא יוכל לעשות זאת בשקט. תודה מראש.
__________________
![]() |
![]() |
![]() |
# 2 |
חבר וותיק
|
הפונקצייה לא מחזירה שגיאה, היא מבריחה את התווים שהבאת ..
|
![]() |
![]() |
# 3 |
עסק רשום [?]
|
אתה יכול לקרוא בדוקומנטציה של השפה על הפונקציות mysql_real_escape_string ו- htmlspecialchars.
בתגובה שלך בילבלת ביניהן קצת, לכל אחת מהן יש תפקיד שונה. בנוסף לכך - במחלקות חדשות יותר לעבודה מול מסדי נתונים (לדוג' MySQLi ו- PDO) יש אפשרות לעבוד עם placeholders בשאילתות, כך ניתן להפריד בין המבנה והתחביר של השאילתה לבין המידע שמתקבל מהמשתמש ולמנוע ממנו לבצע בשאילתה מניפוצליות כאלו ואחרות. למידע נוסף - http://www.php.net/manual/en/pdostatement.bindparam.php |
![]() |
![]() |
# 4 |
חבר מתקדם
|
צודקים, קודם התבלבלתי בהבנה
וגם מסתבר שיש פונקציה שעושה את העניין עם ההמרה ל HTML שלא הכרתי\זכרתי. נחמד. ![]() אבל אני עדין לא בטוח שזה מספיק , כלומר רצוי להשתמש בפונקציות בשילוב כדי לאבטח הכנסת נתונים לאתר?? ויש משהו מאד בעייתי בלהכניס HTML לדטה בייס כיון שזה לא הנתונים האמיתים ואז במידה ומושכים את הנתונים לאפליקציה צריך לעשות המרות חוזרות. יש פתרון לזה? > לגבי mysqli ן PDO נראה מעניין גם קראתי קצת על איך זה מתבצע , אבל האם אתה בטוח שיש הפרדה כי בסופו של דבר עדין משתמשים במשפט SQL חלקים ממנו פשוט עוברים עוד עיבוד לפי מה שמופיע בדוגמאות. אבל זה כל כך שונה ממה שאני מורגל אליו שאני מעדיף לא להכנס לזה כרגע מה גם שאני לא בטוח שהשרת יתמוך :/
__________________
![]() |
![]() |
![]() |
# 5 |
משתמש - היכל התהילה
|
PREPARED STATEMENTS או DATA BINDING אלו השיטות שצריך לעבוד בהן.
זה ממש לא מסובך ולא צריך לפחד... אם אתה רוצה להתקדם מקצועית, לך על זה.
__________________
קו ישר, כי אפשר גם אחרת |
![]() |
![]() |
# 6 |
עסק רשום [?]
|
נהיה כאן קצת סלט.
קודם כל, המונחים שעליהם אתה מדבר כאן הם בעיקר SQL Injection ו- XSS. מדובר בפירצות אבטחה די נפוצות ובסיסיות, כל מתכנת שנוגע קצת בתחום אבטחת המידע סביר להניח שיתקל בהן כבר בראשית דרכו. אתה מוזמן לקרוא עליהן בויקיפדיה/ OWASP, יש עליהן מידע בכל חור רלוונטי שתחפש בו. עכשיו כשאתה מבין מפני מה אתה צריך להגן, אתה צריך להבין מה ומתי אתה צריך להגן. טעות נפוצה של מתכנתים זה שהם מעבירים כל קלט שהתקבל מהמשתמש סדרת עינויים שבה הם מבצעים את כל הבדיקות והסינונים שהם מכירים על מנת שבסופו של דבר הקלט ייחשב "בטוח" ולא יוכל לגרום שום נזק למערכת. כשאתה קולט מידע מהמשתמש - חשוב שתבין מה אתה עושה איתו, איפה הוא עובר, איך ניתן לנצל אותו ומה הערך שאמור להיות בו. לדוג' - אם אתה קולט מהמשתמש ID של עמוד במטרה לשלוף אותו מהמסד, הבדיקה הראשונה והעיקרית שאתה צריך לעשות זה לוודא שהוא מספר (בהנחה שזה המצב, לצורך העניין זה כן), אחר כך אתה יכול גם להגדיל ראש ולוודא שהוא גדול מ- 0 ובסופו של דבר חשוב לוודא שבאמת קיימת רשומה עם ה- ID הזה במסד הנתונים. אין שום סיבה לסנן אותו מתגיות HTML, אין שום סיבה להבריח בו כל מיני תווים כאלה ואחרים, זה מיותר וחסר תועלת, אין שום מספר שכולל בתוכו תווים כמו "<" או ";", אם היו - הוא לא היה מספר. אותו רעיון גם לגבי ערך שניתן לצפות מראש (למשל שדות שאמורים לקבל "true" או "false"), לגבי ערכים עם תבנית מוגדרת (אך ורק אותיות באנגלית בטווח של A-Z) וכו'. בעניין השאילתות שאתה קצת פוחד מהם - אין ספק שבתור מתכנת שלא מכיר את העניין אולי זה נראה קצת מוזר. אבל, אם יש לך ידע בסיסי כלשהו ב- OOP או לפחות ידע בסיסי כלשהו במחלקות (ואם אין כדאי שיתחיל להיות), אין כאן שום דבר יוצא דופן. הדרך הזאת חוסכת ממך המון בכל הנוגע להברחת המידע שאתה מכניס לשאילתה, היא מפרידה לחלוטין את תחביר השאילתה מהקלט עצמו ולמעשה גם מאפשרת לך להגדיר מה אמור להיות בכל משתנה. שיהיה בהצלחה. Last edited by אדיר; 28-04-12 at 14:00.. |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|