اگر افزونه تجاری وردپرس میفروشید، بزرگترین تهدیدتان کپی و نال شدن آن است. راهحل عملی، انکد افزونه وردپرس با ionCube است: کد به بایتکد کامپایل و رمزنگاری میشود، افزونه دقیقا مثل قبل کار میکند اما کسی نمیتواند منطق لایسنس را ببیند یا دستکاری کند. در این صفحه دقیقا میگوییم کدام فایلها را انکد کنید، کدامها را نکنید و چطور خروجی را برای هر خریدار قفل کنید.
چرا افزونههای وردپرس نال میشوند؟
نال کردن یعنی کسی سورس افزونه تجاری را باز میکند، بخش بررسی لایسنس را پیدا میکند و آن را حذف یا خنثی میکند تا افزونه بدون خرید کار کند. تا وقتی کد PHP به صورت متن خوانا در دسترس باشد، این کار برای یک توسعهدهنده متوسط چند دقیقه بیشتر طول نمیکشد.
روند کار نالکنندهها تقریبا همیشه یکسان است. اول دنبال تابع یا کلاسی میگردند که وضعیت لایسنس را برمیگرداند. بعد یا آن تابع را حذف میکنند یا مقدار بازگشتیاش را همیشه معتبر میکنند. در گام آخر هم درخواستهای افزونه به سرور لایسنس شما را مسدود یا جعل میکنند تا فعالسازی از راه دور غیرفعال نشود.
نکته مهم این است که هیچکدام از این سه مرحله بدون دسترسی به سورس خوانا ممکن نیست. وقتی فایلها انکد شده باشند، مهاجم با یک بلوک بایتکد روبهرو میشود که نه قابل مطالعه است و نه قابل ویرایش. این دقیقا همان نقطهای است که معادله را به نفع شما برمیگرداند. برای بررسی عمیقتر روشهای محافظت، مقاله چطور از نال شدن افزونه وردپرس جلوگیری کنیم را بخوانید.
محافظت مطلق وجود ندارد، اما محافظت اقتصادی وجود دارد
هیچ روشی صد در صد نفوذناپذیر نیست و هر کس خلاف این را ادعا کند دقیق حرف نمیزند. هدف واقعی این است که هزینه و زمان لازم برای شکستن محافظت، از ارزش خود محصول بیشتر شود. وقتی سورس خوانا حذف شده و خروجی روی دامنه خریدار قفل شده باشد، نال کردن دیگر صرف نمیکند و مهاجم سراغ هدف سادهتری میرود.
کدام فایلهای افزونه را انکد کنیم؟
این مهمترین تصمیم کل فرایند است. انکد کردن همه چیز نه لازم است و نه درست؛ برخی فایلها باید خوانا بمانند وگرنه وردپرس یا خود افزونه درست کار نمیکند. قاعده ساده این است: هر چیزی که منطق است انکد شود و هر چیزی که داده یا دارایی است دستنخورده بماند.
| فایل | انکد شود؟ | دلیل |
|---|---|---|
| فایل اصلی افزونه (plugin.php) | بله | نقطه ورود و منطق اصلی اینجاست |
| کلاسهای لایسنس و اعتبارسنجی | بله (مهمترین) | هدف مستقیم نالکنندهها همین فایل است |
| کلاسهای منطق کسب و کار | بله | ارزش واقعی محصول و مزیت رقابتی شما |
| readme.txt | خیر | وردپرس و بازارها آن را میخوانند |
| فایلهای ترجمه (po و mo) | خیر | انکد آنها ساختار زبانی را خراب میکند |
| assets شامل css و js و تصویر | خیر | اصلا PHP نیستند و انکدشان بیمعناست |
| فایل تنظیمات (config) | خیر | باید برای مشتری قابل ویرایش بماند |
| قالبهای نمایشی (template) | معمولا خیر | اغلب مشتری میخواهد ظاهر را سفارشی کند |
مراحل انکد افزونه وردپرس
کل فرایند آنلاین است و نیازی به خرید لایسنس گران انکدر ندارید. افزونه را به صورت ZIP آپلود میکنید، نسخه هدف و گزینهها را انتخاب میکنید و خروجی انکدشده را تحویل میگیرید.
- آمادهسازی پروژه یک نسخه پشتیبان از سورس اصلی بگیرید و در جای امن نگه دارید. فایلهایی که نباید انکد شوند را طبق جدول بالا مشخص کنید.
- آپلود افزونه کل پوشه افزونه را به صورت ZIP در پنل انکد آنلاین بارگذاری کنید.
- انتخاب نسخه هدف PHP همان نسخهای را انتخاب کنید که هاست مشتری اجرا میکند. برای مقصد نامعلوم، نسخهای میانه مثل ۸٫۱ یا ۸٫۲ انتخاب امنتری است.
- فعال کردن مبهمسازی مبهمسازی نام توابع و کلاسها لایه اضافهای روی بایتکد میگذارد و تحلیل خروجی را سختتر میکند.
- تعیین قفل دامنه اگر برای یک خریدار مشخص میسازید، دامنه او را وارد کنید تا خروجی جای دیگری اجرا نشود.
- تست خروجی افزونه انکدشده را روی یک وردپرس تازه نصب و فعال کنید و مسیرهای اصلی را امتحان کنید.
افزونه خود را همین حالا انکد کنید
فایل 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 نامتناسب | خطای اجرا روی هاست مشتری | نسخه هاست مقصد را هدف بگیرید |
| تست نکردن قبل از تحویل | کشف مشکل توسط مشتری | روی وردپرس تازه تست کنید |
سوالات متداول
آیا افزونه انکدشده هم قابل نال شدن است؟
عملا بسیار سخت. چون سورس خوانا وجود ندارد، نالکننده نمیتواند بخش بررسی لایسنس را پیدا و حذف کند. با افزودن قفل دامنه، حتی کپی مستقیم فایل روی سایت دیگر هم اجرا نمیشود. ادعای امنیت مطلق درست نیست، اما هزینه شکستن این محافظت معمولا از ارزش خود افزونه بیشتر میشود.
انکد روی سرعت یا عملکرد افزونه اثر میگذارد؟
خیر. هوکها و اکشنهای وردپرس بدون تغییر اجرا میشوند و چون مرحله تجزیه سورس حذف میشود، در کنار OPcache تفاوت سرعت معمولا زیر یکی دو درصد و غیرمحسوس است.
همه فایلهای افزونه را باید انکد کنم؟
خیر. فقط فایلهای PHP که منطق دارند، بهویژه فایل اصلی و کلاس لایسنس. فایل readme، ترجمهها، assets و فایل تنظیمات باید خوانا بمانند وگرنه افزونه یا وردپرس درست کار نمیکند.
افزونه انکدشده روی هاست مشتری اجرا میشود؟
بله، به شرطی که ionCube Loader روی هاست فعال باشد که امروز روی اکثر هاستهای اشتراکی فعال است. اگر نبود، مشتری میتواند با یک تیک از بخش Select PHP Version آن را فعال کند.
میتوانم برای هر خریدار نسخه جداگانه بسازم؟
بله. میتوانید برای هر مشتری خروجی قفلشده روی دامنه خودش تهیه کنید. این روش موثرترین راه توقف توزیع غیرمجاز است.
اگر بعدا افزونه را بهروزرسانی کنم چه میشود؟
نسخه جدید سورس را دوباره انکد میکنید و به مشتری تحویل میدهید. به همین دلیل نگه داشتن سورس اصلی و انکدنشده ضروری است، چون خروجی انکدشده قابل بازگشت به سورس نیست.
PHP