PDA

View Full Version : کنترل های Validation در ASP.NET ( بخش اول )



amir.NET2
پنج شنبه 30 آذر 1385, 09:06 صبح
کنترل های Validation در ASP.NET ( بخش اول )
بررسی و ارزیابی صحت اطلاعات ورودی توسط کاربران ، یکی از عملیات بسیار مهم در برنامه های کامپیوتری خصوصا" برنامه های وب با توجه به ماهیت معماری آنها می باشد . پیاده کنندگان برنامه های وب می بایست پس از درج داده ورودی توسط کاربر و قبل از ارسال آن به لایه های دیگر ، آنها را ارزیابی و صرفا" پس از تائید ، پردازش های مورد نیاز را بر روی آنها انجام دهند . اعتقاد عملی به سیاست فوق باعث پیشگیری تعداد زیادی از حملات در برنامه های‌ وب می گردد . در صورت عدم رعایت موارد اشاره شده ، شرایط لازم به منظور سوء استفاده از پتانسیل فوق فراهم و مهاجمان می توانند با بهره برداری از نقاط ضعف موجود ، حملات خود را برنامه ریزی نمایند .
در این مقاله به بررسی امکانات ارائه شده در ASP.NET به منظور ارزیابی صحت داده ورودی خواهیم پرداخت . آشنائی و بکارگیری روش های مناسب به منظور بررسی صحت داده ورودی یکی از عملیات مهم در جهت ایمن سازی برنامه های وب نیز می باشد . پس با انگیزه و دقت مضاعف کار را دنبال می نمائیم .

ضرورت و ماهیت کنترل های Validation
زمانی که از یک TextBox برای درج داده بر روی‌ یک فرم استفاده می گردد ،‌ همواره این احتمال وجود خواهد داشت که کاربران اطلاعات را متناسب با انتظار یک برنامه وارد نمایند . به عنوان مثال ،‌ فرض کنید که در یک فرم وب از دو TextBox برای درج داده عددی توسط کاربران استفاده شده است و در ادامه می بایست اطلاعات ورودی در اختیار یک روتین جهت انجام پردازش های مورد نیاز ( به عنوان نمونه ، انجام عملیات محاسباتی بر روی داده های ورودی ) قرار داده شود . در صورتی که کاربران داده را در محدوده مجاز وارد ننمایند و یا ورودی از نوع عددی نباشد ، روتین مورد نظر در انجام پردازش های خود با مشکل مواجه خواهد شد . بنابراین ، می بایست همواره قبل از این که داده ورودی در اختیار روتین های مورد نظر جهت انجام پردازش های مشخص شده قرار داده شود ، آنها را بررسی و در صورت رعایت مجموعه سیاست های تعریف شده ، امکان استفاده از آنها را برای اسکریپت ها فراهم نمود .
به منظور ارزیابی داده ورودی توسط کاربران با توجه به داده مورد نیاز اسکریپت ها ،‌ از روش های متعددی می توان استفاده نمود . متداولترین نیاز ، وجود یک مقدار ورودی است . در چنین مواردی ، انتظار داریم قبل از این که یک اسکریپت بتواند پردازش های مورد نیاز را بر روی داده ورودی انجام دهد، در TextBox مقداری درج شده باشد. ماهیت داده ورودی در این مقطع مهم نمی باشد و مهم این است که داده ئی توسط کاربر در مکان مورد نظر وارد شده باشد . در برخی موارد لازم است که داده ورودی از یک نوع خاص باشد ( به عنوان نمونه یک مقدار عددی ) تا بتوان آن را در اختیار روتین های مورد نظر به منظور انجام پردازش های محاسباتی قرار داد . در برخی موارد دیگر ، لازم است که داده ورودی در یک محدوده خاص باشد و داده درج شده خارج از محدوده مورد نظر ، غیرمعتبر گردد .
برای بررسی و ارزیابی صحت داده در ASP.NET مجموعه ای از کنترل های validation ارائه شده است . از کنترل های فوق می توان به منظور بررسی و تست عدم درج داده ، مقایسه داده ورودی با یک مقدار خاص ، بررسی وجود مقادیر در یک محدوده خاص و سایر فرم های داده استفاده نمود تا این اطمینان ایجاد گردد که داده مناسب و معتبر در اختیار اسکریپت ها و به منظور انجام پردازش ها قرار داده می شود .
کنترل های validation در ارتباط مستقیم با کنترل TextBox بوده و تست و ارزیابی خود را بطور اتوماتیک و پس از کلیک بر روی کنترل هائی نظیر Button ، LinkButton و ImageButton انجام خواهند داد . در صورتی که ماحصل بررسی یک کنترل validation توام با موفقیت نباشد ، validator یک پیام خطاء را نمایش و به کاربران اعلام می نماید که داده ورودی فاقد شرایط لازم برای استفاده در برنامه می باشد .
در شکل زیر کنترل های Validation ارائه شده در ASP.NET 2.0 ،‌ نشان داده شده است .


