انکد و محافظت از افزونه وردپرس

سورس افزونه تجاری خود را قبل از فروش رمزنگاری کنید و جلوی نال شدن و کپی غیرمجاز را بگیرید.

اگر افزونه تجاری وردپرس می‌فروشید، بزرگ‌ترین تهدیدتان کپی و نال شدن آن است. راه‌حل عملی، انکد افزونه وردپرس با ionCube است: کد به بایت‌کد کامپایل و رمزنگاری می‌شود، افزونه دقیقا مثل قبل کار می‌کند اما کسی نمی‌تواند منطق لایسنس را ببیند یا دستکاری کند. در این صفحه دقیقا می‌گوییم کدام فایل‌ها را انکد کنید، کدام‌ها را نکنید و چطور خروجی را برای هر خریدار قفل کنید.

چرا افزونه‌های وردپرس نال می‌شوند؟

نال کردن یعنی کسی سورس افزونه تجاری را باز می‌کند، بخش بررسی لایسنس را پیدا می‌کند و آن را حذف یا خنثی می‌کند تا افزونه بدون خرید کار کند. تا وقتی کد PHP به صورت متن خوانا در دسترس باشد، این کار برای یک توسعه‌دهنده متوسط چند دقیقه بیشتر طول نمی‌کشد.

روند کار نال‌کننده‌ها تقریبا همیشه یکسان است. اول دنبال تابع یا کلاسی می‌گردند که وضعیت لایسنس را برمی‌گرداند. بعد یا آن تابع را حذف می‌کنند یا مقدار بازگشتی‌اش را همیشه معتبر می‌کنند. در گام آخر هم درخواست‌های افزونه به سرور لایسنس شما را مسدود یا جعل می‌کنند تا فعال‌سازی از راه دور غیرفعال نشود.

نکته مهم این است که هیچ‌کدام از این سه مرحله بدون دسترسی به سورس خوانا ممکن نیست. وقتی فایل‌ها انکد شده باشند، مهاجم با یک بلوک بایت‌کد روبه‌رو می‌شود که نه قابل مطالعه است و نه قابل ویرایش. این دقیقا همان نقطه‌ای است که معادله را به نفع شما برمی‌گرداند. برای بررسی عمیق‌تر روش‌های محافظت، مقاله چطور از نال شدن افزونه وردپرس جلوگیری کنیم را بخوانید.

لایه‌های محافظت از افزونه وردپرس شامل انکد سورس، قفل دامنه، تاریخ انقضا و اعتبارسنجی سمت سرور
هر لایه به تنهایی قابل دور زدن است؛ ترکیب آن‌ها نال کردن را غیراقتصادی می‌کند.

محافظت مطلق وجود ندارد، اما محافظت اقتصادی وجود دارد

هیچ روشی صد در صد نفوذناپذیر نیست و هر کس خلاف این را ادعا کند دقیق حرف نمی‌زند. هدف واقعی این است که هزینه و زمان لازم برای شکستن محافظت، از ارزش خود محصول بیشتر شود. وقتی سورس خوانا حذف شده و خروجی روی دامنه خریدار قفل شده باشد، نال کردن دیگر صرف نمی‌کند و مهاجم سراغ هدف ساده‌تری می‌رود.

کدام فایل‌های افزونه را انکد کنیم؟

این مهم‌ترین تصمیم کل فرایند است. انکد کردن همه چیز نه لازم است و نه درست؛ برخی فایل‌ها باید خوانا بمانند وگرنه وردپرس یا خود افزونه درست کار نمی‌کند. قاعده ساده این است: هر چیزی که منطق است انکد شود و هر چیزی که داده یا دارایی است دست‌نخورده بماند.

فایلانکد شود؟دلیل
فایل اصلی افزونه (plugin.php)بلهنقطه ورود و منطق اصلی اینجاست
کلاس‌های لایسنس و اعتبارسنجیبله (مهم‌ترین)هدف مستقیم نال‌کننده‌ها همین فایل است
کلاس‌های منطق کسب و کاربلهارزش واقعی محصول و مزیت رقابتی شما
readme.txtخیروردپرس و بازارها آن را می‌خوانند
فایل‌های ترجمه (po و mo)خیرانکد آن‌ها ساختار زبانی را خراب می‌کند
assets شامل css و js و تصویرخیراصلا PHP نیستند و انکدشان بی‌معناست
فایل تنظیمات (config)خیرباید برای مشتری قابل ویرایش بماند
قالب‌های نمایشی (template)معمولا خیراغلب مشتری می‌خواهد ظاهر را سفارشی کند
راهنمای انتخاب فایل‌های افزونه وردپرس برای انکد شامل فایل اصلی، کلاس لایسنس، ترجمه و assets
راهنمای سریع انتخاب فایل‌ها هنگام انکد افزونه وردپرس.
هشدار مهم فایل هدر افزونه که کامنت اطلاعات افزونه را دارد (نام، نسخه، نویسنده) باید طوری انکد شود که وردپرس همچنان بتواند آن کامنت را بخواند. ionCube این هدر را حفظ می‌کند، اما بعد از انکد حتما در پیشخوان وردپرس بررسی کنید که نام و نسخه افزونه درست نمایش داده می‌شود.

