دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۷
  • تیر

جلسه ۱۹ : ارزیابی اعتبار فرم ها در php 7

  • دسته‌بندی‌ها :
جلسه ۱۹ : ارزیابی اعتبار فرم ها در php 7
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      با عرض سلام و وقت به خیر خدمت کاربران سایت پی وی لرن و کاربرانی که دوره ی آموزش php 7 را دنبال می کنند.
      در جلسه گذشته فصل Forms ها را  با معرفی و آشنایی با فرم ها آغاز کردیم. در این جلسه و در ادامه این دوره به ارزیابی اعتبار فرم ها در php 7 می پردازیم.

      ارزیابی اعتبار فرم ها در php 7

      در این جلسه و جلسات بعدی روش استفاده از اسکریپت PHP برای ارزیابی اعتبار داده های فرم را بررسی خواهیم کرد.

      در زمان بپردازش فرم های PHP به فکر امنیت (SECURITY) باشید :
      این صفحه حاوی اعتباربخشی فرم نیست، فقط طریقه ارسال و دریافت داده ها نمایش داده شد.
      هرچند در صفحه بعد طریقه پردازش فرم های PHP با در نظر گرفتن امنیت برنامه بحث می شود.
      اعتباربخشی دقیق و صحیح داده های فرم برای محافظت خود در مقابل هکرها و اسپمرها ضروری است.

      در ادامه یک فرم HTML ایجاد می کنیم که از فیلدهای مختلفی نظیر: فیلدهای الزامی و اختیاری، فیلدهای متنی، دکمه های رادیویی، دکمه سابمیت و غیره تشکیل شده است.

      خروجی این فرم را در ادامه مشاهده خواهید کرد.

      ارزیابی اعتبار فرم ها در php 7

      خروجی اعتبار فرم ها

      در ادامه ارزیابی اعتبار فرم ها در php 7 ، می توانید قوانین تعیین اعتبار فرم را ببینید.

      قواعد تعیین اعتبار

      فیلدقاعده اعتباربخشی
      نامالزامی + فقط حاوی حروف و فاصله باشد
      ایمیلالزامی + بایستی آدرس ایمیل معتبر حاوی @ و . باشد
      وبسایتاختیاری، اگر تکمیل شد، حاوی یک URL صحیح باشد
      نظراختیاری، فیلد متنی چند خطی (محدوده متنی)
      جنسالرامی. بایستی یکی از دو مورد انتخاب شود.

      فیلدهای متنی

      فیلدهای نام، ایمیل و وبسایت همگی ورودی متنی دارند و فیلد متنی هستند؛ فیلد نظر به صورت متن چند خطی است.
      کد این فیلدها به صورت زیر خواهد بود :

      مثال : 

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

      مثال : 

      اجزای فرم

      کد HTML فرم به صورت زیر است :

      مثال : 

      زمانی که فرم سابمیت (ارسال) می شود، داده های وارد شده در فرم با استفاده از متد POST ارسال می شوند.

      متغیر [SERVER[“PHP_SELF_$ چیست؟

      متغیر [SERVER[“PHP_SELF_$ یک متغیر سوپرگلوبال است که نام فایل اسکریپت در حال اجرا را بر می گرداند.

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

      تابع () htmlspecialchars چیست؟
      تابع () htmlspecialchars حروف خاص را به entities های HTML تبدیل می کند.
      به این معنا است که کاراکترهای HTML مانند <and > را با  lt&؛ و gt& جایگذاری می شوند.
      این کار از سوء استفاده هکرها و مزاحمان از فیلدهای فرم را در هنگام تزریق کد HTML یا جاوا اسکریپت به فرم (Cross-site Scripting attacks) کاهش می دهد.

      یک نکته مهم در خصوص امنیت فرم PHP

      متغیر [SERVER[“PHP_SELF”_$ ممکن است توسط هکرها استفاده شود.

      اگر PHP_SELF در صفحه شما استفاده شده باشد، کاربر می تواند یک اسلش (/) را به همراه مقداری فرمان اسکریپت کراس سایت (xss) برای اجرا در فرم وارد کند.

      کراس سایت اسکریپتینگ (xss) نوعی آسیب پذیری امنیتی کامپیوتری است که در برنامه های وب (وب اپلیکیشن) یافت می شود.
      XSS به هکرها این امکان را می دهد که سمت کلاینت اسکریپت خود را به داخل صفحات وبی که توسط کاربران دیگر مشاهده می شود، تزریق کنند.

      فرض کنید ما فرم زیر را در یک فایل به نام “test_form.php” در اختیار داریم.

      مثال : 

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

      مثال : 

      تاکنون همه چیز خوب است.

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

      مثال : 

      در این حالت، کد فوق به صورت زیر ترجمه می گردد :

      مثال : 

      این کد یک تگ اسکریپت و یک فرمان اخطار را اضافه می کند.
      هنگامی که صفحه بارگذاری می شود، کد جاوا اسکریپت اجرا می شود (کاربر یک پیغام هشدار دریافت می کند).
      این تنها یک نمونه ساده و بی ضرر سوء استفاده از متغیر PHP_SELF است.

      در جریان باشید که هر گونه کد جاوا اسکریپت را می توان بین دو تگ <اسکریپت> قرار داد!
      یک هکر می تواند کاربر را از فایلی به فایل دیگر بر روی سرور دیگر هدایت (ریدیرکت) کند و آن فایل ممکن است حاوی کد ویروسی و آلوده ای باشد که بتواند متغیرهای گلوبال یا دکمه سابمیت فرم را به آدرس دیگری فرستاده و برای مثال اطلاعات وارد شده کاربر در فرم را در آدرس دیگری ذخیره کند.
      در ادامه ارزیابی اعتبار فرم ها در php 7 می آموزیم که چگونه می توان از سوء استفاده دیگران از $_SERVER[“PHP_SELF”] جلوگیری کرد.

      چگونه از سوء استفاده دیگران [“SERVER[“PHP_SELF_$ جلوگیری کنیم؟

      می توان با استفاده از تابع () htmlspecialchars از بهره برداری و سوء استفاده از [“SERVER[“PHP_SELF_$ پیشگیری کرد.

      بنابرین کد فرم باید به صورت زیر تغییر کند :

      مثال : 

      با استفاده از تابع () htmlspecialchars کاراکترهای ویژه به entities های HTML تبدیل می شوند.
      حالا اگر کاربری سعی کند که از متغیر PHP_SELF سوء استفاده کند، نتیجه کد وارد شده در آدرس بار به صورت زیر نمایش داده می شود :

      مثال : 

      در این حالت از سوء استفاده پیشگیری شده و آسیبی وارد نخواهد شد.

      ارزیابی اعتبار فرم ها در php 7 را با ارزیابی اعتبار داده های یک فرم HTML به پایان می بریم.

      اعتباربخشی داده های فرم با HTML

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

      مثال : 

      این کد اجرا نخواهد شد، زیرا به صورت نسخه تبدیل شده HTML ذخیره می شود، مثل دستور زیر:

      مثال : 

      حالا نمایش این کد بر روی صفحه یا داخل ایمیل ارسالی از فرم ایمن خواهد بود.
      دو کار دیگر دیگر نیز در زمان سابمیت داده های فرم توسط کاربر می توان انجام داد :

      ۱- کارکترهای غیر ضروری (مثل space, tab, newline) را از داده های وارد شده توسط کاربر حذف کرد (با استفاده از تابع () trim برنامه PHP).

      ۲- حذف بک اسلش (\) از داده های وارد شده توسط کاربر در فرم (با استفاده از تابع () stripslashes برنامه PHP).

      گام بعدی

      گام بعدی ایجاد تابعی است که تمامی بررسی های داده های وارد شده در فرم را برای ما انجام می دهد (که خیلی بهتر از آن است که هر بار کد را بنویسیم و آن را تکرار نماییم.)

      ما نام این تابع را () test_input می گذاریم.

      حالا می توانیم هر یک از متغیرهای POST_$ را با استفاده از تابع () test_input چک کنیم.
      اسکریپت این تابع به صورت زیر خواهد بود :

      مثال : 

      به شروع اسکریپت توجه کنید، ما ابتدا با استفاده از متد “[SERVER[“REQUEST_METHOD_$ چک می کنیم که آیا فرم سابمیت شده است یا خیر.
      اگر REQUEST_METHOD به صورت POST باشد، فرم سابمیت شده است یعنی کاربر فرم را تکمیل کرده و دکمه ارسال را زده است و حالا بایستی تعیین اعتبار شود.
      اگر هنوز فرم سابمیت نشده باشد، این متد یک فرم خالی را نمایش خواهد داد.

      گام بعدی این است که فیلدهای ورودی مورد نیاز را ایجاد کرده و در صورت لزوم برای آن پیغام خطا تعیین نماییم.

      کلام آخر

      در این جلسه به ارزیابی اعتبار فرم ها در php 7 پرداختیم.
      در جلسه بعدی به آموزش فیلدهای الزامی فرم در php 7 می پردازیم.
      با پی وی لرن همراه باشید.

      QR:  جلسه ۱۹ : ارزیابی اعتبار فرم ها در php 7
      به اشتراک بگذارید