اعتبارسنجی فرم PHP

اعتبارسنجی فرم

این مبحث و مبحث بعدی نشان می‌دهند که چگونه اعتبار داده ها را در فرم های PHP بررسی کنید.

اعتبارسنجی فرم PHP مهم ترین موضوع برای طراحان سایت است. بررسی این موضوع که کاربران داده هایی که در یک فرم وارد می‌کنند درست است یا خیر یا به محدودیت های گذاشته  شده در بخش های مختلف فرم توجه کرده اند از مهمترین نیاز های طراحان سایت در یک فرم است. این اطلاعات می‌تواند داده هایی که کاربر وارد میکند، کوکی هایی که فرستاده میشوند، داده های سرویس های وب را شامل باشد.

در بخش بررسی فرم ها به روش ساختن فرم HTML اشاره کردیم، حال یک نمونه فرم در HTML مشاهده کنید ودر ادامه با روند ایجاد این فرم آشنا شوید.

حال به بررسی طرز نوشتن این فرم می‌پردازیم:

فیلد های متنی

بخش های این فرم که در آن المان هایی از جنس متن قرار می‌گیرند را معرفی میکند. این بخش ها شامل نام، ایمیل، وب سایت و بخش توضیحات است. کد HTML این بخش ها به صورت زیر تعریف شده اند

این کد ها داده های ورودی بخش نام، ایمیل، وب سایت و توضیحات را دریافت می‌کنند تا در ادامه داده های ورودی را بررسی شوند به صورت خروجی درآیند.

کلیدهای رادیویی

در این فرم برای قسمت جنسیت افراد کلیدهای رادیویی قرار داده شده تا با انتخاب یکی از آنها جنسیت کاربر مشخص شود. از این کلید های رادیویی در هر جایی که نیاز به انتخاب گزینه ها باشد می‌توان استفاده کرد. نوشتن این کد ها در HTML به صورت زیر است:

 عناصر فرم

برای قرار دادن این ورودی ها به صورت فرم از کد زیر استفاده می‌کنیم. این کد شامل بخش های مختلفی است که در ادامه آن ها را به تفصیل توضیح می‌دهیم:

وقتی که فرم تایید شود، داده ها به بخش method=post فرستاده می‌شوند.