مراحل انکد افزونه وردپرس

کل فرایند آنلاین است و نیازی به خرید لایسنس گران انکدر ندارید. افزونه را به صورت ZIP آپلود می‌کنید، نسخه هدف و گزینه‌ها را انتخاب می‌کنید و خروجی انکدشده را تحویل می‌گیرید.

  1. آماده‌سازی پروژه یک نسخه پشتیبان از سورس اصلی بگیرید و در جای امن نگه دارید. فایل‌هایی که نباید انکد شوند را طبق جدول بالا مشخص کنید.
  2. آپلود افزونه کل پوشه افزونه را به صورت ZIP در پنل انکد آنلاین بارگذاری کنید.
  3. انتخاب نسخه هدف PHP همان نسخه‌ای را انتخاب کنید که هاست مشتری اجرا می‌کند. برای مقصد نامعلوم، نسخه‌ای میانه مثل ۸٫۱ یا ۸٫۲ انتخاب امن‌تری است.
  4. فعال کردن مبهم‌سازی مبهم‌سازی نام توابع و کلاس‌ها لایه اضافه‌ای روی بایت‌کد می‌گذارد و تحلیل خروجی را سخت‌تر می‌کند.
  5. تعیین قفل دامنه اگر برای یک خریدار مشخص می‌سازید، دامنه او را وارد کنید تا خروجی جای دیگری اجرا نشود.
  6. تست خروجی افزونه انکدشده را روی یک وردپرس تازه نصب و فعال کنید و مسیرهای اصلی را امتحان کنید.
مراحل انکد افزونه وردپرس از آماده‌سازی و آپلود تا انتخاب نسخه و دریافت خروجی
مسیر چهار مرحله‌ای انکد افزونه تا تحویل به مشتری.

افزونه خود را همین حالا انکد کنید

فایل ZIP افزونه را آپلود کنید، نسخه هدف را انتخاب کنید و خروجی انکدشده را تحویل بگیرید.

شروع انکد آنلاین

ترکیب انکد با لایسنس دامنه‌ای

انکد جلوی خواندن و ویرایش سورس را می‌گیرد، اما به تنهایی جلوی کپی فایل را نمی‌گیرد. اگر خریدار فایل انکدشده را در اختیار دیگری بگذارد، آن فایل روی سایت دوم هم اجرا می‌شود. اینجاست که قفل دامنه وارد می‌شود.

در قفل دامنه، نام دامنه مجاز داخل خروجی ثبت می‌شود و لودر هنگام اجرا آن را با دامنه فعلی مقایسه می‌کند. اگر یکی نبود، اجرا متوقف می‌شود. چون این بررسی در سطح لودر و روی کد انکدشده انجام می‌شود، دور زدنش عملا ممکن نیست. جزئیات کامل این روش در صفحه لایسنس‌گذاری و قفل دامنه و مقاله قفل کردن اسکریپت روی یک دامنه آمده است.

سناریوی فروشترکیب پیشنهادی
فروش تکی به مشتری مشخصانکد به همراه قفل روی دامنه خریدار
فروش در بازارهای عمومیانکد به همراه سیستم لایسنس و فعال‌سازی آنلاین
ارائه نسخه دموانکد به همراه تاریخ انقضای کوتاه
پروژه اختصاصی روی سرور مشتریانکد به همراه قفل IP سرور
توصیه عملی بخشی از منطق حیاتی را روی سرور خودتان نگه دارید و افزونه فقط نتیجه را دریافت کند. حتی اگر کسی موفق به تحلیل خروجی شود، آن بخش در دسترسش نیست.

آیا افزونه انکدشده روی همه هاست‌ها کار می‌کند؟

افزونه انکدشده روی هر سروری که ionCube Loader روی آن فعال باشد اجرا می‌شود. خبر خوب اینکه این لودر امروز روی اکثر هاست‌های اشتراکی ایرانی به صورت پیش‌فرض فعال است و در سی‌پنل و دایرکت‌ادمین با یک تیک قابل فعال‌سازی است.

دو نکته سازگاری را جدی بگیرید. اول نسخه PHP: خروجی را برای همان نسخه‌ای بسازید که هاست مشتری اجرا می‌کند. دوم نسل انکدر: نسخه لودر روی سرور مقصد باید مساوی یا جدیدتر از نسل انکدر باشد، وگرنه خطای needs a newer Loader می‌گیرید. جدول کامل سازگاری در مقاله سازگاری ionCube با PHP 8.3 و 8.4 آمده است.

