اعتبار سنجی داده ها و ضد عفونی در وردپرس

هنگام توسعه برای وردپرس ، اعتبار سنجی مناسب داده ها و ضد عفونی برای امنیت مناسب مضامین و افزونه های ما بسیار مهم است.
تفاوت چیست؟
- اعتبار سنجی – بررسی کنید که داده هایی که دریافت کرده ایم این است که باید باشد. مثال: بررسی کنید که یک نامه الکترونیکی مانند آدرس ایمیل به نظر می رسد ، که یک تاریخ در قالب تاریخ است و یک عدد (یا به عنوان بازیگران) یک عدد صحیح/اعشاری است.
- ضد عفونی / فرار – فیلترها را روی داده ها اعمال کنید تا آن را در یک زمینه خاص ایمن کنید. مثال: برای نمایش کد HTML در یک منطقه متن ، تمام برچسب های HTML باید با معادل های موجودی جایگزین شوند ، در غیر این صورت مرورگر HTML را ارائه می دهد.
قانون شماره 1: به کاربران اعتماد نکنید
هرگز فرض نکنید که هر داده ای که توسط کاربر وارد شده است بی خطر است. همچنین هرگز فرض نکنید که داده های حاصل از بانک اطلاعاتی ایمن است – حتی اگر قبل از درج آن ، آن را “ایمن” کرده اید. این در مورد فرم های جلوی و داشبورد مدیر WP صدق می کند.
قانون شماره 2: اعتبار اولیه ، دیر فرار کنید
به محض اینکه آن را از کاربر دریافت کردید ، در مورد ورودی داده ها اعتبار دهید. اواخر قبل از استفاده ، نمایش داده ها یا بازگشت داده ها ، در خروجی فرار کنید (یا ضد عفونی کنید). چه شکلی از این ضد عفونی کننده استفاده می کند ، کاملاً به زمینه ای که از آن استفاده می کنید بستگی دارد.
قانون شماره 3: آیا به وردپرس اعتماد کنید
برخلاف نمایش داده های مستقیم SQL ، هنگام استفاده از توابع وردپرس بومی ، داده ها به درستی توسط WP Core به طور صحیح (برای زمینه مناسب) ضد عفونی می شوند. یک دلیل دیگر که همیشه به جای کد سفارشی ، استفاده از توابع بومی ، هر جا ممکن است.
اعتبار سنجی داده ها
اولین نگرانی هنگام دریافت داده از کاربر ، ایمنی نیست بلکه اعتبار است. معنی “معتبر” برای شما بستگی دارد و اگر این کار را به درستی انجام دهید ، وردپرس مراقبت می کند تا با خیال راحت داده ها را به پایگاه داده اضافه کنید. اعتبار می تواند به معنای آدرس ایمیل معتبر ، یک عدد صحیح مثبت ، متن با طول محدود یا یکی از آرایه های گزینه های مشخص باشد. وردپرس عملکردهای زیادی را ارائه می دهد که می تواند به هر اعتبار مورد نیاز ما کمک کند.
- شماره – هنگام انتظار داده های عددی ، با آن امکان پذیر است
is_int
یاis_float
و معمولاً کافی است که داده ها را به عنوان عددی با:intval
یاfloatval
بشر برای بالشتک صفر ، وردپرس عملکرد را ارائه می دهدzeroise()
بشر - نامه الکترونیکی -برای بررسی اعتبار نامه های الکترونیکی ، وردپرس دارای این است
is_email()
عملکرد. - HTML – وردپرس خانواده ای از عملکردهای فرم را فراهم می کند
wp_kses_*
بشر درwp_kses()
یک عملکرد بسیار انعطاف پذیر است و به شما امکان می دهد برچسب های ناخواسته یا فقط ویژگی های ناخواسته را از برچسب ها حذف کنید. مشخص کردن هر برچسب و ویژگی مجاز می تواند یک کار پر زحمت باشد بنابراین وردپرس ارائه می دهدwp_kses
با برچسب ها و پروتکل های مجاز از پیش تنظیم شده: - نامهای –
sanitize_file_name( $filename )
با از بین بردن شخصیت هایی که در نام های پرونده غیرقانونی هستند ، ضد عفونی می شود. فضاهایی را با خطوط و خط های متوالی با یک خط تیره جایگزین می کند و دوره ها ، خطوط و زیرکانها را از ابتدا و پایان نام پرونده حذف می کند.wp_unique_filename( $dir, $filename )
یک منحصر به فرد را برمی گرداند (برای دایرکتوری$dir
) ، نام پرونده ضد عفونی شده (از آن استفاده می کندsanitize_file_name
). - قسمتهای متنی – وردپرس فراهم می کند
sanitize_text_field()
برای از بین بردن فضاهای سفید اضافی ، زبانه ها و شکستن خط و همچنین از بین بردن هرگونه برچسب هنگام دریافت داده از یک قسمت متن. - کلیدی – وردپرس نیز فراهم می کند
sanitize_key
این تضمین می کند که متغیر برگشتی فقط حاوی آلفای آلفای ، خطوط و زیرکانها است.
اطلاعات بیشتر در مورد اعتبار سنجی ورودی را می توان در اینجا یافت.
ضد عفونی داده ها
در حالی که اعتبار سنجی در مورد اطمینان از اعتبار داده ها است – ضد عفونی داده ها در مورد ایمن سازی آن است. در حالی که برخی از توابع اعتبار سنجی ممکن است در اطمینان از ایمن بودن داده ها مفید باشد – به طور کلی ، کافی نیست. حتی داده های “معتبر” ممکن است در زمینه های خاص ناامن باشند. استفاده از آن در یک زمینه ایمن است ، لزوماً در دیگری ایمن نیست. به همین دلیل وردپرس اغلب عملکردهای مختلفی را برای همان محتوا ارائه می دهد ، به عنوان مثال:
-
the_title
– برای استفاده از عنوان در HTML استاندارد (به عنوان مثال برچسب های هدر در داخل) -
the_title_attribute
– برای استفاده از عنوان به عنوان یک مقدار ویژگی (معمولاً ویژگی عنوان دربرچسب ها)
-
the_title_rss
– برای استفاده از عنوان در فیدهای RSS
اگرچه گاهی اوقات ، ما باید ضد عفونی خود را انجام دهیم – غالباً به این دلیل که ما فراتر از عنوان پست استاندارد ، پیوند ثابت ، محتوا و غیره را داریم که وردپرس برای ما کنترل می کند.
اطلاعات بیشتر در مورد ضد عفونی خروجی را می توان در اینجا یافت.
فرار از پایگاه داده
هنگام استفاده از کارکردهایی مانند get_posts
یا کلاس هایی مانند WP_Query
وت WP_User_Query
، وردپرس در جستجوی پایگاه داده از ضد عفونی لازم مراقبت می کند. با این حال ، هنگام بازیابی داده ها از یک جدول سفارشی ، یا در غیر این صورت انجام یک پرس و جو مستقیم SQL در پایگاه داده – ضد عفونی مناسب به شما بستگی دارد. وردپرس ، با این حال ، کلاس مفیدی را ارائه می دهد ، $wpdb
کلاس ، که به فرار از نمایش داده های SQL کمک می کند.
برای یک مرور کامل تر از فرار SQL در وردپرس ، به اعتبار سنجی داده های پایگاه داده مراجعه کنید.