‎PHP-‎ Form Validation‎

‎‎اعتبار سنجي فرم

Previous >    <Next  

‎‎در اين فصل وفصل بعدي فرم واعتبار سنجي آن بيان ميشود.

‎‎اعتبار سنجي فرمphp

‎يكي از مراحل اعتبارسنجي امنيت اطلاعات فرم ميباشد .در صورتيكه در اين مورد اقدامي صورت نگيرد ‎اين اطلاعات در گير عوامل مخرب مانندهكرها وهرز نامه خواهد شد.اين مخرب ها باعث ميشوند كه ‎آنچه ميخواستيد، نشود.

‎دراين فصل فرمHTML كه شامل فيلدهاي ورودي متفاوت اختياري وضروري وهمچنين radio button و ‎كليدsubmit بوده، تشريح ميگردد .شكل ونماي فرم مطابق زير است .

PHP Form Validation Example


*-Required field

Name: *

E-mail: *

Website:

Comment:

Gender: Female Male Other *

Your Input:





‎‎قوانين اعتبار سنجي فرم مطابق جدول زيراست.

‎‎ ‎‎ ‎‎ ‎‎ ‎‎ ‎‎
فليدقوانين اعتبارسنجي
Nameفيلد ضروري وبايستي فقط شامل حروف وبلنك باشد
E-‎mailفيلد ضروري وبايدمطابق قانون آدرس ايميل باشد
Websiteقابل قبول داشته باشد Url فيلد اختياريست وبايدآدرس
Commentفيلداختياريست وچند خطي است
Gender فيلد ضروريست وبايد يكي ازموارد انتخاب شود

‎نكته ـ فيلدضروريRequired field واختياريOptional ميباشد. ‎بررسي فرمHtml با نگاه ساده به كد عناصرفرم

‎‎فيلد هاي متني فرم

‎‎فيلد هايE_mail وWebsite متني هستند وبشكل زير در فرم 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="50"></textarea>

‎‎دكمه هاي راديوئي فرم

‎‎كد دكمه هاي راديوئي مطابق جدول زير ميباشد.

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

<input type="radio" name="gender" value ="male">Male

<input type="radio" name="gender" value ="other">Other

‎‎عنصرform

‎‎عنصرform درhtml مطابق كدزيراست .

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

‎‎

‎هنگاميكه كليدsubmit فرم كليد ميشود، يا خلاصه تر فرم submit ميشود، اطلاعات فرم مطابق آنچه ‎كه درmethod مشخص شده ارسال ميگردد .دراين جا روش ارسالpost ميباشد .ارسال اطلاعات با دو ‎روشPOST و GET ميباشد .

‎در دستورform عبارت‎$_SERVER[‎"PHP_SELF‎"]‎ چه عملي را انجام ميدهد. ‎$_SERVER[ ]‎‎ ‎يك آرايه ابر جهاني است كه درآن اطلاعات سرور واسكريت ها رانگه ميدارد.دراينجا نام اسكريپت ‎اجرائي را براي ارسال اطلاعات مشخص ميكند .پارامتر‎"PHP_SELF‎"‎يعني اسكريپت درحال اجرا ‎اين بعنوان كليدآرايه ونام اسكريپت اجرائي مقدار آنست.

‎در چنين حالتي اطلاعات بخود اسكريپت اجرائي ارسال ميشود .حالت ديگري وجود دارد كه ارسال ‎اطلاعات ميتواند به اسكريپت بيروني باشد .در حالتPHP_SELF كنترل وپيغام ها درهمان page ‎ميباشد.

‎‎تابعhtmlspecialchars()‎

‎اين تابع كراكتر هاي خاص را به اجزاءhtml تبديل مي نمايد .يعني موارد ‎&‎‎lt‎‎ ‎&‎‎gt ‎‎ ‎با< ‎و> ‎كه معادلhtml آنها تبديل مي نمايد .دلايل زيادي براي استفاده از كراكتر خاص وجود دارد .مورد ‎امنيتي وموارد اجرائي .موارد اجرائي بيشتر در نقل وانتقالات داخلي بصورت اتوماتيك انجام ‎ميگيرد .اما در موارد امنيتي براي پيش گيري ازمهاجمان اسكريپتي از كراكترهاي خاص استفاده ‎ميشود.

‎نكته امنيتي مهم ـ‎ $_SERVER[‎"PHP_SELF‎"] ‎ بوسيله هكرها ميتواند استفاده شود. ‎اگر ازPHP_SELF ‎استفاده ميشود، كاربر ميتواند يك اسلشcode>) / ( وارد كرده وبعضي از كامند هاي < XSS‎را باجرا درآورد .

XSS‎نوعي برنامه نويسي مقابله كننده است، كه نمونه برنامه جهت مزاحمت وتخريت در بعضي از ‎وب سايت هاي كاميوتري وجو دارد .اين برنامه نويسي مهاجمان را قادر ميسازد كه تا اسكريپت مورد ‎خود را به صفحات ديگران تزريق كنند،وايجاد مزاحمت يا باعث تخريب شوند.

‎‎فرض كنيد فرم زير را در صفحه ايجادي‎"test_form.php‎"‎داشته باشيم

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

‎اكنون كاربر آدرس معمولي مشابه‎"http//www.example.com/test_form.ph‎"‎را در url bar وارد ‎كند، دراين صورت دستورform بصورت زير تبديل مي.گردد .

< form method="post" action="test_form.php">

‎البته اين خوب است واشكالي ندارد.اما فرض كنيد درurl bar متن زير را وارد كند .

‎http;//WWW.EXAMPLE.COM/TEST_FORM.PHP%22%3E%3Cscript%3EALERT('haced')

‎‎در اين حالت كدform بصورت زير تبديل ميگردد .

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

‎‎

‎كد بالا يك تگscript اضافه نموده و داخل آن دستورجاوااسكريپت alert ميباشد كه پيغام ‎"hacked‎" ‎نمايش ميدهد .اين نمونه ساده ايست اما ميتوان داخل تگscript موارد زيادي را قرارداد كه مشكل ‎ساز باشد .بعنوانه نمونه ميتواند كاربر به فايلي در سرور ديگر هدايت كند وموارد سرقت اطلاعات ‎يا تخريب اطلاعات را انجام دهد.

‎‎جلوگيري از سوء استفاده$_SERVER[‎"PHP_SELF‎"]

‎براي جلوگيري از سوء استفاده تابع فوق ميتوان ازتابعhtmlspecialchars()‎ استفاده نمود .كد فرم ‎بايد بصورت زير باشد.

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

‎در اين حالت اگر مقابله كننده همان عبارت را تزريق كند، عنصرform بصورت زير تبديل ميشودكه ‎تلاش براي سوء استفاده شكست ميخورد و موفق نخواهد بود.

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

‎‎اعتبار سنجي داده هاي فرم درphp

‎اولين مورد كه بايد انجام داد، اينست كه تابعhtmlspecialchars را براي تمام متغير هاي ‎وابسته بفرم باجرا در بياوريم.

‎‎در صورتيكه در يك فيلد متني تگscript زيرا وارد كند

‎<script>location.href("http://www.hcked.com")< script>

‎اين اجرا نميشود، چون تابع فوق كد هاي فراراز اجرا را در آن قرار داده وبصورت زير ذخيره ‎ميشود.

‎< ;script&vgt;location.href("http//www.hacked.cm") <script >

‎‎كد بالا براي نمايش مورد نظر مقابله كننده امن نبوده وبراي ايميل هم غيز قابل قبول است.

‎نكته ـ انچكه به دريافت نمودم كراكتر هاي خاص فقط در نمايش واقعي ميشوند، اما در اجرا تغيير ‎نخواهند كرد .يعني اگر‎&‎‎lt‎ در متني باشد، درنمايش متن ‎<‎‎ظاهر ميشود، ولي دراجرا تغير نميكند.

‎همچنين زماني كه كاربر فرم را ارسال نمود، بايد فضاي غير ضرور اطاعات را حذف نمود فضاي ‎غير ضرور عبارتند از فضاي خالي، تب وخط جديد ميباشند .اينكار بوسيله تابعPHP trim( ) انجام ‎ميشود .با استفاده از تابعPHP stripslashes()‎ كراكتر/ را از اطلاعات حذف ميكنند .

‎براي سادگي كار كنترل اطلاعات تابعtest_input()‎ را كه بتواند روي هر متغيري تمام اقدامات ‎كنترلي فوق را انجام دهد مطابق مثال ايجاد شده است.

‎‎مثال ـ درمثال زير فرم و اسكريپت كنترلي اطلاعات كه بحث شد آمده است.

  
<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
  <input type="radio" name="gender" value="other">Other
  <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>

--(go to editor for change code and run)


Previous >    <Next