اگر مشتری شما خطای نبود لودر گرفت، نیازی به انکد مجدد نیست؛ فقط باید لودر روی هاستش فعال شود. راهنمای رفع این خطا در مقاله رفع خطای The ionCube PHP Loader needs to be installed توضیح داده شده است. فهرست رسمی نسخه‌های پشتیبانی‌شده را هم می‌توانید در صفحه لودرهای ionCube ببینید.

عملکرد افزونه بعد از انکد تغییر می‌کند؟

خیر. هوک‌ها، اکشن‌ها، فیلترها و کلاس‌های وردپرس دقیقا مثل قبل اجرا می‌شوند، چون رفتار برنامه تغییر نکرده و فقط شکل ذخیره‌سازی کد عوض شده است. از نظر سرعت هم تفاوت محسوسی وجود ندارد؛ کد انکدشده مرحله تجزیه سورس را رد می‌کند و در کنار OPcache معمولا تفاوت زیر یکی دو درصد است.

اشتباهات رایج و راه پرهیز

بیشتر مشکلاتی که بعد از انکد گزارش می‌شود، ریشه در چند اشتباه تکراری دارد. شناختن آن‌ها قبل از تحویل، از رفت و برگشت با مشتری جلوگیری می‌کند.

اشتباهنتیجهراه درست
انکد کردن فایل‌های ترجمهزبان افزونه از کار می‌افتدpo و mo را کنار بگذارید
انکد فایل تنظیماتمشتری نمی‌تواند تنظیمات را عوض کندconfig خوانا بماند
نگه نداشتن نسخه اصلیدیگر نمی‌توانید افزونه را توسعه دهیدسورس اصلی را در جای امن نگه دارید
انتخاب نسخه PHP نامتناسبخطای اجرا روی هاست مشترینسخه هاست مقصد را هدف بگیرید
تست نکردن قبل از تحویلکشف مشکل توسط مشتریروی وردپرس تازه تست کنید
یادآوری رمزنگاری ionCube یک‌طرفه است و امکان بازگرداندن خروجی به سورس اصلی وجود ندارد. پس نسخه اصلی و انکدنشده افزونه را همیشه نگه دارید.
جمع بندی: برای محافظت از افزونه تجاری وردپرس، فایل اصلی و کلاس‌های لایسنس و منطق کسب و کار را انکد کنید و readme و ترجمه و assets و تنظیمات را خوانا بگذارید. انکد را با قفل دامنه ترکیب کنید تا کپی روی سایت دیگر بی‌اثر شود، نسخه هدف PHP را با هاست مشتری هماهنگ کنید و پیش از تحویل، خروجی را روی یک وردپرس تازه تست کنید. با این ترکیب، نال کردن افزونه شما دیگر صرفه اقتصادی ندارد.

سوالات متداول

آیا افزونه انکدشده هم قابل نال شدن است؟

عملا بسیار سخت. چون سورس خوانا وجود ندارد، نال‌کننده نمی‌تواند بخش بررسی لایسنس را پیدا و حذف کند. با افزودن قفل دامنه، حتی کپی مستقیم فایل روی سایت دیگر هم اجرا نمی‌شود. ادعای امنیت مطلق درست نیست، اما هزینه شکستن این محافظت معمولا از ارزش خود افزونه بیشتر می‌شود.

انکد روی سرعت یا عملکرد افزونه اثر می‌گذارد؟

خیر. هوک‌ها و اکشن‌های وردپرس بدون تغییر اجرا می‌شوند و چون مرحله تجزیه سورس حذف می‌شود، در کنار OPcache تفاوت سرعت معمولا زیر یکی دو درصد و غیرمحسوس است.

همه فایل‌های افزونه را باید انکد کنم؟

خیر. فقط فایل‌های PHP که منطق دارند، به‌ویژه فایل اصلی و کلاس لایسنس. فایل readme، ترجمه‌ها، assets و فایل تنظیمات باید خوانا بمانند وگرنه افزونه یا وردپرس درست کار نمی‌کند.

افزونه انکدشده روی هاست مشتری اجرا می‌شود؟

بله، به شرطی که ionCube Loader روی هاست فعال باشد که امروز روی اکثر هاست‌های اشتراکی فعال است. اگر نبود، مشتری می‌تواند با یک تیک از بخش Select PHP Version آن را فعال کند.

می‌توانم برای هر خریدار نسخه جداگانه بسازم؟

بله. می‌توانید برای هر مشتری خروجی قفل‌شده روی دامنه خودش تهیه کنید. این روش موثرترین راه توقف توزیع غیرمجاز است.

اگر بعدا افزونه را به‌روزرسانی کنم چه می‌شود؟

نسخه جدید سورس را دوباره انکد می‌کنید و به مشتری تحویل می‌دهید. به همین دلیل نگه داشتن سورس اصلی و انکدنشده ضروری است، چون خروجی انکدشده قابل بازگشت به سورس نیست.