فیلترها دو نوع کاربرد دارند:
اعتبارسنجی داده ها : اینکه داده ها دارای فرمت مورد نظر باشند.
پالایش داده ها : حذف کاراکترهای غیر مجاز از ورودی ها.
افزونه فیلتر PHP
فیلترهای PHP برای تأیید و پاکسازی ورودی های خارجی مورد استفاده قرار می گیرند.
افزونه فیلتر PHP دارای بسیاری از توابع مورد نیاز برای بررسی ورودی کاربر است و طراحی شده است تا اعتبارسنجی داده ها را ساده تر و سریعتر کند.
تابع filter_list میتواند لیستی از امکانات افزونه فیلتر PHP را ارائه دهد:
<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>
قطعه کد فوق تمام فیلترها و شناسه آنها را نمایش می دهد.
چرا باید از فیلترها استفاده کنیم؟
بسیاری از برنامه های کاربردی وب، ورودی های خارجی را دریافت می کنند. ورودی / داده خارجی می تواند باشد:
- ورودی کاربر از یک فرم
- کوکی ها
- داده های سرویس های وب
- متغیرهای سرور
- نتایج جستجوی پایگاه داده
شما همیشه باید داده های خارجی را بررسی کنید!
داده های ارسال شده نامعتبر می تواند به مشکلات امنیتی منجر شود و صفحه وب شما را از بین ببرد!
با استفاده از فیلترهای PHP می توانید مطمئن باشید که برنامه شما ورودی صحیح را می دهد!
تابع PHP filter_var
تابع filter_var اعتبار داده ها را بررسی کرده و آنها را پالایش می کند.
تابع filter_var ، یک متغیر را با یک فیلتر مشخص فیلتر می کند و دارای دو پارامتر ورودی است:
- متغیر که می خواهید چک کنید.
- نوع بررسی که باید استفاده کند.
پالایش یک رشته
مثال زیر از تابع filter_var برای حذف تمام تگ های HTML از یک رشته استفاده می کند:
<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
اعتبار یک عدد صحیح
مثال زیر از تابع filter_var برای بررسی اینکه آیا متغیر $int یک عدد صحیح است، استفاده می شود. اگر متغیر $int یک عدد صحیح باشد، خروجی کد زیر: “صحیح معتبر است”. اگر $int یک عدد صحیح نباشد، خروجی خواهد شد: “صحیح معتبر نیست”:
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
نکته: مشکل تابع filter_var با مقدار صفر
در مثال بالا، اگر $int به 0 تنظیم شده باشد، تابع بالا به “Integer معتبر نیست” را نشان می دهد. برای حل این مشکل، از کد زیر استفاده کنید:
<?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
مثال زیر از تابع filter_var برای بررسی اینکه آیا متغیر $ip یک آدرس IP معتبر است استفاده می شود:
<?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");
}
?>
پالایش یک بررسی اعتبار یک آدرس ایمیل
مثال زیر از تابع filter_var برای اولین بار تمام کاراکترهای غیرمجاز را از متغیر $email حذف می کند، سپس بررسی کنید که آیا یک آدرس ایمیل معتبر است:
<?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");
}
?>
پالایش (Sanitize) و اعتبار سنجی یک URL
مثال زیر از تابع filter_var ، ابتدا تمام کاراکترهای غیرمجاز را از یک URL حذف می کند و سپس بررسی کنید آیا $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");
}
?>