[“SERVER[“PHP_SELF_$ چه کاربردی دارد؟

[“SERVER[“PHP_SELF_$ یک متغیر سوپر گلوبال است  که نام فایل در حال اجرا را باز می‌گرداند و در همان صفحه به نمایش می‌گذارد به جای آن که در صفحه دیگری اطلاعات را نشان دهد.

کاربرد تابع ()htmlspecialchars در PHP

تابع ()htmlspecialchars کاراکتر های مورد نظر در PHP را به یکسری کارکتر های خاص در HTML تبدیل می‌کند. این تبدیل از سو استفاده افراد در فرم مورد نظر جلوگیری میکند. برای مثال کاراکتر<and>  را در HTML به صورت ;&lt; and &gt نمایش میدهد.

نکته مهم در فرم های PHP

تابع [“SERVER[“PHP_SELF_$ جزو متغیرهایی است که می‌تواند مورد استفاده هکرها قرار گیرد. یک کاربر میتواند با اضافه کردن یک اسلش “/” به دامنه شما کد تزریق وارد میکنند و سایت شما را هک کند. ( کد تزریق یا xss از روش هایی است که مورد استفاده هکر ها است. برای  جبران این ضعف php راه حلی قرار داده است. ابتدا ببینیم که تابع [“SERVER[“PHP_SELF_$ چگونه مورد استفاده هکرها قرار میگیرد.

فرض کنید ما یک فرم به نام  test_form.php داشته باشیم:

حال، اگر کاربر یک بخشی مانند  “http://www.example.com/test_form.php” به آدرس بار اضافه کند، به صورت زیر ترجمه میشود:

حال اگر یک کاربر آدرسی مبتنی بر هک شدن را در آدرس بار بنویسد

این آدرس به صورت زیر ترجمه میکند:

این کد  یک برچسب  اسکریپت و یک متن اخطار اضافه میکند. هنگامی که فردی وارد آن صفحه شود کد جاوا اسکریپت اجرا میشود و آن فرد اخطار هک شدن را مشاهده میکند. این روش آسان ترین روش برای هکر ها در استفاده از تابع [“SERVER[“PHP_SELF_$ است.

جلوگیری از هک شدن

با استفاده از تابع ()htmlspecialchars میتوان  از هک شدن تابع  [“SERVER[“PHP_SELF_$ جلوگیری کرد. نوشتن این کد برای فرم ها در php به صورت زیر است:

همان طور که گفته شد تابع ()htmlspecialchars کارکترها را در html تغییر میدهد بنابراین هکر هنگامی که کدی را تزریق میکند آن کد به صورت زیر نمایش داده میشود:

بنابراین هک شدن ناموفق میشود و امنیت فرم بالا رفته و هیچ خطری فرم را تهدید نخواهد کرد.

بررسی داده های فرم با PHP

اولین قدم فرستادن داده ها در PHP به تابع ()htmlspecialchars است. با نوشتن تابع ()htmlspecialchars هنگامی که کاربری قصد نوشتن اسریپت <script>location.href(‘http://www.hacked.com’)</script> را داشته باشد، این کد به صورت زیر نمایش داده میشود و باعث ایجاد امنیت در صفحه و ایمیل میشود:

&lt;script&gt;location.href(‘http://www.hacked.com’)&lt;/script&gt;

همچنین از دو دستور دیگر برای ارسال یک فرم استفاده میکنیم:

با استفاده از تابع ()trim میتوان فاصله های اضافی گذاشته شده توسط کاربر را در فرم و یا خط های اضافی را پاک کرد.

با استفاده از تابع ()stripslashes در PHP میتوان “/ “های  گذاشته شده توسط کاربر را حذف کرد.

قدم بعدی ایجاد کردن  تابعی است که بتوان داده های نوشته شده در فرم را برای ما بررسی کند. نام این تابع را ()test_input قرار میدهیم. حال میتوان تمام متغیرهای نوشته شده در ()POST_$ را با استفاده از تابع () test_input بررسی کرد.

تمام آن چه توضیح دادیم به صورت زیر نمایش داده میشود:

توجه داشته باشید انچه که در ابتدا نوشته  و ارسال خواهد شد توسط تابع [“SERVER[“REQUEST_METHOD_$e بررسی میشود. اگر اعتبارسنجی فرم PHP مورد تایید و داد ها از جنس متغییر POST بودند آن را نمایش میدهد. اگر این شرایط برقرار نبود صفحه دوباره لود شده و یک فرم خالی نمایش داده میشود.

 

 

 

24 نظرات شما

  • elnaz

    آذر ۲۶, ۱۳۹۲ at ۹:۳۵ ق.ظ
    سلام آموزش کاربردی و مفیدی بود مرسی
    • بهاران بنی اسدی

      آذر ۲۶, ۱۳۹۲ at ۹:۳۹ ق.ظ
      سلام مرسی از نظرات شما :)
  • مصطفی هادی

    دی ۲۱, ۱۳۹۲ at ۷:۲۶ ب.ظ
    با سلام و عرض اردت شیوه آموزشی گام به گام شما فوق العاده مفید و کاربردی است. متشکرم
  • محسن

    اسفند ۲۳, ۱۳۹۲ at ۱:۳۶ ب.ظ
    سلام خیلی عالی . ممنون هم مکفی و هم روان . منتظر آموزش های بعدتون هستم بزرگوار
  • مری

    فروردین ۵, ۱۳۹۳ at ۸:۰۵ ب.ظ
    یه سوال فنی مهندس. قسمت اکشن فرم رو اگه با htmlspecialchars بزاریم، دیگه لازم نیست برای تک تک المان های فرم (تکست باکس ها) این کارو تکرار کنیم؟
    • بهاران بنی اسدی

      فروردین ۶, ۱۳۹۳ at ۸:۱۳ ق.ظ
      سلام نه دیگر لازم نیست. در واقع در بخش معرفی input ها برای تمام داده ها این تابع در نظر گرفته شده است. لطفا به بخش تابع دستور بیشتر توجه کنید.
  • مری

    فروردین ۵, ۱۳۹۳ at ۸:۱۱ ب.ظ
    اها یه سوال دیگه. دستور $_SERVER["REQUEST_METHOD"] با دستور isset($_POST['submit'] برابره؟؟ هردو زمانی که دکمه ارسال زده بشه شرط رو انجام میدن دیگه؟
    • بهاران بنی اسدی

      فروردین ۶, ۱۳۹۳ at ۸:۲۹ ق.ظ
      میتونم بگم در شرایطی که باید دکمه ارسال زده شود هر دو یک عمل رو انجام میدهند ولی در isset($_POST['submit'] چون دکمه ارسال از جنس input هست شرط رو انجام میدهد. اما $_SERVER["REQUEST_METHOD"] از روش Post استفاده میکند.( روش post در بخش آشنایی با فرم توضیح داده شده است )جاهایی که حتی submit هم نداشته باشیم این دستور ارزش های درون دستور را انتقال میدهد. روش isset($_POST['submit'] خیلی ابتدایی است.
  • مهدی

    فروردین ۷, ۱۳۹۳ at ۴:۵۰ ب.ظ
    سلام ممنون بابت اموزش و سایت جامع تون. من تست کردم جواب داد فقط از این تابع در action="" استفاده میکنیم میخوام اعتبارسنجی ابتدا انجام بشه اگه مورد بود بگه فیلد خالی و... اما اگه درست بود به صفحه اکشنم بره اینو باید چیکار کنم من بدونم اعتبار سنجی اسکریپتی که نوشتم کار میکنه تو اونجا action="ac.php" قرار دادم اما اینجوری میدونم چیکار کنم ؟ ممنون میشم راهنمایی کنید؟
    • بهاران بنی اسدی

      خرداد ۲۶, ۱۳۹۳ at ۶:۳۴ ب.ظ
      سلام ممنون از نظر شما چیزی که شما میخواید اسمش رو گذاشتن تکنولوژی Ajax و با جاوا باید نوشته بشه. یعنی اعتبار سنجی توی همون لحظه و توی همون صفحه انجام بشه. توضیحش خیلی طولانیه و حقیقتش خودم هم خیلی بهش آشنایی ندارم
  • mohamad

    فروردین ۱۲, ۱۳۹۳ at ۳:۰۲ ق.ظ
    مرسی بهاران عالیه ;)
  • سید علی سینا

    اردیبهشت ۱۶, ۱۳۹۳ at ۱۰:۲۱ ب.ظ
    عالی بود
  • mahshid

    مرداد ۲۴, ۱۳۹۳ at ۲:۴۰ ب.ظ
    شما که اموزشتون رو از دبلیو3اسکول میزارید ذکر کنید عزیز.چیزی از ارزش زحماتتون کم نمیکنه :)
    • بهاران بنی اسدی

      شهریور ۳, ۱۳۹۳ at ۱۰:۱۲ ق.ظ
      چشم، این مسئله در ابتدای راه اندازی سایت ذکر شده بود سعی میکنیم در مقالات هم ذکر بشه
    • mino

      شهریور ۲۰, ۱۳۹۳ at ۱۰:۰۶ ب.ظ
      سلام مهشید خام عزیزمن چه فرقی داره بهر حال اگه براتون خوب بود لازمم نیس تشکر کنید ماشالله همه گیر دادن به اینکه از W3 school نوشته شده شمام حوصلشو دارین برین ترجمه کنین بخونین
  • mino

    شهریور ۲۰, ۱۳۹۳ at ۱۰:۰۹ ب.ظ
    مرسی از مظالبتون بهاران خانم .راستی مثلا ما یه سایت رو ظراحی کردم همه جاش کامل بود چظوری اینو راه اندازی کنیم مثه خودشما .همیشه این مسله برام سوال بوده
    • بهاران بنی اسدی

      شهریور ۲۲, ۱۳۹۳ at ۶:۰۰ ب.ظ
      سلام، باید بک هاست تهیه کنید با یک دامنه و روی اون فعال کنید
  • یاسر

    مهر ۳, ۱۳۹۳ at ۱۰:۵۰ ب.ظ
    دمت گرم!عالی!!!!!!
  • hadi

    آذر ۱۰, ۱۳۹۳ at ۱۲:۲۲ ق.ظ
    بهاران خانم کاش آموزش CSS و JAVA SCRIPT رو هم بزارید. واقعا وب سایت پرمحتوایی داری آفرین خانم.
    • بهاران بنی اسدی

      تیر ۱۴, ۱۳۹۴ at ۴:۱۱ ب.ظ
      خیلی ممنون. در آینده آموزش ها را زیاد می کنیم.
  • مینا

    مرداد ۲۳, ۱۳۹۴ at ۶:۳۸ ب.ظ
    سلام سایت خیلی خوبی هست. امیدوارم مطالب بیشتری روی این سایت بخونیم موفق باشی
    • الهه قنبری

      مرداد ۲۴, ۱۳۹۴ at ۱۱:۰۴ ق.ظ
      سلام. ممنون متشکر.لطفا مطالب مورد علاقه تان را بگویید تا بیشتر پست بگذاریم.
  • max

    آذر ۱۲, ۱۳۹۴ at ۵:۳۰ ب.ظ
    آموزشاتون خیلی کاربردیه ،ممنون .
  • ایمان

    فروردین ۱۲, ۱۳۹۵ at ۲:۱۲ ب.ظ
    سلام ممنون میشم به سوالم پاسخ بدید ! من فرم رو ارسال میکنم و نمیخوام فرم رو type ="text" بذارم . میخوام فقط ایمیل رو اعتبار سنجی کنم . جز این روش شما روش دیگه ای هم هست ک من مشخص کنم کاراکترها چی باشن .

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


© 2013 Mobtadi. All rights reserved.
کلیه حقوق مادی و معنوی برای وبسایت مبتدی محفوظ است.