فیلترها (Filters)
«فیلترهای پی اچ پی (PHP Filters)» برای اعتبارسنجی و پاکسازی داده اند. «اعتبارسنجی (Validation)» یعنی بررسی شکل درست داده. «پاکسازی (Sanitization)» یعنی حذف کاراکترهای غیرمجاز. مثل تحویل برگه تمیز به معلم.
افزونه فیلتر پی اچ پی
افزونه فیلتر، ابزارهای لازم برای چک کردن ورودی را فراهم می کند. کار اعتبارسنجی را سریع و ساده می کند. با تابع filter_list() می توان لیست فیلترها را دید.
<table>
<tr>
<td>Filter Name</td>
<td>Filter ID</td>
</tr>
<?php
foreach (filter_list() as $id => $filter) {
echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
}
?>
</table>
چرا از فیلترها استفاده کنیم؟
بیشتر برنامه ها داده بیرونی می گیرند. مثل فرم، کوکی، یا سرویس. داده نامعتبر می تواند مشکل امنیتی بسازد. پس همیشه داده بیرونی را اعتبارسنجی کن.
تابع filter_var()
تابع filter_var() یک متغیر را با فیلتر مشخص چک می کند. هم می تواند پاکسازی کند، هم اعتبارسنجی کند.
- متغیر هدف را بده.
- نوع فیلتر مناسب را انتخاب کن.
پاکسازی یک رشته
این مثال تگ های HTML را حذف می کند. خروجی، متن تمیز است.
<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
اعتبارسنجی عدد صحیح
این مثال بررسی می کند مقدار، «عدد صحیح (Integer)» است یا نه.
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
نکته: مشکل مقدار صفر
اگر مقدار صفر باشد، باید شرط دقیق بنویسی. این راه حل درست است.
<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
اعتبارسنجی آدرس IP
این مثال بررسی می کند مقدار، «آی پی (IP Address)» معتبر است یا نه.
<?php
$ip = "127.0.0.1";
if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
echo($ip . " is a valid IP address");
} else {
echo($ip . " is not a valid IP address");
}
?>
پاکسازی و اعتبارسنجی ایمیل
اول ایمیل را پاکسازی کن. سپس اعتبارسنجی کن. این کار خطاها را کم می کند.
<?php
$email = "john.doe@example.com";
// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Validate e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo($email . " is a valid email address");
} else {
echo($email . " is not a valid email address");
}
?>
پاکسازی و اعتبارسنجی URL
ابتدا URL را پاکسازی کن. سپس بررسی کن معتبر است یا نه.
<?php
$url = "https://www.w3schools.com";
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo($url . " is a valid URL");
} else {
echo($url . " is not a valid URL");
}
?>
مرجع کامل فیلترها
برای دیدن همه فیلترها و گزینه هایشان، مرجع کامل فیلتر را ببین.
جمع بندی سریع
- داده بیرونی را همیشه اعتبارسنجی کن.
- برای رشته ها، اول پاکسازی کن.
- برای اعداد، حواست به صفر باشد.
- برای ایمیل و URL، هر دو مرحله را انجام بده.