|
לאחר שקטע קוד מסויים שכתבתי בפרוייקט שנבנה מול ענף הפיתוח של Django הפסיק לעבוד (הציג קוד HTML שעבר escaping למרות שלא היה אמור *), התברר שנוסף לאחרונה escaping אוטומטי. לרגע הצצתי מהחלון לוודא שאין איש רכוב על חמור לבן.
כמה מילים מה זה ומדוע זה חשוב: אחת הפרצות הנפוצות ביישומי ווב היא ה-XSS. הפרצה מאפשרת לתוקף "להזריק" קוד HTML וסקריפט שמורצים ע"י המשתמש שלא חושד במאומה תחת ההרשאות שיש לו ליישום. בד"כ הזרקת הקוד מגיעה עקב קלט מהמשתמש שלא הומר כראוי (כגון תגים של html). הדרך להתמודד עימם היא לבצע "escaping", כלומר להמיר את התווים בעלי המשמעות מבחינת הקוד ליישויות שמוצגות ע"י הדפדפן (כגון המרת הסימן "גדול מ" אשר פותח תגי html ליישות >). יש להיות זהירים ולוודא שכל המשתנים המועמדים לפורענות יעברו את הסינון הראוי.
מעולם לא הבנתי מדוע תשתיות לפיתוח יישומי ווב לא עושים זאת אוטומטית (תוך אפשרות לעקוף כמובן במקרה הצורך). הרי זה הדבר ההגיוני לעשות כדי למנוע פרצות שכאלה. לכן שימח אותי הדבר שלפני מספר ימים שולבה התכונה ב-Django. משמחת עוד יותר הייתה העובדה שהתכונה עובדת בצורה חכמה. משתנים שכבר עברו את הפילטר של escape לא יעברו שוב, גם אם אוטומטי. רק משתנים שהוצגו כמות שהם, ללא escaping, יקבלו אוטומטית את התכונה (אלא אם הוגדר אחרת).
ל-RoR יש תוסף ל-ActiveRecord שעושה זאת, אך לדעתי זה מתבצע במקום הלא נכון (זה אמור להתבצע ברמת ה-view, לא ברמת ה-model).
*לתוהים: בקטע הקוד בו נתקלתי בתכונה, לא הייתה פרצה שכזו :-P התוכן המועבר לתבנית עבר escaping מראש (היה קוד טפסים שיוצר והועבר לתבנית) | |
|
escaping אוטומטי ב-Django | כניסה / יצירת מנוי חדש | 3 תגובות |
| ההערות הינן מטעם כותביהן. אין צוות האתר לוקח אחריות על תוכנן |
|
|