http://www.srco.ir/Articles/images/ValidationControl-1.jpg
کنترل های Validation
در ادامه به بررسی کنترل های فوق خواهیم پرداخت .
کنترل <asp:RequiredFieldValidator>
متداولترین نوع ارزیابی داده ورودی ، بررسی آن به منظور اطمینان از درج داده توسط کاربر است . کنترل <asp:RequiredFieldValidator> ، مسئولیت بررسی داده ورودی در یک Textbox را برعهده گرفته و در صورت عدم درج داده توسط کاربر ، یک پیام خطاء را نمایش خواهد داد . در چنین مواردی ، روتین هائی که می بایست پس از کلیک بر روی دکمه موجود از داده درج شده در TextBox استفاده نمایند ، فرصت انجام چنین کاری را به دلیل عدم درج داده توسط کاربر پیدا نخواهند کرد .
شکل عمومی
شکل عمومی کنترل فوق به صورت زیر است :

<asp:RequiredFieldValidator id="id" Runat="Server"
ControlToValidate="controlID"
Display="Dynamic|None|Static"
ErrorMessage="string"
SetFocusOnError="False|True"
ValidationGroup="name"
/>

توضیحات
<LI dir=rtl>از یک id صرفا" زمانی استفاده می شود که قرار است به کنترل از طریق اسکریپپ مراجعه گردد .
<LI dir=rtl>به خصلت ControlToValidate ، مقدار id کنترل textBox که مسئولیت بررسی آن به کنترل RequiredFieldValidator واگذار شده است ،‌نسبت داده می شود.
<LI dir=rtl>خصلت ErrorMessage ، پیام مورد نظر در صورت بروز خطاء را مشخص می نماید .
<LI dir=rtl>خصلت SetFocusOnErrorMessage ، یک blinking cursor را در کنترل TextBox مربوطه به منظور تسهیل در امر درج داده جدید قرار می دهد .
<LI dir=rtl>خصلت ValidationGroup یک گروه از کنترل های TextBox را که مجموعه ای از تست های بررسی روی آنها اعمال خواهد شد ، مشخص می نماید (در مواردی که دکمه های متفاوت می توانند باعث فعال شدن تست های مختلفی گردند ) .
خصلت Display : کنترل RequiredFieldValidator ، یک فضای افقی را متناسب با طول رشته مربوط به پیام خطاء اشغال خواهد کرد . در اغلب موارد ، پیام خطاء در کنار TextBox مربوطه نمایش داده می شود . مکان فوق بر روی صفحه همواره نشان داده خواهد شد ( ولو این که خطائی اتفاق نیافتد ) . در صورتی که مقدار خصلت Display معادل Dynamic در نظر گرفته شود ، مکانی برای نمایش پیام خطاء رزو نخواهد شد و بطور پویا و همزمان با بروز خطاء ایجاد می گردد .
مثال
در این مثال زمانی که کاربر بر روی button کلیک نمود ، کنترل RequiredFieldValidator بطور اتوماتیک عملیات بررسی و ارزیابی داده ورودی در TextBox را آغاز می نماید ( قبل از این که روتین Get_Data فراخوانده شود ) . در صورتی که TextBox خالی باشد ،‌ یک پیام خطاء نمایش داده شده و cursor مجددا" در TextBox قرار خواهد گرفت . در صورتی که در TextBox داده ئی توسط کاربر درج گردد ، تست ارزیابی با موفقیت انجام و روتین مربوط فراخوانده شده و مقدار ورودی را در خروجی نمایش خواهد داد . در این مثال ، مقدار خصلت Display کنترل RequiredFieldValidator ،‌ معادل Dynamic در نظر گرفته شده است ، بنابراین در صورت عدم تولید یک پیام خطاء ، مکانی بر روی صفحه برای نمایش آن در نظر گرفته نخواهد شد . بدین ترتیب به کنترل label اجازه داده می شود که در کنار TextBox نمایش داده شده و از فضای مشابه پیام خطاء استفاده نماید ( استفاده مشترک از یک مکان بر روی فرم وب به منظور نمایش پیام خطاء و یا داده ورودی توسط کاربر ) .

