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

اعتبار سنجی فرم در 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

فیلم آموزشی asp.net core 2

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

فیلم آموزشی asp.net core 2

1 نظر

یک پاسخ

  1. درود
    در مقابل Name کاراکترهای <" ظاهر شده و هیچ کنترلی صورت نمی گیرد

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

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

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

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=