به کمک نیاز دارید؟

خدمات تخصصی

جستجو
این کادر جستجو را ببندید.
اعتبار سنجی

اعتبار سنجی اطلاعات ورودی کاربران در فرم های وب PHP

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

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

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

 

حتما بخوانید: تابع ( ) opendir در PHP

 

آشنایی با فرم 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 *

 

حتما بخوانید: ایجاد و استفاده از کوکی (Cookie) در PHP

 

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

نکته 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>

 

حتما بخوانید: تابع ( ) closedir در PHP

 

بررسی نحوه اعتبار سنجی مقادیر ورودی در فیلدهای متنی PHP

در راهکارهای قبل ، نحوه کلی اعتبار سنجی و کنترل وارد نمودن مقادیر در فیلدهای یک فرم را بررسی کردیم .
در این بخش به صورت جزیی تر و موردی به نحوه اعتبار سنجی مقادیر وارد شده برای فیلم های Name , Email و URL خواهیم پرداخت .

نحوه اعتبار سنجی کادر Name :

فرض کنید که در یک کادر متن، می خواهیم کاربر فقط بتواند حروف و یا فاصله خالی وارد کرده و وارد نمودن اعداد و سایر کاراکترها مجاز نباشد .
کد زیر یک راه ساده برای کنترل این مسئله را در اختیارمان قرار می دهد. در ابتدا مقدار ارسال شده از فرم توسط متغیر [“POST[“name_$ دریافت شده و در متغیر name$ ریخته می شود .

سپس توسط تابع ( ) Preg_match ، الگوی تعیین شده در تابع مقدار کنترل را سنجیده و چنانچه فقط شامل حروف و یا فاصله خالی باشد ، مقدار true را بر می گرداند . در غیر اینصورت مقدار آن false است .

با false بودن مقدار تابع ( ) Preg_match ، دستور شرطی if کد اجرا شده و یک پیام خطا ، مبنی بر غیر مجاز بودن استفاده از سایر کاراکترها را برای نمایش ثانویه در متغیر nameErr$ دخیره می کند . به کد زیر دفت نمایید :

کد $name = test_input($_POST[“name”]);
if (!preg_match(“/^[a-zA-Z ]*$/”,$name))
{
  $nameErr = “فقط حروف و فاصله خالی مچاز است “;
}

نکته مهم : تابع ( ) Preg_match ، تابعی است که یک مقدار وارد شده را با الگو یا معیار تعیین شده برای آن مقایسه کرده و مقدار true یا false را بر می گرداند .

نحوه اعتبار سنجی فیلد ایمیل Email

فرض کنید در یک کادر متن ، کاربر بایستی ایمیل خود را وارد کند . به وسیله کد زیر می توانید تشخیص دهید آیا مقداری که کاربر در کادر ایمیل وارد کرده ، دارای ساختار صحیح یک ایمیل است یا خیر . در غیر اینصورت پیام اخطاری را به وی نشان دهید .

کد $email = test_input($_POST[“email”]);
if (!preg_match(“/([\w\-]+\@[\w\-]+\.[\w\-]+)/”,$email))
{
      $emailErr = “آدرس ایمیل نا معتبر است”;
}

نحوه اعتبار سنجی مقدار ورودی در کادر URL :

در مثال زیر نیز کدی را طراحی کرده ایم که همانند مثال های قبل ، از طریق تابع ( ) Preg_match ، مقدار وارد شده در کادر website را بررسی کرده و چنانچه مطابق الگوی صحیح یک آدرس اینترنتی باشد ، آن را قبول کرده و در غیر اینصورت یک پیام خطا را جهت نمایش ثانویه به کاربر در متغیر $websiteErr ذخیره کند .

کد $website = test_input($_POST[“website”]);
if (!preg_match(“/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i”,$website))
{
   $websiteErr = “آدرس اینترنتی نا معتبر است”;
}

نمایش کامل مثال و مشاهده خروجی صفحه :

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

کد <?php
// تعیین متغیرهای لازم و قرار دادن آنها بر روی مقدار اولیه خالی
$nameErr = $emailErr = $genderErr = $websiteErr = “”;
$name = $email = $gender = $comment = $website = “”;

  if ($_SERVER[“REQUEST_METHOD”] == “POST”)
{
if (empty($_POST[“name”]))
{$nameErr = “وارد نمودن نام اجباری است”;}
else
{
$name = test_input($_POST[“name”]);
// چک کردن اینکه آیا نام وارد شده فقط شامل حروف و فاصله خالی است
if (!preg_match(“/^[a-zA-Z ]*$/”,$name))
{
$nameErr = ” فقط حروق و فاصله خالی مجاز است “;
}
}

  if (empty($_POST[“email”]))
{$emailErr = “وارد نمودن ایمیل اجباری است”;}
else
{
$email = test_input($_POST[“email”]);
// چک کردن اینکه آیا ایمیل وارد شده معتبر است
if (!preg_match(“/([\w\-]+\@[\w\-]+\.[\w\-]+)/”,$email))
{
$emailErr = ” ایمیل وارد شده نا معتبر است”;
}
}

if (empty($_POST[“website”]))
{$website = “”;}
else
{
$website = test_input($_POST[“website”]);
// چک کردن اینکه آیا آدرس اینترنتی وارد شده دارای ساختار صحیح است
if (!preg_match(“/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i”,$website))
{
$websiteErr = “آدرس اینترنتی وارد شده نا معتبر است”;
}
}

  if (empty($_POST[“comment”]))
{$comment = “”;}
else
{$comment = test_input($_POST[“comment”]);}

if (empty($_POST[“gender”]))
{$genderErr = “تعیین جنسیت اجباری است”;}
else
{$gender = test_input($_POST[“gender”]);}
}
?>

 

با دریافت « مشاوره برنامه‌نویسی، وب و سئو » از کارشناسان جوان حرفه‌ای و باتجربه ساکوراد؛ موفقیت کسب و کار، رونق فروش و افزایش درآمد خود را تضمین کنید!

 

 و اما کلام آخر…

با پیروی از این مراحل، می‌توانید اطلاعات ورودی کاربران را به طور مؤثر در فرم‌های PHP اعتبار سنجی کنید.

تصویر دکتر علی قوامی
دکتر علی قوامی
دانش‌آموخته دکترای تخصصی (PhD) کارآفرینی فناوری، بنیانگذار و مدیر گروه بین‌المللی کسب و کار ساکوراد با بیش از ۲۰ سال تجربه بعنوان کوچ، مدرس، مشاور و منتور در حوزه‌های مختلف راه‌اندازی و توسعه کسب‌وکار در ۱۵ کشور جهان هستم. در تلاشم تا تجربیات ذی‌قیمت خود را با شما دوستان عزیزم به اشتراک گذارم.
پیشنهاد بر اساس سلیقه شما
دستور Order By

دستور Order By

دستور ORDER BY در SQL برای مرتب‌سازی نتایج یک کوئری بر اساس یک یا چند ستون استفاده می‌شود. این دستور به شما امکان می‌دهد تا رکوردها را

ادامه مطلب »

مسیریابی تحصیلی - شغلی (آنلاین)

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

سئوالات و نظرات ارزشمند خود را با ما مطرح کنید

دیدگاهتان را بنویسید

کلینیک مشاوره کسب و کار

ارائه‌ی خدمات کوچینگ، مشاوره و منتورینگ توسط برترین متخصصان جوان

هاست سنتر حرفه‌ای

طیف وسیعی از خدمات حرفه‌ای هاستینگ با تنوع و کیفیت کنترل شده

کانال یوتیوب

آموزش‌ها و نکات کلیدی ما را دنبال کنید

کانال تلگرام

اخبار و تخفیفات گروهی ما را دنبال کنید

صفحه اینستاگرام

آموزش‌ها و تخفیفات گروهی ما را دنبال کنید

راهنمای گام به گام تا دریافت مشاوره

گام اول

انتخاب حوزه تخصصی مدنظر

گام دوم

بررسی رزومه مشاوران مرتبط

گام سوم

انتخاب مشاور با تخصص مدنظر

گام چهارم

تکمیل فرم و ثبت درخواست

گام پنجم

پرداخت حق‌الزحمه مشاور

گام ششم

تماس با شما برای تعیین وقت

گام هفتم

برقراری ارتباط شما با مشاور