למה חשוב לבדוק IsValid בצד השרת כשמשתמשים עם validators (איך אפשר לעקוף (לפרוץ) את הבדיקות בצד הלקוח)
(זהו פוסט ה - 200 שלי, ואני חושב שזהו הפוסט הראשון בבלוגייה של השנה הלועזית החדשה)
שיש לכם דף עם תיבת טקסט שמוצמד אליו RequiredFieldValidator ולחצן.
בזמן לחיצה כותבים על הדף את השעה הנוכחית.
הקוד נראה כך:
<asp:TextBox runat="server" ID="txt1" />
<
asp:RequiredFieldValidator ErrorMessage="*" ControlToValidate="txt1"
runat="server" />
<
asp:Button Text="text" runat="server" ID="btn" OnClick="btn_click" />
צד השרת:
protected void btn_click(object sender, EventArgs e)
{
Response.Write(DateTime.Now.ToLongTimeString());
}
כשנריץ נראה את הדף הבא
אם ננסה ללחוץ על הלחצן ללא ערך בתיבת הטקסט לא תתבצע ריצה לשרת ואחנו נראה כוככבית ליד תיבת הטקסט
כעת נראה איך כל האקר מתחיל עוקף את הבדיקה.
בהנחה שיש לכם IE8 מותקן לכם IE Developer Toolar במידה ויש לכם IE7 תוכלו להוריד את זה
מכאן
אחרי שתלחצו על הלחצן ותקבלו את הכוכבית - תפעילו את ה - Devloper Tool Bar (לחיצה על F12).
תקבלו את המסך הבא
תלחצו על החץ שמסומן באדום ותבחרו בכוכבית שמופיעה ליד תיבת הטקסט - כעת ה - tool bar יציג בצד שמאל את האלמנט הנבחר (הכוכבבית) ובצד ימין את כל הפרטים שלו.
תבחרו בטאב Attributes ותראו את כל המאפיינים
החלק השמאלי של ה - toolbar:
החלק הימני
אחרי שבחרתם ב - attributes, תבחרו באלמנט שמסומן באדום ותלחצו על ה - X כדי למחוק אותו.
מה שזה יעשה - זה ימחק את הקריאה לפונקציית ה - JavsScript שבודקת האם יש ערך בתיבת הטקסט ותתבצע ריצה לשרת.
אמנם כשנחזור מהשרת נגלה שוב את הכוכבית מכיון שהבדיקה התבצעה גם בצד השרת - אבל היות שלא התייחסו לבדיקה - הקוד שלנו יתבצע ונראה את השעה.
היות שאחנו יודעים שהבדיקה מתבצעת בצד השרת - הדבר היחיד שצריך לעשות זה לשאול IsValid לפני הקוד שלנו
protected void btn_click(object sender, EventArgs e)
{
if (IsValid)
{
Response.Write(DateTime.Now.ToLongTimeString());
}
}
הערך של IsVAlid יהיה true רק עם כל ה - validators עברו בהצלחה.
אפשר להשתמש במאפיין הזה אחרי ה - Page_Load - כלומר בכל האירועים של הפקדים, אם נרצה להשתמש בו גם ב - Page_Load (או קודם) אנחנו צריכים לקרוא לפונקציית Validate לפני השימוש ב - IsValid.