افزونهای که هوش مصنوعی نوشته معمولاً کار میکند، ولی «کار کردن» با «امن بودن» فرق دارد. رایجترین کمبودها: بررسی نکردن سطح دسترسی کاربر، نبود nonce در فرمها، و استفادهی مستقیم از ورودی در کوئری یا خروجی. قبل از نصب روی سایت اصلی، این هشت مورد را چک کنید و حتماً روی محیط آزمایشی امتحان کنید.
چکلیست هشتموردی
| # | بررسی | در کد دنبال چه بگردیم |
|---|---|---|
| ۱ | دسترسی مستقیم به فایل بسته است | if ( ! defined( 'ABSPATH' ) ) exit; در ابتدای هر فایل |
| ۲ | سطح دسترسی بررسی میشود | current_user_can() قبل از هر عمل مدیریتی |
| ۳ | فرمها و درخواستهای ایجکس nonce دارند | wp_nonce_field، check_admin_referer، check_ajax_referer |
| ۴ | ورودی پاکسازی میشود | sanitize_text_field، absint، sanitize_email |
| ۵ | خروجی escape میشود | esc_html، esc_attr، esc_url |
| ۶ | کوئریها آمادهسازی میشوند | $wpdb->prepare()؛ هیچ متغیری مستقیم داخل SQL نباشد |
| ۷ | آپلود فایل محدود است | بررسی نوع و استفاده از wp_handle_upload |
| ۸ | تابع خطرناک ندارد | eval، exec، system، base64_decode روی ورودی، unserialize روی دادهی کاربر |
از خود مدل بخواهید بازبینی کند
در یک گفتگوی تازه، کد را بدهید و بپرسید:
این افزونهی وردپرس را مثل یک بازبین امنیتی بررسی کن.
برای هر مورد بگو کدام خط مشکل دارد:
بررسی دسترسی، nonce، پاکسازی ورودی، escape خروجی، SQL، آپلود فایل.
فقط مشکلات واقعی را بگو، با شمارهی خط.
بازبینی در گفتگوی جدا نتیجهی بهتری میدهد تا در همان گفتگویی که کد را نوشته.
تست بیخطر
- یک سابدامین آزمایشی بسازید و نسخهای از سایت را آنجا بگذارید. (ساخت سابدامین)
- روی آن رمز بگذارید تا گوگل و دیگران نبینند. (Directory Privacy)
- WP_DEBUG را روشن کنید و افزونه را نصب کنید.
- همهی کارهایش را امتحان کنید، با کاربر مدیر و با کاربر عادی.
- لاگ خطا را ببینید.
- با یک کاربر عادی سعی کنید به صفحههای تنظیمات افزونه بروید؛ نباید بتواند.
کارایی
- افزونه نباید در هر بار بارگذاری صفحه کوئری سنگین بزند یا به سرویس بیرونی درخواست بدهد.
- اسکریپت و استایلش فقط در صفحههایی که لازم است بارگذاری شود.
- بعد از نصب، مصرف منابع را ببینید. (مصرف CPU وردپرس)
نگهداری
افزونهای که خودتان ساختهاید بهروزرسانی خودکار ندارد. با هر نسخهی جدید وردپرس و PHP باید امتحانش کنید. کد را در Git نگه دارید و بنویسید چه کاری میکند؛ شش ماه بعد یادتان نیست.
کی از افزونهی آماده استفاده کنیم؟
برای کارهای حساس (پرداخت، عضویت، امنیت، فرم با اطلاعات شخصی) افزونهی شناختهشده و پرکاربر انتخاب کنید. افزونهی دستساز برای کارهای کوچک و مشخص خوب است: یک شورتکد، یک ستون در فهرست نوشتهها، یک تغییر کوچک در رفتار قالب.
سوالهای رایج
افزونه سایت را از کار انداخت.
پوشهاش را در wp-content/plugins تغییر نام دهید. (رفع خطای ۵۰۰)
کد را در functions.php قالب بگذارم؟
افزونهی جدا بهتر است؛ با تغییر قالب از بین نمیرود.