نکته سریع چگونه داده ها را با PHP فیلتر کنیم
در این مقاله، به این خواهیم پرداخت که چرا فیلتر کردن هر چیزی که در برنامههای ما گنجانده شده است بسیار مهم است. به طور خاص، ما به نحوه اعتبارسنجی و پاکسازی داده های خارجی در PHP نگاه خواهیم کرد. html چیست؟
هرگز (هرگز!) به ورودی های خارجی در برنامه خود اعتماد نکنید. این یکی از مهم ترین درس هایی است که برای هر کسی که یک برنامه وب را توسعه می دهد باید یاد بگیرد.
ورودی خارجی میتواند هر چیزی باشد – از دادههای ورودی $_GET
و $_POST
، برخی از عناصر در بدنه درخواست HTTP یا حتی برخی از مقادیر در $_SERVER
superglobal. کوکیها، مقادیر جلسه و فایلهای سند آپلود و دانلود شده نیز ورودی خارجی محسوب میشوند.
هر بار که دادههای خارجی را پردازش، خروجی، گنجانده یا به کد خود الحاق میکنیم، یک بردار بالقوه برای مهاجمان برای تزریق کد به برنامه ما وجود دارد (به اصطلاح حملات تزریقی). به همین دلیل، ما باید مطمئن شویم که هر قطعه داده خارجی به درستی فیلتر شده است تا بتوان با خیال راحت در برنامه گنجانده شود.
در مورد فیلتر کردن، دو نوع اصلی وجود دارد: اعتبارسنجی و عفونیسازی.
اعتبارسنجی
اعتبارسازی تضمین میکند که ورودی خارجی همان چیزی است که ما انتظار داریم. به عنوان مثال، ممکن است انتظار یک آدرس ایمیل را داشته باشیم، بنابراین منتظر چیزی با فرمت ********@*****.***
هستیم. برای آن، میتوانیم از فیلتر FILTER_VALIDATE_EMAIL
استفاده کنیم. یا اگر انتظار یک Boolean را داریم، میتوانیم از فیلتر FILTER_VALIDATE_BOOL
PHP استفاده کنیم.
در میان مفیدترین فیلترها میتوان به FILTER_VALIDATE_BOOL
، FILTER_VALIDATE_INT
و FILTER_VALIDATE_FLOAT
برای فیلتر انواع اصلی و FILTER_VALIDATE_BOOLاشاره کرد. > و
FILTER_VALIDATE_DOMAIN
به ترتیب برای فیلتر کردن ایمیلها و نامهای دامنه.
یک فیلتر بسیار مهم دیگر FILTER_VALIDATE_REGEXP
است که به ما امکان می دهد در برابر یک عبارت منظم فیلتر کنیم. با استفاده از این فیلتر، میتوانیم فیلترهای سفارشی خود را با تغییر عبارت منظمی که در برابر آن فیلتر میکنیم، ایجاد کنیم.
همه فیلترهای موجود برای تأیید اعتبار در PHP را میتوانید اینجا پیدا کنید.
عفونی کردن
عفونیسازی فرآیند حذف نویسههای غیرقانونی یا ناامن از ورودی خارجی است.
بهترین مثال زمانی است که ورودی های پایگاه داده را قبل از درج آنها در یک پرس و جوی خام SQL پاکسازی می کنیم.
دوباره، برخی از مفیدترین فیلترهای ضدعفونی شامل فیلترهایی برای ضدعفونی کردن برای انواع اصلی مانند FILTER_SANITIZE_STRING
، FILTER_SANITIZE_CHARS
و FILTER_SANITIZE_INT
هستند، اما همچنین FILTER_SANITIZE_URL
و FILTER_SANITIZE_EMAIL
برای پاکسازی آدرسها و ایمیلها.
همه فیلترهای پاکسازی PHP را میتوانید اینجا پیدا کنید.
filter_var() and filter_input()
اکنون که می دانیم PHP مجموعه ای از فیلترها را در دسترس دارد، باید بدانیم چگونه از آنها استفاده کنیم.
کاربرد فیلتر از طریق توابع filter_var()
و filter_input()
انجام میشود.
عملکرد filter_var()
یک فیلتر مشخص شده را روی یک متغیر اعمال می کند. مقدار فیلتر، فیلتر برای اعمال و یک آرایه اختیاری از گزینه ها را می گیرد. برای مثال، اگر میخواهیم یک آدرس ایمیل را تأیید کنیم، میتوانیم از این استفاده کنیم:
<?php $email = شما.email@sitepoint.com:
اگر ( filter_var( $email، FILTER_VALIDATE_EMAIL ) ) {
echo ("این ایمیل معتبر است");
}
اگر هدف ضدعفونی کردن یک رشته بود، میتوانیم از این استفاده کنیم:
<?php $string = "
سلام دنیا”
;
$sanitized_string = filter_var ( $string، FILTER_SANITIZE_STRING );
echo $sanitized_string;
تابع filter_input()
یک ورودی خارجی از ورودی فرم دریافت می کند و آن را فیلتر می کند.
این دقیقاً مانند تابع filter_var()
کار میکند، اما یک نوع ورودی میگیرد (میتوانیم از بین GET
، POST
انتخاب کنیم، COOKIE
، SERVER
، یا ENV
)، متغیری که باید فیلتر شود، و فیلتر. به صورت اختیاری، میتواند مجموعهای از گزینهها را نیز داشته باشد.
یک بار دیگر، اگر میخواهیم بررسی کنیم که متغیر ورودی خارجی “ایمیل” از طریق GET
به برنامه ما ارسال میشود، میتوانیم از این استفاده کنیم:
<?php اگر ( filter_input( INPUT_GET، "ایمیل "، FILTER_VALIDATE_EMAIL ) ) {
echo "ایمیل در حال ارسال است و معتبر است.";
}
نتیجه گیری
و اینها اصول اولیه فیلتر کردن داده ها در PHP هستند. تکنیکهای دیگری مانند اعمال regex ممکن است برای فیلتر کردن دادههای خارجی استفاده شود، اما تکنیکهایی که در این مقاله دیدهایم عبارتند از برای اکثر موارد استفاده بیش از اندازه کافی است.
مطمئن شوید که تفاوت بین اعتبار سنجی و پاکسازی و نحوه استفاده از عملکردهای فیلتر را درک کرده اید. با این دانش، برنامه های PHP شما قابل اعتمادتر و ایمن تر خواهند بود!
منبع :