فقط واتساپ ۰۹۱۵۷۲۳۲۳۹۸

اعتبار سنجی فرم در php آموزش form validation

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

اعتبار سنجی فرم در php یکی از مباحث مهم و حیاتی در برنامه نویسی php است. اعتبارسنجی فرم ها از حملات هکرها و اسپمرها جلوگیری می کند. در این آموزش قصد داریم پیرامون مبحث اعتبار سنجی فرم در php صحبت کنیم پس با ما همراه باشید.

 

 

مثال آموزشی برای اعتبارسنجی فرم

برای درک بهتر نحوه اعتبارسنجی فرم در php ، یک مثال کاربردی ارائه می کنیم. برای شروع کار یک فرم html طراحی کرده و محدودیت هایی را برروی فیلدها اعمال می کنیم.

 

ساخت فرم در html

ساخت فرم در html مرحله اول کار ماست. در آموزش های قبلی بطور کامل با نحوه ساخت فرم در php آشنا شدیم. در طراحی فرم این فیلدها را قرار می دهیم: نام، ایمیل، وبسایت، نظرات و جنسیت. حال یکسری محدودیت ها برای اعتبارسنجی داده های واردشده در فیلدها تعیین می کنیم:

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

عدم رعایت هر کدام از موارد بالا در هنگام ورود اطلاعات، با پیغام خطا مواحه می شود.  حال نحوه ساخت فرم در html را بررسی می کنیم. کدهای html فرم به صورت زیر است:

 

 

همانطور که مشاهده می کنید برای فیلدهای نام، ایمیل و وبسایت از نوع داده ای text استفاده شده، برای فیلد نظرات از textarea استفاده کردیم چون تعداد کاراکترهای ورودی بیشتر است و برای فیلد جنسیت از radio استفاده کردیم و دو مقدار زن و مرد را برای آن تعیین کردیم.

کد استفاده از فرم html در php ، به صورت زیر است:

 

همانطور که ملاحظه می کنید، متد ارسال اطلاعات در این فرم POST است و از یک متغیر سوپرگلوبال SERVER_$ استفاده شده است. این متغیر داده های مربوط به عناوین، محل دستور و مسیرها را در خود نگهداری می کند. از تابع htmlspecialchars برای متغیر SERVER_$ استفاده کردیم که در بخش های به بررسی کاربرد آن می پردازیم.

نکته قابل توجه در این کد این است که از دستور PHP_SELF استفاده کرده ایم. این دستور به هکرها کمک می کند که بتوانند در قسمت address bar مرورگر، کدهای XSS خود را بعد از یک علامت / در ادامه آدرس تایپ کنند. شاید بپرسید کدهای XSS چیست؟ در ادامه به این سوال پاسخ خواهیم داد.

 

این پست رو حتما ببین : آموزش html و css

 

کدهای xss

کدهای xss نوعی از کدهای ورودی هستند که هکرها بوسیله آنها می توانند دستورات خود را به کامپیوتر قربانی وارد کنند. به این نوع حملات XSS (Cross-site scripting) گفته می شود و هکر از آسیب پذیری های کدها برای تزریق اسکریپت خود و سرقت اطلاعات کاربران استفاده می کند. برای درک بهتر این نوع از حملات مثال زیر را در نظر بگیرید.

در فایلی بنام test_form.php دستورات زیر را قرار می دهیم:

چنانچه کاربر آدرس زیر را در مرورگر وارد کند:

“http://www.example.com/test_form.php”

کد قرار داده شده در فایل بصورت زیر ترجمه می شود.

 

این پست رو حتما ببین : ۷ سایت برتری که با PHP طراحی شده اند را بشناسید!

حال تصور کنید که کاربر یک اسکریپت دیگر نیز به کد اضافه کند یا به اصطلاح قطعه کدی را به آن تزریق کند. بطور مثال آدرس زیر را در مرورگر وارد کند:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert(‘hacked’)%3C/script%3E

در این حالت کد به فرم زیر ترجمه می شود:

 

در این دستور، یک تابع alert به کد ما اضافه شده است و در زمان لود صفحه، این اسکریپت اجرا شده و یک پیغام هشدار با عنوان hacked به کاربر نشان می دهد حتما تاکنون متوجه نحوه کار کدهای xss شده اید. در این مثال متغیر PHP_SELF، هک شده است.
مثال بالا ساده ترین حالت تزریق کدهای xss است، شما می توانید هر نوع اسکریپتی را وارد کرده و مثلا کاربر را به سروری دیگر انتقال دهید تا بتوانید اطلاعات او را سرفت کنید. اعتبارسنجی فرم در php برای پیشگیری از چنین حملاتی صورت می گیرد. برای رفع این آسیب پذیری می توان از تابع ()htmlspecialchars استفاده کرد.

 

 

کاربرد تابع htmlspecialchars

کاربرد تابع htmlspecialchars برای تبدیل کاراکترهای ورودی به کاراکترهای فرمت html است که به آن ها html entity گفته می شود. به عنوان مثال با کمک این تابع می توان کاراکترهایی نظیر علامت < یا > را به فرمت html آن یعنی lt$ و gt$ تبدیل کرد. مهم ترین کاربرد تابع htmlspecialchars برای اعتبار سنجی فرم در php است و به کمک آن می توان از بروز حملاتی نظیر xss جلوگیری کرد. در مثال بالا فرم اصلاح شده کد بصورت زیر است:

 

 

حال چنانچه کاربر همان دستور حاوی کدهای XSS بالا را وارد کند این کدها به صورت زیر ترجمه می شود.

<“form method=”post” action=”test_form.php/”><script>alert(‘hacked’)</script>

بنابراین هیچ مشکلی به وجود نمی آورد.

 

 

اعتبارسنجی داده ها

برای اعتبارسنجی فرم در php ، در قدم اول باید متغیرها را به داخل تابع ()htmlspecialchars هدایت کنیم. این کار باعث می شود که کاراکترها به فرمت html entity تبدیل شود و کاربر نتواند دستور خود را اجرا کند. مثال این تابع را در قسمت قبلی مشاهده کردید. اقدامات دیگری نیز می توان برای افزایش امنیت انجام داد از جمله:

  • حذف کاراکترهای غیرضروری مانند فاصله های اضافه و خطوط خالی با کمک تابع ()trim
  • حذف \ ها با استفاده از تابع ()stripslashes

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

 

حال برای اعتبارسنجی فرم در php در قسمت ورود تک تک داده ها این تابع را فراخوانی می کنیم. کد کامل دستورات طراحی فرم و اعتبارسنجی داده های آن را در زیر مشاهده می کنید:

خروجی نهایی کار اعتبار سنجی فرم در php :

 

در این آموزش به بررسی نحوه اعتبارسنجی فرم در php پرداختیم. چنانچه شما نیز قصد طراحی فرم در php را دارید بهتر است تمامی موارد گفته شده را رعایت کنید تا به لحاظ امنیت دچار مشکل نشوید.

2 دیدگاه دربارهٔ «اعتبار سنجی فرم در php آموزش form validation»

ن-ب گفت:

آمزشها بسیار عالی بودند .
خدا قوت

رضا حیدری گفت:

ممنونم

پاسخ دادن به ن-ب لغو پاسخ

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

ورود | ثبت نام
شماره موبایل یا ایمیل خود را وارد کنید
برگشت
کد تایید را وارد کنید
کد تایید برای شماره موبایل شما ارسال گردید
ارسال مجدد کد تا دیگر
برگشت
رمز عبور را وارد کنید
رمز عبور حساب کاربری خود را وارد کنید
برگشت
رمز عبور را وارد کنید
رمز عبور حساب کاربری خود را وارد کنید
برگشت
درخواست بازیابی رمز عبور
لطفاً پست الکترونیک یا موبایل خود را وارد نمایید
برگشت
کد تایید را وارد کنید
کد تایید برای شماره موبایل شما ارسال گردید
ارسال مجدد کد تا دیگر
ایمیل بازیابی ارسال شد!
لطفاً به صندوق الکترونیکی خود مراجعه کرده و بر روی لینک ارسال شده کلیک نمایید.
تغییر رمز عبور
یک رمز عبور برای اکانت خود تنظیم کنید
تغییر رمز با موفقیت انجام شد