آموزش برنامه نویسی ، پایگاه داده sql server
آموزشگاه برنامه نویسی تحلیل داده : دوره های آموزشی برنامه نویسی و طراحی وب ASP.Net , C# , HTML , CSS , SQL Server


آموزشگاه برنامه نویسی مجتمع فنی تهران میرداماد : دوره های آموزشی برنامه نویسی و طراحی وب ASP.Net , C# , HTML , CSS , SQL Server

آموزش PHP   >   راهکارهای موثر در PHP > راهکار های کار با فرم ها در PHP
بخش سوم : اعتبار سنجی اطلاعات ورودی کاربران در فرم های وب PHP

مقدمه :

در مرحله قبل به آموزش روش کنترل کردن تعیین اطلاعات در فیلدهای اجباری فرم پرداختیم تا کاربر آنها را خالی رها نکند .
اما در این بخش قصد داریم تا ماهیت اطلاعاتی که کاربر وارد می کند را اعتبار سنجی کرده و ببینیم آیا طبق استاندارهای مورد نظر ما هستند یا خیر .
برای مثال در فرم این راهکار ، دو کادر متنی داریم که کاربر در کادر اول بایستی آدرس ایمیل و در کادر دوم آدرس وب سایت خود را وارد نماید . هدف ما طراحی کدهایی است که مقادیر وارد شده در این دو فیلد را بررسی کرده و ببیند آیا با فرمت معمول یک آدرس ایمیل و یک آدرس سایت سازگار هستند یا خیر .
در صورت صحیح بودن داده های ورودی ، فرم امکان ارسال اطلاعات به مقصد را می دهد ، در غیر اینصورت پیام های خطای لازم جهت اصلاح مقادیر ورودی را به کاربر نمایش می دهد .
راهنمایی : اینکه گفتیم می خواهیم بررسی کنیم آیا ایمیل وارد شده دارای فرمت صحیح است ، یعنی اینکه مثلا کاربر ایمیل را به صورت شکل کلی آن یعنی ( abc@doamain.xyz ) , وارد کرده باشد نه هر فرمت غیر متعارف دیگری مثل ( abc@domain ) و یا صرفا اعداد و حروف بی معنی . ولی نمی توانیم تشخیص دهیم ، آیا ایمیل واقعی کاربر است یا خیر .

آشنایی با فرم HTML ثبت اطلاعات و فیلدهای آن :

فرم مثال زیر ، یک فرم ساده HTML را برای دریافت اطلاعات از کاربر نمایش می دهد . این فرم از چندین کنترل Input ، برای وارد نمودن متن ، یک دکمه انتخابی و یک دکمه برای ارسال یا Submit فرم به شرح زیر است :

  • Name : این فیلد اجباری بوده و برای دریافت نام کاربر استفاده می شود . فقط می تواند شامل حروف و فاصله خالی باشد .
  • Email : این فیلد نیز اجباری بوده و برای دریافت ایمیل کاربر به کار می رود . فقط می تواند شامل حروف و اعداد ، به همراه یک کاراکتر @ و باشد .
  • Website : این فیلد اختیاری بوده و برای دریافت آدرس سایت کاربر استفاده می شود . اگر پر شود ، بایستی حاوی یک آدرس صحیح اینترنتی باشد .
  • Comment : این فیلد نیز اختیاری بوده و فقط می تواند برای دریافت نظر کاربر استفاده شود .
  • Gender : انتخاب این گزینه اجباری بوده و کاربر بایستی یکی از دو نوع جنسیت را انتخاب کند .

در ادامه به بررسی کد HTML فرم خواهیم پرداخت .

بررسی کد HTML فرم :

کد کادرهای متن ( Text Fielsd ) :

کادرهای name ، email و وب سایت Website ، کادرهای متن معمولی input بوده و کادر Comment یک کادر متن بزرگ textarea است . کد آنها در فرم به صورت زیر است :

کد Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

کد کادرهای انتخابی ( Radio Buttons ) :

کادر انتخابی جهت تعیین جنسیت کاربر ( مرد یا زن ) ، یک کنترل رادیویی به صورت زیر است :

کد Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

کد تگ فرم Form Element :

کد تگ فرم که وظیفه ارسال اطلاعات را بر عهده دارد ، به صورت زیر است :

کد <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
...
محتویات
...
</form>

هنگامی که فرم ارسال یا submit می شود ، اطلاعات موجود در آن از طریق متد POST ارسال می شوند . در نهایت خروجی فرم به صورت زیر است :

خروجی

PHP Form Example


Name: *

E-mail: *

