/ در آموزش پی اچ پی, آموزش ها, اشتراک رایگان / توسط
آخرین زمان ویرایش:

آموزش PHP (پی اچ پی) – قسمت سی و چهارم

(جهت دانلود و اطلاعات بیشتر به ادامه مطلب مراجعه نمائید)

آموزش PHP – فیلتر ورودی ها

فیلتر ورودی ها در php

تقریباً همه ی برنامه های تحت وب از محیط بیرون دریافت اطلاعات دارند که معمولاً این ورودی ها می تواند از طریق کاربران یا برنامه های دیگر مثل وب سرویس ها باشد، برای اطمینان از صحت اطلاعات ورودی، فیلترهای PHP کمک فراوانی به ما خواهند کرد.

شما باید همیشه داده های ورودی را از فیلترها عبور دهید، در حقیقت فیلتر ورودی ها یکی از مهمترین مسائل امنیت برنامه هاست.

ورودی های برنامه کدامند؟
داده های دریافت شده از یک فرم HTML
Cookieها
داده های دریافت شده از وب سرویس ها
متغیرهایی که روی سرور ایجاد می شوند مثل sessionها
اطلاعاتی که از پایگاه داده بازیابی می شود

توابع و فیلترها

برای فیلترکردن یک متغیر، یکی از توابع زیر را استفاده کنید:
()filter_var : یک متغیر خاص را با یک صافی مخصوص فیلتر می کند.
()filter_var_array : چندین متغیر را با یک صافی یکسان و یا متفاوت فیلتر می کند.
()filter_input : یک متغیر ورودی را می گیرد و آن را فیلتر می کند.
()filter_input_array : چندین متغیر ورودی را می گیرد و آن ها را با یک صافی یکسان و یا متفاوت فیلتر می کند.

مثال: در اینجا با استفاده از تابع ()filter_var، صحیح بودن متغییر int$ را بررسی می کنیم:(اعشاری نباشد)

<?php
$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo(“Integer is not valid”);
}
else
{
echo(“Integer is valid”);
}
?>

خروجی کد بالا:

Integer is valid

 

در کد بالا از صافی “FILTER_VALIDATE_INT” برای فیلتر کردن متغییر استفاده می کند.

اگر ما مثال بالا را با متغیری که integer نیست مثل “۱۲۳abc” امتحان کنیم، خروجی چنین خواهد بود: “integer is not valid”

برای مشاهده لیست کامل توابع و فیلترها به بخش PHP filter Reference مراجعه کنید.

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

به صورت کلی دو نوع فیلتر وجود دارد:

فیلترهای اعتبار سنجی:

برای معتبر کردن ورودی های کاربر استفاده می شوند
برای قالب بندی قوانین محض استفاده می شود(مثل معتبرسازی URL یا E-Mail)
اگر داده ورودی اعتبار نداشته باشد FALSE والا مقدار متغییر را بر می گرداند

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

انتخاب ها و پرچم ها (optionها و flagها)

Optionها و flagها برای اضافه کردن شرط های خاص به فیلترها استفاده می شوند.

فیلترهای متفاوت optionها و flagهای متفاوتی دارند.

مثال: در اینجا٫ ما یک متغییر integer را با استفاده از ()filter_var و optionهای “min_range” و “max_range” معتبر می کنیم:

<?php
$var=300;

$int_options = array(“options”=>array(“min_range”=>0,”max_range”=>256));

if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo(“Integer is not valid”);
}
else
{
echo(“Integer is valid”);
}
?>

خروجی کد بالا:

Integer Is not valid

 

در کد بالا٫ optionها باید در یک آرایه ی انجمنی با نام “options” قرار داده شوند.اگر یک flag استفاده می شود نیاز نیست که در آرایه قرار گیرد. (If a flag is used it does not need to be in an array)

برای مشاهده لیست کامل توابع و فیلترها به بخش PHP filter Reference مراجعه کنید. بررسی کنید چه optionها و flagهایی برای هر فیلتر وجود دارد.

ورودی را معتبر کنید

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

اولین کاری که باید انجام دهیم این است که مطمئن شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.

سپس داده ی ورودی را با استفاده از تابع ()filter_input فیلتر می کنیم.

مثال: در مثال زیر٫ متغیر ورودی “email” به صفحه php فرستاده می شود:

<?php
if(!filter_has_var(INPUT_GET, “email”))
{
echo(“Input type does not exist”);
}
else
{
if (!filter_input(INPUT_GET, “email”, FILTER_VALIDATE_EMAIL))
{
echo “E-Mail is not valid”;
}
else
{
echo “E-Mail is valid”;
}
}
?>

توضیح مثال:

در مثال بالا یک ورودی email داریم که با استفاده از متد “GET” به آن ارسال شده است:
چک می کند که آیا متغیر ورودی “email” از نوع “GET” موجود هست
اگر متغیر ورودی وجود داشته باشد٫ چک می کند که آیا یک آدرس ایمیل معتبر هست یا نه
ورودی را اصولی کنید

