HtmlEncode והתגוננות מפני קוד זדוני

לעתים נדרש מאיתנו כמתכנתים לאפשר בדפים מסוימים הזנת קוד לתוך שדות. כדי לאפשר הזנת קוד כזו נהיה חייבים לנטרל את ההגנות של ASP.NET מפני התקפות קוד מרושעות. כדי לבטל את ההגנה מפני הזרקת קוד כזו ולאפשר למשתמש לקלוט קוד בשדות מסוג Textbox למשל, יהיה עלינו לשנות את ה - Page Directive, הממוקמים בראש הדף, באופן הבא:

<%@ Page Language=”VB” ValidateRequest=”false”%>

במידה והתכונה validaterequest הינה בעלת ערך true אז ASP.NET לא יאפשר למשתמש לקלוט קוד כלשהו לתוך שדה בדף. הבעיה היא שברגע שאנו מבטלים את ההגנה הזו אנו חושפים את עצמנו ואת המשתמשים באפליקציה שלנו להתקפות קוד מצד משתמשים זדוניים. בעיקר נכון הדבר במקרים שבהם המידע שהמשתמש מזין לתוך השדות בדף שלנו נשמרים בבסיס הנתונים והקוד שהוא הזין מוצג לאחר מכן למשתמשים אחרים.

מדוע אנו חייבים להתגונן מפני שמירת קוד זדוני בבסיס הנתונים שלנו

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

נניח שמשתמש יזין לתוך textbox את הקוד הבא:

<script>location.href=’http://zdoni.co.il’;</script>

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

שימוש ב - HtmlEncode לצרכי הגנה מפני קוד זדוני

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

דוגמה לשימוש ב - HtmlEncode בעת הצגת קוד בדף

Response.Write(Server.HtmlEncode(TextBox1.Text))

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


סיכום

במדריך זה למדנו כיצד נוכל לאפשר למשתמש לקלוט קוד בתוך Textboxוכיצד נוכל להתגונן נגד קוד זדוני בעזרת המתודה HtmlEncode.


 
© 2010-2013  www.Devschool.co.il | מדיניות פרטיות | תנאי שימוש