Website:

Comment:

Gender: Female Male *

بررسی نکات مهم کد فرم :

نکته 1 : متغیر ["SERVER["PHP_SELF_$ چیست ؟ :
متغیر ["SERVER["PHP_SELF_$ ، یک سراسری ( superglobal ) است که نام فایل اجرا کننده کد یا اسکریپت جاری را بر می گرداند .
بنابراین این متغیر ، در هنگام ارسال فرم ، اطلاعات آن را به خود صفحه جاری ( به جای ارسال به صفحه دیگری ) می فرستد . در این حالت ، اطلاعات فرم در همان صفحه پردازش شده و می توان چنانچه اطلاعات دارای اشکال باشند ، در همان صفحه پیام های خطا را به وی نمایش داد .

نکته 2 : تابع ( ) htmlspecialchars چیست ؟ :
تابع ( ) htmlspecialchars ، کاراکترهای خاص HTML موجود در کادرهای متن فرم را به معادل آنها در زیان HTML تبدیل می کند . برای مثال ، اگر کاربر کاراکترهای > و < را در کادرهای متن وارد نماید ، پس از تبدیل به صورت ;lt& یا ;gt& در می آیند . این کار از حملات اسکریپتی در فرم ها جلوگیری می کند .
برای دریافت لیست کامل کاراکترهای خاص HTML به بخش آموزش کاراکترهای خاص HTML بروید .

نکته امنیتی مهم در مورد فرم HTML مورد استفاده :

متغیر ["SERVER["PHP_SELF_$ ، به راحتی توسط هکرها می تواند مورد استفاده قرار گیرد .
اگر متغیر اشاره گر PHP_SELF که به صفحه جاری اشاره دارد ، در صفحه مورد استفاده قرار بگیرد ، یک هکر می تواند با قرار دادن کاراکتر / و سپس نوشتن کدهای حملات اسکریپتی ( XSS ) ، دستورات خطرناکی را برای اجرا به سرور شما ارسال کند .
برای مثال فرض کنید که همانند مثال فرم این راهکار ، کد فرم به صورت زیر باشد :

کد <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

اگر کاربر یک آدرس معمولی مثل "http://www.example.com/test_form.php" را در نوار ابزار تایپ کرده و اجرا نماید ، کد بالا به صورت زیر ترجمه می شود ، که مشکل یا خطری ندارد :

کد <form method="post" action="test_form.php">

اما اگر یک کد حمله اسکریپتی را به صورت زیر وارد نماید :

کد http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

این کد در هنگام اجرا به صورت زیر ترجمه شده که حاوی یک اسکریپت بوده و پیام هشداری ( alert ( ) ) با محتوای اینکه شما هک شده اید را به کاربر نشان می دهد :

کد <form method="post" action="test_form.php"/><script> alert('hacked')</script>

توجه داشته باشید که در این گونه موارد ، هر نوع دستور اسکریپتی به راحتی از طریق اشاره گر PHP_SELF ، می تواند به صفحه ارسال شود .
برای مثال هکر می تواند باعث ارجاع ( redirect ) شدن کاربر به صفحه دیگری که حاوی اسکریپت مورد نظرش است شده یا حتی اطلاعات فرم را بدزدد .

نحوه پیشگیری از حملات اسکریپتی :

حملات اسکریپتی از طریق اشاره گر PHP_SELF یا سایر توابع و متغیرهای صفحه ، همانطور که در بخش قبل اشاره کردیم ، با استفاده از تابع ( ) htmlspecialchars قابل پیشگیری است .
در واقع کد فرم مثال قبل را بایستی با تابع ( ) htmlspecialchars به صورت زیر بازنویسی کنیم :

کد <form method="post" action="test_form.php"/><script> alert('hacked')</script>

تابع ( ) htmlspecialchars ، کاراکترهای خاص در HTML را به معادل حروفی آن تبدیل کرده و باعث می شود تا مثلا مد حمله اسکریپتی مثال قبل به صورت زیر ترجمه و ارسال شود که به دلیل تغییر ماهیت ، اجرا نشده و آسیبی نمی تواند به سیستم وارد نماید :

کد <form method="post" action="test_form.php"/><script> alert('hacked')</script>

بخش پایانی : نحوه اعتبار سنجی اطلاعات ورودی در فرم به وسیله PHP :



راجع این مطلب سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...         >>>>>  ورود به انجمن تخصصی


نطر خودتان درباره این صفحه  :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :                 
آدرس Email :    
 
نظر شما :        
سوال امنیتی : جمع سه + پنج چنده ؟