بیایید پاکسازی یک URL ارسال شده از فرم را امتحان کنیم.

ابتدا مطمئن می شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.

سپس داده ی ورودی را با استفاده از تابع ()filter_input اصولی می کنیم.

مثال: در مثال زیر٫ متغیر ورودی “URL” به صفحه php فرستاده می شود:

<?php
if(!filter_has_var(INPUT_POST, “url”))
{
echo(“Input type does not exist”);
}
else
{
$url = filter_input(INPUT_POST,”url”,FILTER_SANITIZE_URL);
}
?>

توضیح مثال:

مثال بالا یک ورودی url دارد که با استفاده از متد “POST” به آن ارسال شده است:
چک می کند که آیا متغیر ورودی “url” از نوع “POST” موجود هست.
اگر متغیر ورودی وجود داشته باشد٫ آن را اصولی (کاراکترهای نامعتبر را کنار می گذارد) و در متغیر url$ ذخیره می کند.

اگر متغیر ورودی یک رشته مثل این باشد “http://www.W3ååSchøøools.com/” ٫متغیر $url بعد از اصولی سازی به این شکل خواهد بود:

http://www.W3Schools.com/

فیلتر ورودی های چندگانه ی

یک فرم HTML همیشه از بیش از یک فیلد ورودی تشکیل شده است. برای جلوگیری ازچندین بار فراخوانی توابع filter_var یا filter_input ٫ ما می توانیم توابع filter_var_array یا filter_input_array را استفاده کنیم.

مثال: در این مثال ما تابع filter_input_array را برای فیلترکردن سه متغیر که با استفاده از متد GET ارسال شده اند استفاده می کنیم.(نام، سن و آدرس ایمیل)

<?php
$filters = array(“name” => array(“filter”=>FILTER_SANITIZE_STRING),
“age” => array(“filter”=>FILTER_VALIDATE_INT,
“options”=>array(“min_range”=>1,”max_range”=>120)),
“email”=> FILTER_VALIDATE_EMAIL);
$result = filter_input_array(INPUT_GET, $filters);

if (!$result[“age”])
{
echo(“Age must be a number between 1 and 120.<br />”);
}
elseif(!$result[“email”])
{
echo(“E-Mail is not valid.<br />”);
}
else
{
echo(“User input is valid”);
}
?>

 

توضیح مثال:

مثال بالا سه ورودی (name,age,email) دارد که با استفاده از متد “GET” به آن ارسال شده است:
یک آرایه شامل نام متغیرهای ورودی و فیلترهای مصرفی برای متغیرهای ورودی مشخص شده است.
تابع ()filter_input_array را همراه با متغیرهای ورودی GET و آرایه ای که تعیین کردیم فراخوانی می کنیم.
متغیرهای “email” و “age” را برای ورودی های نامعتبر در متغیر result$ چک می کند.(اگر هرکدام از متغیرهای ورودی نامعتبر باشند٫ آن متغیر ورودی پس از تابع ()filter_input_array برابر با FALSE قرار خواهد گرفت)

توجه: پارامتر دوم تابع ()filter_input_array می تواند یک آرایه یا یک صافی خاص باشد. اگر پارامتر یک صافی یا فیلتر خاص باشد تمام مقادیر در آرایه ی ورودی بوسیله ی صافی مشخص شده فیلتر می شوند، اگر پارامتر یک آرایه است باید قواعد زیر را دنبال کند:
باید یک آرایه ی انجمنی باشد.(PHP Arrays)
کلید یا ایندکس آرایه باید با نام ورودی ها یکی باشد.
مقدار آرایه باید یک صافی خاص یا یک آرایه دیگر شامل صافی و flagها و optionها باشد.

صافی های تعریف شده توسط خودمان

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

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

مثال: در مثال زیر٫ همه ی کاراکترهای “_” به خط فاصله تبدیل می شود:

<?php
function convertSpace($string)
{
return str_replace(“_”, ” “, $string);
}

$string = “Peter_is_a_great_guy!”;

echo filter_var($string, FILTER_CALLBACK,array(“options”=>”convertSpace”));
?>

خروجی کد بالا:

Peter is a great guy!

توضیح مثال:

مثال بالا همه ی کاراکترهای “_” را به خط فاصله تبدیل می کند:
یک تابع برای جایگزین کردن کاراکتر”_” به خط فاصه ایجاد می کند
تابع ()filter_var را همراه با فیلتر FILTER_CALLBACK و یک آرایه شامل تابع مان فراخوانی می کند

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

آموزش PHP (پی اچ پی) – قسمت سی و سوم

(جهت دانلود و اطلاعات بیشتر به ادامه مطلب مراجعه نمائید) (بیشتر…)

دانلود مجموعه ۵ پس زمینه پیکسلی زیبا

(جهت دانلود و اطلاعات بیشتر به ادامه مطلب مراجعه نمائید) (بیشتر…)

 کانال تلگرام داده باران شارژ آنلاین

نظری بدهید

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