اعتبارسنجی داده های ورودی که کاربر یا برنامه در صفحات وب وارد می نمایند ، یکی از مهمترین مسائل در زمینه طراحی صفحات وب امن می باشد برای روشن شدن مسئله به چند مثال اشاره می کنم . فرض کنید که شما یک فرم ثبت نام در سایت خود ایجاد کرده اید کاربر در زمان ثبت نام باید یکسری اطلاعات خواسته شده را در فرم وارد نماید مسلما اطلاعات ورودی باید با شرایط و معیارهای مورد نظر شما ، تطابق داشته باشد .
برای مثال نام ورودی کاربر بایستی حداکثر 15 کاراکتر باشد . یا مثلا رمز عبور در دو کادر به صورت یکسان بوده و یا در نهایت باید ایمیلی که توسط وی وارد می شود ،، فرمت یک ایمیل واقعی را داشته باشد و … .
یک طراح وب باید این قابلیت و توانایی را داشته باشد که بتواند داده های ورودی را با معیارهای مورد نظر خود سنجیده و سپس در صورت صحیح بودن آنها ، اطلاعات را به سرور ارسال نماید . به این کار در PHP ، اعتبار سنجی اطلاعات یا فیلتر کردن می گویند.
انواع داده های اطلاعاتی جهت اعتبار سنجی
کلیه اطلاعاتی که از سوی کاربر یا برنامه به سرور ارسال می شوند ، بایستی اعتبار سنجی شوند . سپس در صورت صحیح بودن مورد استفاده قرار بگیرند . در لیست زیر ، انواع داده های ورودی به یک صفحه وب را بررسی کرده ایم . عموما شما باید این اطلاعات را اعتبار سنجی نمایید :
- داده های که کاربر در فرم های وب وارد می نماید .
- کوکی هایی که مرورگر می فرستد .
- داده های سرویس های وب .
- نتایج جستجو در پایگاه داده های سرور ( Query Results ) .
تابع های پیش ساخته اعتبار سنج در PHP
محتوای زیر شامل انواع تابع های پیش ساخته اعتبار سنج در PHP می باشد.
filter_has_var
این تابع کنترل می کند که آیا کاربر مقدار لازم را در کادر داده ورودی وارد کرده و یا آن را خالی رها نموده است .
filter_id
این تابع ID یا شناسه یک فیلتر خاص را در صورت وجود بررسی کرده و نتیجه آن را بر می گرداند .
filter_input
این تابع مقادیر و متغیرهایی که به صفحه وارد می شوند مثل کوکی ها و یا مقادیر وارد شده در کادر های متن را دریافت کرده و اعتبار سنجی می نماید .
filter_input_array
این تابع مقدار آرایه ای از متغیر ها یا اطلاعاتی که به صفحه وارد می شوند مثل کوکی ها و یا مقادیر وارد شده در یک سری کادر متن را دریافت کرده و اعتبار سنجی می نماید .
filter_list
تابع فوق ، آرایه ای از کلیه فیلترهای اعتبار سنجی که سرور PHP و مرورگر کاربر پشتیبانی می کند ، را بر می گرداند .
filter_var
این تابع مقدار یک متغیر را گرفته و براساس مورد نظر برنامه ریزی شده ، اعتبار سنجی می نماید
filter_var_array
این تابع مقدار چندین متغیر ( آرایه ای از متغیر ها ) را گرفته و براساس مورد نظر برنامه ریزی شده ، اعتبار سنجی می نماید .
تابع اعتبار سنج filter_has_var
تابع filter_has_var بررسی می کند که آیا مقداری برای متغیر مربوط به یک داده ورودی به صفحه وجود دارد یا خیر .برای درک مفهوم فرض کنید که یک نوع متغیر به وسیله متد GET به صفحه ارسال می شود . این تابع نام متغیر و نوع آن را دریافت کرده و بررسی می کند که آیا مقداری برایش وجود دارد یا اینکه بدون مقدار یا null است .در صورتی که داری مقداری باشد ، تابع مقدار True و در صورتی که بدون مقدار باشد ، تابع False را بر می گرداند .این تابع برای کنترل این مسئله به کار می رود که آیا مقداری برای متغیر مورد نظر ما به صفحه وارد شده و یا اینکه بدون مقدار است و برای مبنای آن تصمیم بعدی در برنامه گرفته شود .
شکل کلی استفاده از این تابع به صورت filter_has_var ( type , variable ) می باشد.
- type
این پارامتر تعیین کننده نوع متغیری که به صفحه وارد شده و می خواهیم مقدار داشتن یا نداشتن آن را بررسی نماییم . برای مثال این پارامتر می تواند یک کوکی یا مقداری باشد که توسط یک متد GET به صفحه ارسال شده است .
انواع داده های ورودی ممکن عبارتند از :
- INPUT_GET
- INPUT_POST
- INPUT_COOKIE
- INPUT_SERVER
- INPUT_ENV
استفاده از این پارامتر اجباری است .
- variable
این پارامتر تعیین کننده نام متغیری است که تابع می خواهد آن را بررسی و اعتبار سنجی کند .
استفاده از این پارامتر اجباری است .
با ارایه یک مثال ، موارد بالا را در عمل نمایش داده ایم .
مثال : در مثال زیر تابع ( ) filter_has_var ، یک متغیر از نوع INPUT_GET را که توسط یک متد GET به صفحه ارسال شده و نام آن name است را اعتبار سنجی می کند . در صورتی که این متغیر دارای مقدار باشد ، برنامه عبارت " Input type exists " به معنای وجود داشتن مقدار را برای آن بر می گرداند . اما اگر این متغیر مقدار نداشته باشد و null باشد ، برنامه عبارت " Input type does not exist " را به معنای خالی بودن متغیر بر می گرداند .
if ( !filter_has_var (INPUT_GET , "name" ) )
{
echo ( " Input type does not exist " ) ;
}
else
{
echo ( " Input type exists " ) ;
}
تابع اعتبار سنج filter_input
تابع filter_input ، مقدار وارد شده برای یک داده ورودی به صفحه را دریافت کرده و بر اساس معیار مورد نظر اعتبار سنجی می کند .برای مثال داده ورودی می تواند یک مقدار وارد شده در یک کادر متن در یک فرم وب ، یک کوکی و یا مقداری باشد که توسط یک متد GET یا POST به صفحه ارسال شده است .برای مثال فرض کنید که کاربر باید در یک کادر متن آدرس ایمیل خود را وارد نماید . این تابع مقدار وارد شده در کادر متن مربوط به ایمیل را دریافت کرده و آن را با استفاده از یکی از فیلترهای پیش ساخته اعتبار سنج PHP به نام FILTER_VALIDATE_EMAIL بررسی می کند که آیا با فرمت یک ایمیل معمولی سازگاری دارد یا خیر .در صورتی که مقدار وارد شده اعتبار سنجی شده و با معیار مورد نظر مطابقت داشت ، تابع مقدار True و در صورتی که مطابقت نداشت ، مقدار False را بر می گرداند .
شکل کلی استفاده از این تابع به صورت filter_input ( input_type , variable , filter ) می باشد .
- type
این پارامتر تعیین کننده نوع منبع داداه ای است که به صفحه وارد شده و می خواهیم مقدار آن را با فیلتر مورد نظرمان اعتبار سنجی نماییم . برای مثال این پارامتر می تواند مقدار وارد شده در یک کادر متن در یک فرم وب و یا یک کوکی یا مقداری باشد که توسط یک متد GET به صفحه ارسال شده است .
انواع داده های ورودی ممکن عبارتند از :
- INPUT_GET
- INPUT_POST
- INPUT_COOKIE
- INPUT_SERVER
- INPUT_ENV
استفاده از این پارامتر اجباری است .
- variable
این پارامتر تعیین کننده نام متغیری است که تابع می خواهد آن را بررسی و اعتبار سنجی کند . مقدار وارد شده در منبع ورودی در یک متغیر با نام خاص ریخته شده و برنامه آن را اعتبار سنجی می کند .
استفاده از این پارامتر اجباری است .
- filter
با ارایه یک مثال ، موارد بالا را در عمل نمایش داده ایم .
مثال : در مثال زیر تابع ( ) filter_input ، مقدار ورودی برای یک متغیر از نوع INPUT_POST را که توسط یک متد POST به صفحه ارسال شده و نام آن email است را با استفاده از فیلتر FILTER_VALIDATE_EMAIL اعتبار سنجی می کند . در صورتی که مقدار وارد با فرمت یک ایمیل واقعی سازگاری داشته باشد ، برنامه پیام تایید ارسال می کند . اما در صورتی که ایمیل وارد فرمت صحیحی نداشته باشد ، پیام ایراد صادر می شود .
if ( ! filter_input ( INPUT_POST , ' email ' , FILTER_VALIDATE_EMAIL ) )
{
echo ( " E-Mail is not valid " ) ;
}
else
{
echo ( " E-Mail is valid " ) ;
}
تابع اعتبار سنج filter_input_array
تابع filter_input_array ، چندین ( آرایه ای از ) مقادیر ورودی به صفحه را دریافت کرده و بر مبنای معیار مورد نظر اعتبار سنجی می کند .برای مثال داده های ورودی می تواند مقادیر وارد شده در کادر های متن در یک فرم وب ، یک کوکی و یا مقادیری باشد که توسط یک متد GET یا POST به صفحه ارسال شده است .فرق تابعfilter_input_array با تابع filter_input در این است که تابع filter_input_array می تواند چندین متغیر را همزمان و بدون نیاز به تکرار دستوری ، اعتبار سنجی نماید ، حال آنکه تابع filter_input ، فقط می تواند یک مقدار ورودی را اعتبار سنجی نماید .
خروجی این تابع ، به صورت آرایه ای از جواب های True یا False خواهد بود .
شکل کلی استفاده از این تابع به صورت filter_input_array ( input_type , filter args ) می باشد.
- type
این پارامتر تعیین کننده نوع منبع داداهایی است که به صفحه وارد شده و می خواهیم مقدار آنها را با فیلتر مورد نظرمان اعتبار سنجی نماییم . برای مثال این پارامتر می تواند مقدار وارد شده در یک کادر متن در یک فرم وب و یا یک کوکی یا مقداری باشد که توسط یک متد GET به صفحه ارسال شده است .
انواع داده های ورودی ممکن عبارتند از :
- INPUT_GET
- INPUT_POST
- INPUT_COOKIE
- INPUT_SERVER
- INPUT_ENV
استفاده از این پارامتر اجباری است .
- filter args
این پارامتر تعیین کننده نام یا ID یکی از فیلتر های پیش ساخته اعتبار سنج PHP است که بر مبنای آن داده ورودی اعتبار سنجی می شود . مقدار پیش فرض برای این پارامتر FILTER_SANITIZE_STRING است . برای دریافت اطلاعات کامل راجع به انواع فیلتر های پیش ساخته PHP به صفحه مرجع فیلتر های اعتبار سنج در PHP بروید .
استفاده از این پارامتر اختیاری است .
با ارایه یک مثال ، موارد بالا را در عمل نمایش داده ایم .
مثال : در مثال زیر تابع ( ) filter_input_array را برای اعتبار سنجی 3 مقدار ورودی که توسط یک متد POST به صفحه وارد شده اند ، استفاده کرده ایم . مقادیر ورودی یک name ، age و یک e-mail addres هستند.
$filters = array
(
"name" => array
(
"filter"=>FILTER_CALLBACK,
"flags"=>FILTER_FORCE_ARRAY,
"options"=>"ucwords"
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
print_r(filter_input_array ( INPUT_POST, $filters ) );
نتیجه کد بالا
Array
(
[name] => Peter
[age] => 41
[email] => peter@example.com
)
تابع اعتبار سنج filter_list
تابع filter_list ، آرایه ای از کلیه فیلترهای اعتبار سنجی که سرور PHP و مرورگر کاربر پشتیبانی می کند ، را بر می گرداند .خروجی این تابع کاربرد چندانی نداشته و فقط برای آگاهی از فیلتر های اعتبار سنج قابل دسترس استفاده می شود .خروجی این تابع ، به صورت آرایه ای از اسامی فیلترهای اعتبار سنج قابل دسترس می باشد .
شکل کلی استفاده از این تابع به صورت filter_list می باشد.
مثال :
print_r ( filter_list ( ) ) ;
خروجی :
Array
(
[0] => int
[1] => boolean
[2] => float
[3] => validate_regexp
[4] => validate_url
[5] => validate_email
[6] => validate_ip
[7] => string
[8] => stripped
[9] => encoded
[10] => special_chars
[11] => unsafe_raw
[12] => email
[13] => url
[14] => number_int
[15] => number_float
[16] => magic_quotes
[17] => callback
)
تابع اعتبار سنج filter_var
تابع filter_var ، مقدار وارد شده برای یک متغیر دریافت کرده و بر اساس معیار مورد نظر اعتبار سنجی می کند .
برای مثال متغیر می تواند یک مقدار از پیش تعیین شده یا مقداری که کاربر در یک کادر متن در یک فرم وب وارد کرده است ، باشد.برای مثال فرض کنید که کاربر باید در یک کادر متن آدرس ایمیل خود را وارد نماید . این تابع مقدار وارد شده در کادر متن مربوط به ایمیل را دریافت کرده و آن را با استفاده از یکی از فیلترهای پیش ساخته اعتبار سنج PHP به نام FILTER_VALIDATE_EMAIL بررسی می کند که آیا با فرمت یک ایمیل معمولی سازگاری دارد یا خیر .یا مثلا می خواهیم مطمئن شویم که مقدار یک متغیر عددی در رنج عدد مورد نظر ما قرار دارد یا خیر .در صورتی که مقدار وارد شده اعتبار سنجی شده و با معیار مورد نظر مطابقت داشت ، تابع مقدار True و در صورتی که مطابقت نداشت ، مقدار False را بر می گرداند .
شکل کلی استفاده از این تابع به صورت filter_var ( variable , filter ) می باشد
مثال 1 : فرمت نا صحیح یک ایمیل .
if ( ! filter_var ( "someone@example....com" , FILTER_VALIDATE_EMAIL ) )
{
echo ( " E-Mail is not valid " ) ;
}
else
{
echo ( " E-Mail is valid " ) ;
}
خروجی مثال:
E-Mail is not valid
مثال 2 : فرمت صحیح یک ایمیل .
if ( ! filter_var ( "someone@example.com" , FILTER_VALIDATE_EMAIL ) )
{
echo ( " E-Mail is not valid " ) ;
}
else
{
echo ( " E-Mail is valid " ) ;
}
خروجی مثال:
E-Mail is valid
تابع اعتبار سنج filter_var_array
تابع filter_var_array ، مقدار چندین ( آرایه ای از ) متغیر را دریافت کرده و آنها را بر اساس معیار مورد نظر اعتبار سنجی می کند .برای مثال متغیرها می توانند مقداری از پیش تعیین شده بوده یا مقداری که کاربر در کادرهای متن در یک فرم وب وارد کرده است ، باشد.فرق تابعfilter_var_array با تابع filter_var در این است که تابعfilter_var_array می تواند چندین متغیر را همزمان و بدون نیاز به تکرار دستوری ، اعتبار سنجی نماید ، حال آنکه تابع filter_var ، فقط می تواند یک متغیر را اعتبار سنجی نماید .
خروجی این تابع ، به صورت آرایه ای از جواب های True یا False خواهد بود .
شکل کلی استفاده از این تابع به صورت filter_var_array ( array , filter args ) می باشد.
- variable
این پارامتر تعیین کننده نام متغیری است که تابع می خواهد آن را بررسی و اعتبار سنجی کند . مقدار وارد شده در منبع ورودی در یک متغیر با نام خاص ریخته شده و برنامه آن را اعتبار سنجی می کند .
استفاده از این پارامتر اجباری است .
- filter
این پارامتر تعیین کننده نام یا ID یکی از فیلتر های پیش ساخته اعتبار سنج PHP است که بر مبنای آن داده ورودی اعتبار سنجی می شود . مقدار پیش فرض برای این پارامتر FILTER_SANITIZE_STRING است . برای دریافت اطلاعات کامل راجع به انواع فیلتر های پیش ساخته PHP به صفحه مرجع فیلتر های اعتبار سنج در PHP بروید .
با ارایه یک مثال ، موارد بالا را در عمل نمایش داده ایم .
مثال : در مثال زیر تابع ( ) filter_var_array را برای اعتبار سنجی 3 متغیری که در آرایه arr قرار داده اند ، استفاده کرده ایم . مقادیر ورودی یک name ، age و یک e-mail addres هستند.
$arr = array
(
"name" => "peter griffin",
"age" => "41",
"email" => "peter@example.com",
);
$filters = array
(
"name" => array
(
"filter"=>FILTER_CALLBACK,
"flags"=>FILTER_FORCE_ARRAY,
"options"=>"ucwords"
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
print_r(filter_var_array($arr, $filters));
خروجی :
Array
(
[name] => Peter Griffin
[age] => 41
[email] => peter@example.com
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید