میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

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

هنگام پردازش فرم های PHP به امنیت فکر کنید و اعتبارسنجی را انجام دهید!

در این آموزش نحوه ی پردازش فرم های PHP بصورتی که موارد امنیتی که در ذهن دارید حفظ شود، نشان داده خواهد شد. اعتبارسنجی داده های فرم در PHP برای محافظت از فرم شما در برابر هکرها و اسپمرها مهم است!

فرم HTML که در این فصل ها کار خواهیم کرد ،شامل فیلدهای مختلفی است: فیلدهای متنی الزامی و اختیاری، radio button و یک دکمه submit:

 


فیلدهای متنی

قسمت های نام ، ایمیل و وب سایت عناصر ورودی متن هستند و قسمت نظرات یک متن textarea است. کد 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>

دکمه های رادیو ( Radio Buttons )

قسمت های جنسیتی دکمه های رادیویی هستند و کد HTML به این شکل است:

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

عنصر فرم

کد HTML فرم به صورت زیر است:

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

هنگام ارسال فرم ، داده های فرم با  method=”post”  ارسال می شود.

متغیر $ _SERVER [“PHP_SELF”] چیست؟

یک متغیر سوپرگلوبال است که نام پرونده اسکریپت اجرا شده فعلی را برمی گرداند.

بنابراین ، $ _SERVER [“PHP_SELF”] به جای پرش به صفحه دیگری ، داده های فرم ارسالی را به صفحه خود ارسال می کند. به این ترتیب کاربر پیام های خطا را در همان صفحه فرم دریافت می کند.

تابع htmlspecialchars () چیست؟

این تابع کاراکترهای خاص را به موجودیت های HTML تبدیل می کند. این بدان معنی است که جایگزین نویسه های HTML مانند  <  و  >  با   &lt;  و   &gt;  می شود این از طریق تزریق کد HTML یا Javascript (حملات اسکریپت چندرسانه ای) به فرم ، از سوی استفاده کنندگان از کد جلوگیری می کند.

 


تذکر مهم درباره امنیت فرم PHP

PHP_SELF می تواند توسط هکرها مورد استفاده قرار گیرد.

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

XSS یک نوع قابلیت آسیب پذیری امنیت کامپوتر است. معمولاً در برنامه های کاربردی web بکار می رود. XSS، هکرها را قادر می سازد تا صفحات وب را از طریق تزریق اسکریبت سمت client هک کنند.

دلیل به وجود آمدن این آسیب پذیری عدم اعتبارسنجی ورودی‌های کاربر می‏ باشد، و مهاجم می تواند با تزریق اسکریپت‌های مخرب در سایت از این آسیب پذیری سو استفاده کند.

فرض کنید فرم زیر را در صفحه ای با نام “test_form.php” داریم:

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

اکنون ، اگر یک کاربر URL معمولی را در نوار آدرس مانند “http://www.example.com/test_form.php” وارد کند ، کد فوق به زیر ترجمه می شود:

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

تا کنون خیلی خوب.

با این حال ، در نظر بگیرید که یک کاربر URL زیر را در نوار آدرس وارد می کند:

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>

این کد یک برچسب اسکریپت و یک دستور هشدار به آن اضافه می کند. و هنگامی که صفحه بارگیری می شود ، کد JavaScript اجرا می شود (کاربر جعبه هشدار را مشاهده می کند). این فقط یک مثال ساده و بی ضرر است که چگونه می توان از متغیر PHP_SELF بهره برداری کرد.

توجه داشته باشید که هر کد JavaScript را می توان درون برچسب <script> اضافه کرد! یک هکر می تواند کاربر را به فایلی در سرور دیگر هدایت کند و این پرونده می تواند کدهای مخربی را در خود جای دهد که می تواند متغیرهای جهانی را تغییر دهد یا فرم را به آدرس دیگری ارسال کند تا به عنوان مثال داده های کاربر را ذخیره کند.


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

با استفاده از تابع htmlspecialchars () می توان از سو  استفاده از $ _SERVER [“PHP_SELF”] جلوگیری کرد.

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

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

تابع () htmlspecial شخصیت های خاص را به موجودیت های HTML تبدیل می کند. حال اگر کاربر بخواهد از متغیر PHP_SELF سو استفاده کند ، نتیجه آن خروجی زیر است:

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

تلاش برای بهره برداری ناموفق است و هیچ آسیبی وارد نمی شود!


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

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

وقتی از تابع htmlspecialchars () استفاده می کنیم ؛ اگر یک کاربر سعی دارد موارد زیر را در یک قسمت متنی ارسال کند:

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

در اینصورت اسکریپت بالا اجرا نخواهد شد، چونکه کاراکترهای خاص در متن بالا به HTML entity معادلاشان تبدیل شده اند:

& lt؛ اسکریپت & gt؛ location.href (‘http://www.hacked.com’) & lt؛ / script & gt؛

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

 

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

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

گام بعدی ایجاد یک تابع است که تمام بررسی ها را برای ما انجام می دهد (که بسیار راحت تر از نوشتن مجدد همان کد بارها و بارها است).

ما تابع test_input () را نامگذاری می کنیم.

اکنون ، می توانیم هر متغیر $ _POST را با تابع test_input () بررسی کنیم ، و اسکریپت به این شکل است:

مثال

<?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;
}
?>

توجه داشته باشید که در ابتدای اسکریپت ، بررسی می کنیم که آیا فرم با استفاده از $ _SERVER [“REQUEST_METHOD”] ارسال شده است. اگر REQUEST_METHOD POST باشد ، فرم ارسال شده است – و باید تأیید شود. اگر ارسال نشده است ، از اعتبار سنجی صرف نظر کنید و یک فرم خالی نمایش دهید.

با این حال ، در مثال بالا ، تمام زمینه های ورودی اختیاری هستند. این اسکریپت حتی اگر کاربر هیچ داده ای وارد نکند ، خوب کار می کند.

 


 

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

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

×

سلام کاربر عزیز

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

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