<SCRIPT Runat="Server">

Sub Get_Data (Src As Object, Args As EventArgs)
Output.Text = "You entered '" & MyTextBox.Text & "'"
End Sub

</SCRIPT>

<form Runat="Server">

<asp:TextBox id="MyTextBox" Runat="Server"/>
<asp:Button Text="Submit" OnClick="Get_Data" Runat="Server"/>
<asp:RequiredFieldValidator Runat="Server"
ControlToValidate="MyTextBox"
ErrorMessage="Please enter a data value"
Display="Dynamic"
SetFocusOnError="True"/>
<asp:Label id="Output" Runat="Server"/>

</form>

کنترل <asp:RangeValidator>کنترل فوق مسئولیت بررسی و ارزیابی داده ورودی در یک TextBox را برعهده گرفته و ماموریت آن حصول اطمینان از این موضوع است که داده درج شده در محدوده مورد نظر است . این محدوده توسط دو خصلت MinimumValue و MaximumValue مشخص می گردد . فرآیند فوق می تواند در ارتباط با نوع های متفاوت داده نظیر Date ، اعداد صحیح ، اعداد اعشاری و یا رشته ( مقدار پیش فرض ) اعمال گردد .
شکل عمومی
شکل عمومی کنترل فوق به صورت زیر است :

<asp:RangeValidator id="id" Runat="Server"
ControlToValidate="controlID"
Display="Dynamic|None|Static"
ErrorMessage="string"
MaximumValue="value"
MinimumValue="value"
SetFocusOnError="False|True"
Type="Currency|Date|Double|Integer|String"
ValidationGroup="name"
/>

