اعتبار سنجی فرم ها Form Validation در Php

بازدید: 535 بازدید
اعتبار سنجی فرم ها

در آموزش امروز و آموزش بعدی درباره اعتبارسنجی فرم هاForm Validation صحبت خواهیم کرد.

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

فرم طراحی شده باید توانایی این را داشته باشد، که تشخیص دهد:

آیا فیلدی خالی رها شده است یا نه؟

آیا فیلد با مقدار درستی پر شده است یا نه؟

آیا فیلدهای ضروری پر شده اند یا نه؟

و بسیاری مسایل دیگر.

در آموزش امروز و آموزش بعدی همراه پرنیان باشید تا به طور کامل این موضوعات را بررسی کنیم.

با سلام خدمت همراهان همیشگی پرنیان طرح

در آموزش امروز و آموزش بعدی درباره اعتبارسنجی فرم هاForm Validation صحبت خواهیم کرد.

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

فرم طراحی شده باید توانایی این را داشته باشد، که تشخیص دهد:

آیا فیلدی خالی رها شده است یا نه؟

آیا فیلد با مقدار درستی پر شده است یا نه؟

آیا فیلدهای ضروری پر شده اند یا نه؟

و بسیاری مسایل دیگر.

در آموزش امروز و آموزش بعدی همراه پرنیان باشید تا به طور کامل این موضوعات را بررسی کنیم.

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

ورودی های متنی از نوع ضروری و غیرضروری

دکمه های انتخاب

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

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

فرم نمونه تمرینی

قوانینی که برای فیلدهای فرم بالا درنظر گرفته ایم، شامل موارد زیر است:

فیلد نام : یک فیلد ضروری است که باید تنها کاراکترهای حروف را به عنوان ورودی بپذیرد.

فیلد ایمیل :یک فیلد ضروری است که باید شامل یک آدرس معتبر ایمیل باشد.(دارا بودن یک @ و یک .)

فیلد وب سایت: یک فیلدغیرضروری است که اگر وجود داشته باشد باید یک آدرس معتبر داشته باشد.

فیلد کامنتت: یک فیلد غیرضروری است که باید بتواند چندین خط از انواع کاراکترها را در خود جای دهد.

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

نحوه کدنویسی برای بخش ها و فیلدهای مخنتلف فرم تمرینی

کدهای بخش فیلدهای متنی

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

[php]
Name:
E-mail:
Website:
Comment:
[/php]

دکمه های رادیویی

فیلد جنسیت دارای دو دکمه رادیویی است.

همانطور که می دانید دکمه های رادیویی، یکتا هستند.

یعنی وقتی گروهی از دکمه های رادیویی ، در یک محدوده قرار دارند، تنها یکی از آنها می تواند به حالت انتخاب وجود داشته باشد.

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

با این توضیحات، کدنویسی برای فیلد دکمه ها به صورت زیر خواهد بود:

[php]
Female
Male
Other
[/php]

المان فرم

کد فرم به شکل زیر خواهد بود:

code4form

وقتی کاربر روی دکمه ارسال اطلاعات کلیک می کند، اطلاعات وارد شده در فرم، بامتد post ارسال خواهند شد.

متغیر SERVER[“PHP_SELF”]_$یک متغیر فوق سراسری است که نام سند در حال اجرا را به عنوان خروجی برمی گرداند. یعنی صفحه ای که کدهای آن در حال حاضر، در حال اجرا هستند را مشخص میکند.

هشدار مهم امنیتی

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

اگر PHP_SELF در صفحه وب سایت شما وجود داشته باشد ،کاربر می تواند با وارد کردن یک” / ” (اسلش) و سپس یک کد مخرب XSS یا (Cross Site Scripting) دستور محاسبات مخرب را بدهد.

فرض می کنیم فرم زیر را در پیجی با نام test_form.php داریم.

code2form

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

code3form

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

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

در اینصورت، کد بالا به شکل زیر تعبیرو ترجمه می شود:
[php]


[/php]

این کد یک برچسب اسکریپت و یک فرمان هشدار ، به صفحه اضافه می کند.

و هنگامی که صفحه مورد نظر بارگیری می شود، کد java script اجرا خواهد شد.

(کاربر یک جعبه هشدار را خواهد دید)

این تنها یک مثال ساده و بی خطر از موارد استفاده متغیر php_self بود.

توجه داشته باشید که:

“هر” کد جاوا اسکریپتی  می تواند درون تگ <script> اضافه شود.

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

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

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

برای این کار کدهای فرم باید به شکل زیر باشند:

code form
این تابع، کاراکترهای خاصی را به موجودیت های html تبدیل می کند.

حالا اگر کاربر سعی کند که از متغیر PHP_SELF سوء استفاده  ، خروجی زیر نمایش داده خواهد شد.

[php]

<form method=”post” action=”test_form.php/&quot;&gt;&lt;script&gt;alert(‘hacked’)&lt;/script&gt;”>

[/php]

“تلاش برای سوء استفاده موفق نبود، هیچ آسیبی اتفاق نیفتاد”

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

اولنی کاری که انجام می دهیم این است که تمام متغیرها را از طریق تابع ()htmlspecialchars که از توابع php، است انتقال می هیم .

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

<script>location.href(‘http://www.hacked.com’)</script>

این کد، محاسبه نخواهد شد. زیرا به عنوان یک کد نامعتبرِ html ذخیره می شود.

کد زیر:

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

برای اینکه در یک صفحه، یا ایمیل نمایش داده شود، امن است.

علاوه بر این، هنگامی که کاربر فرم را ارسال می کند، ما دو کار نیز انجام خواهیم داد.

1- کاراکترهای غیر ضروری مانند(فضای خالی،برگه، خط جدید) را از داده های ورودی کاربر با استفاده از تابع ()php trimحذف می کنیم.

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

 

قدم بعدی ایجاد تابعی است که تمام کنترل های مورد نیاز ما را برایمان انجام دهد.

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

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

حالا ما تمام متغیرهای POST_$ را با این تابع بررسی می کنیم.

کد برای این موضوع به شکل زیر خواهد بود.

[php]

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = “”;

if ($_SERVER[“REQUEST_METHOD”] == “POST”) {
$name = test_input($_POST[“name”]);
$email = test_input($_POST[“email”]);
$website = test_input($_POST[“website”]);
$comment = test_input($_POST[“comment”]);
$gender = test_input($_POST[“gender”]);
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

[/php]

توضیحات کد بالا

در کد بالا، اولین کاری که انجام می شود، بررسی این نکته است که آیا اطلاعات فرم با [“SERVER[“REQUEST_METHOD_$ ارسال شده است؟

اگر REQUEST_METHOD از نوع POST بود، پس فرم ارسال شده است. و باید مورد اعتبار سنجی واقع شود.

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

در هر صورت در مثال بالا، تمام فیلدهای ورودی از نوع غیرضروری هستند.

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

در قدم بعدی (در آموزش بعدی) درباره ایجاد فیلدهای ضروری صحبت خواهیم کرد.

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

همراه آموزش بعدی پرنیان باشید.

اگر این مطلب برای شما مفید بود، ما را در گوگل ستاره باران کنید.

دسته بندی برنامه نویسی php
اشتراک گذاری
مقالات مرتبط

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

سبد خرید

هیچ محصولی در سبد خرید نیست.