آموزش طراحی سایتآموزش PHP

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

آموزش طراحی سایت با PHP – اعتبارسنجی فرم در php

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

 

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

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

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

مشروح آن ها را در جدول زیر خواهید دید.

نام فیلد اعتبارسنجی 
نام الزامی است. فقط حروف الفبا و خط فاصله را می پذیرد
ایمیل الزامی است. باید  حاوی فرمت صحیح ایمیل باشد (به همراه علامت @ و .)
وب سایت اختیاری است. در صورتی که پر شود باید فرمت url داشته باشد.
نظرات اختیاری است. می تواند شامل چندین خط متن باشد.
جنسیت الزامی است. یکی از موارد می تواند انتخاب شود.

 

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

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

ابتدا نگاهی به کدهای html برای ساخت فرم بیاندازیم.

 

فیلدهای متنی

فیلد نام ، ایمیل و وب سایت از نوع text و فیلد نظرات textarea می باشد.

نام: <input type="text" name="name">
 ایمیل: <input type="text" name="email">
 وب سایت: <input type="text" name="website">
 نظرات: <textarea name="comment" rows="5" cols="40"></textarea>

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

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

جنسیت:
<input type="radio" name="gender" value="female">زن
<input type="radio" name="gender" value="male">مرد

عنصر فرم

کد html فرم به شکل زیر است :

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

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

 

htmlspecialchars چه کاری می کند؟

با استفاده از تابع ()htmlspecialchars، می توان کاراکترهای خاص را به HTML entity تبدیل کرد . به این معنا که کاراکترهایی مثل علامت کوچکتر (<) و بزرگتر (>) در پارامتر ورودی را به ;lt$ و ;gt$ تبدیل می نماید .

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

تذکر مهم در امنیت فرم در php

در مثال بالا از PHP_SELF استفاده کردیم . این دستور می‌تواند مورد استفاده ی هکر ها قرار بگیرد . هکرها  می‌توانند در آدرس بار مرورگر بعد از آدرس فایل، یک اسلش (/) قرار دهند و سپس دستورات XSS را برای اجرا تایپ کنند.

اما دستورات XSS چی هستند؟

 

دستورات XSS

دستورات Cross-site scripting که به اختصار XSS نیز نامیده می شوند یک نوع قابلیت آسیب پذیری امنیت کامپیوتر است که معمولا در برنامه های کامپیوتری تحت وب دیده می شود. هکرها می توانند با تزریق اسکریپت های سمت کاربر به اطلاعات دستبرد بزند .

برای درک بهتر به مثال پایین توجه کنید.

در نظر بگیرید که فایلی با نام 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>

دومین URL ، سبب اضافه شدن تگ <script> و یک دستور alert در بین کدهای ما شده است. زمانی که صفحه لود می شود ، کد JavaScript اجرا می شود (در این مثال کاربر یک جعبه پیغام با محتوای hacked را مشاهده خواهد کرد). این فقط یک مثال ساده و بی ضرر است که نحوه هک کردن متغییر PHP_SELF را نشان می دهد.

در نظر داشته باشد که هر کد JavaScript دیگری را می توان در تگ <script> قرار داد . یک هکر می تواند کاربر را به یک فایل دیگر روی سروری دیگر redirect کند ، و از طریق آن فایل، اطلاعات کاربر را به سرقت ببرد.

 

چگونه از خطرات [“SERVER[“PHP_SELF_$ جلوگیری کنیم؟

تابع ()htmlspecialchars راهی برای مقابله با هک شدن است. در صورتی که بخواهیم کد بالا را در حالت امن بنویسیم به صورت زیر خواهد شد :

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

تابع ()htmlspecialchars، کاراکترهای خاص را به HTML entity (عناصر زبان html) تبدیل می کند. در این صورت اگر کاربر بخواهد از متغیر “PHP_SELF” سوء استفاده کند ، با نتیجه مواجه خواهد شد :

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

در نتیجه از این طریق هیچ گونه آسیبی وارد نخواهد شد.

 

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

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

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

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

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

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

همچنین ما برای افزایش امنیت از دو مورد زیر نیز استفاده کرده ایم :

 

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

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

در این جا ما تابعی با نام ()test_input  ایجاد کردیم . در نتیجه می توانیم به ازای هر مقدار از متغیر POST_$ این تابع را فراخوانی کنیم . این تابع حاوی دستورات زیر است :

<!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>Mizfa.com 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>

خروجی به شکل زیر است :

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

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

منبع : w3schools

برچسب ها

نسرين ولی خانی

کارشناسي نرم افزار علاقمند به برنامه نويسی

نوشته های مشابه

پاسخی بگذارید

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

دکمه بازگشت به بالا
سایت خود را در گوگل مدیریت کنید + ۱۵ ساعت فیلم آموزشیجزئیات بیشتر اینجا کلیک کنید
بستن
با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
ترک میزفا خوب نیست!
دوره رایگان سئو