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

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

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

نمونه اعتبار سنجی فرم پی اچ پی

 

: Name

: E-mail

: Website

: Comment


Gender : Female Male

 


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

فیلد های متنی

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

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>

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


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

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

Gender :
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

عناصر فرم

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

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

وقتی که فرم تایید شود ، داده ها به بخش 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 داشته باشیم :

<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

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

<form method="post" action="test_form.php"/><script>alert('hacked')</script>

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


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

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

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

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

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

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


بررسی داده های فرم با 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 بررسی کرد.

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

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
 
<?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;
}
?>
 
<h2>PHP Form Validation Example</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name : <input type="text" name="name">
<br><br>
E-mail : <input type="text" name="email">
<br><br>
Website : <input type="text" name="website">
<br><br>
Comment : <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender :
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
 
<?php
echo "<h2>Your Input : </h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
 
</body>
</html>'

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


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

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

بخش

شرایط

نام

نوشتن نام لازم است

ایمیل

نوشتن یک ایمیل معتبر لازم است

وبسایت

در صورت داشتن وبسایت URL آن را نوشته شود

کامنت

در صورت داشتن توضیحات ، متنی نوشته شود

جنسیت

یکی از گزینه های را انتخاب کنید

 

در درس قبل تمام بخش های فرم را اختیاری قرار داده بودیم. در این فرم اجباری بودن هر بخش با * نشان داده شده است. در ادامه یک سری کد نمایش داده شده است که در آن متغیرهای nameErr, $emailErr, $genderErr$ و websiteErr$ تعریف شده اند. این متغیرها پیغام خطا را در خود ذخیره میکنند. همچنین یک بخش if else اضافه میکنیم. هنگام بررسی متغیر POST_$ درون آن خالی باشد پیغام خطا نمایش داده میشود و در صورتی که درون این متغیر خالی نباشد ، داده ها برای بررسی به تابع ()test_input ارجاع داده میشوند. این کدها به صورت زیر نمایش داده میشوند.

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
 
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
 
if (empty($_POST["name"]))
{$nameErr = "Name is required";}
else
{$name = test_input($_POST["name"]);}
 
if (empty($_POST["email"]))
{$emailErr = "Email is required";}
else
{$email = test_input($_POST["email"]);}
 
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
 
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
 
if (empty($_POST["gender"]))
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
}
?>

حال برای این که یکی از بخش های نام ، ایمیل ، یا جنسیت خالی بود به کاربر نشان دهد که این فیلد باید پر شود یک متنی در مقابل ان به عنوان اخطار نشان میدهد. برای نوشتن این اخطار از دستور span در HTML استفاده میکنیم که این اخطار را در کنار آن بخش خالی نمایش دهد. در این span یک دستور echo نوشته میشود که آنچه که در متغیرهای emailErr, $genderErr و websiteErr$ به عنوان متن خطا نوشته شده بود ، نمایش دهد.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
 
Name : <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail :
<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website :
<input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
<label>Comment : <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender :
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
 
</form>

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

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color : #FF0000;}
</style>
</head>
<body>
 
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
 
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
 
if (empty($_POST["name"]))
{$nameErr = "Name is required";}
else
{$name = test_input($_POST["name"]);}
 
if (empty($_POST["email"]))
{$emailErr = "Email is required";}
else
{$email = test_input($_POST["email"]);}
 
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
 
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
 
if (empty($_POST["gender"]))
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
 
}
 
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
 
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name : <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail : <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website : <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment : <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender :
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
 
<?php
echo "<h2>Your Input : </h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
 
</body>
</html>

منابع : W3schools/Stackoverfollow

بازدید : 9,712 بار
اعتبارسنجی فرم در PHP
5.0
out of
5
(
2
) votes

نوشتن نظرات

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


تصویر امنیتی

کاربران آنلاین : 14,590