توضیحات
<LI dir=rtl>از یک id صرفا" زمانی استفاده می شود که قرار است به کنترل از طریق اسکریپپ مراجعه گردد .
<LI dir=rtl>خصلت ErrorMessage ، پیام مورد نظر در صورت بروز خطاء را مشخص می نماید .
<LI dir=rtl>خصلت SetFocusOnErrorMessage ، یک blinking cursor را در کنترل TextBox مربوطه به منظور تسهیل در امر درج داده جدید قرار می دهد .
<LI dir=rtl>خصلت ValidationGroup یک گروه از کنترل های TextBox را که مجموعه ای از تست های بررسی روی آنها اعمال خواهد شد ، مشخص می نماید (در مواردی که دکمه های متفاوت می توانند باعث فعال شدن تست های مختلفی گردند ) .
<LI dir=rtl>خصلت Display : کنترل RangeValidator ، یک فضای افقی را متناسب با طول رشته مربوط به پیام خطاء اشغال خواهد کرد . در اغلب موارد ، پیام خطاء در کنار TextBox مربوطه نمایش داده می شود . مکان فوق بر روی صفحه همواره نشان داده خواهد شد ( ولو این که خطائی اتفاق نیافتد ) . در صورتی که مقدار خصلت Display معادل Dynamic در نظر گرفته شود ، مکانی برای نمایش پیام خطاء رزو نخواهد شد و بطور پویا و همزمان با بروز خطاء ایجاد می گردد .
<LI dir=rtl>خصلت Type : در صورتی که نوع داده ورودی مشخص نگردد ،‌ نوع آن به صورت پیش فرض string در نظر گرفته خواهد شد . یک TextBox خالی ، به عنوان یک نوع داده معتبر ارزیابی خواهد شد . بنابراین ، لازم است که به همراه کنترل RangeValidator از یک کنترل RequiredFieldValidator نیز استفاده گردد تا این اطمینان حاصل شود که با عدم درج داده در TextBox مربوطه با آْن به عنوان یک داده معتبر برخورد نخواهد شد .
خصلت های MinimumValue و MaximumValue ، حداقل و حداکثر محدوده مجاز برای داده ورودی را مشخص می نمایند .
مثال
در این مثال به منظور ارزیابی و تست داده ورودی در یک TextBox از دو کنترل RangeValidator و RequiredFieldValidator استفاده شده است . بنابراین می بایست حتما" در TextBox مقداری درج گردد . با توجه به این که مقدار خصلت Type معادل integer و مقادیر خصلت های MinimumValue و MaximumValue به ترتیب صفر و نه در نظر گرفته شده اند ،‌داده ورودی می بایست عددی بین صفر تا نه باشد .

<SCRIPT Runat="Server">

Sub Get_Data (Src As Object, Args As EventArgs)
Output.Text = "You entered '" & MyTextBox.Text & "'"
End Sub

</SCRIPT>

<form Runat="Server">

Enter a value between 0 and 9:<br/>
<asp:TextBox id="MyTextBox" Runat="Server"/>
<asp:Button Text="Submit" OnClick="Get_Data" Runat="Server"/>
<asp:RangeValidator Runat="Server"
ControlToValidate="MyTextBox"
Type="Integer"
MinimumValue="0"
MaximumValue="9"
ErrorMessage="Please enter an integer in the range 0 to 9"
Display="Dynamic"
SetFocusOnError="True"/>
<asp:RequiredFieldValidator Runat="Server"
ControlToValidate="MyTextBox"
ErrorMessage="Please enter a data value"
Display="Dynamic"
SetFocusOnError="True"/>
<asp:Label id="Output" Runat="Server"/>

</form>

someCoder
پنج شنبه 30 آذر 1385, 13:14 عصر
سلام،
اگر اینها رو خودت نوشتی یا از جایی آوردی، در هرصورت منبعت هم بگو.

Pioneers
جمعه 27 بهمن 1385, 21:29 عصر
اقا چرا وقتی کاربر داخل یه textbox با کنترل requiredvalidator کلیک کرد دیگه نمیتونه از اون صفحه خارج بشه(مثلا Back) مگه با نوشتن متن؟

amir.NET2
چهارشنبه 19 اردیبهشت 1386, 17:17 عصر
چون validation group هاشون به صورت پیش فرض مثل هم هست شما باید validation group کنترل هایی که به هم مرتبط هستند رو یکسان کنید

sin
جمعه 09 شهریور 1386, 06:44 صبح
سلام
من از کنترل rangevalidator روی textbox استفاده کردم قبلا اگه اطلاعات اشتباهی وارد میشد به محض خروج از textbox و بدون کلیک بر روی کنترل هائی مثل Button ، LinkButton و ImageButton پیغام خطا میداد ولی بعد پروژه ام را به یک فولدر دیگه بردم ولی دیگه rangevalidator ها اصلاً کار نمی کنند
به نظر شما مشکل از کجاست.