دسته بندی:

رفع مشکل کد امنیتی ورود مدیریت نیوک۸٫۲

پاسخ کوتاه و صریح: امروز راه‌حل درست برای «مشکل کد امنیتی ورود مدیریت نیوک ۸٫۲» تعمیر آن کپچا نیست، بلکه مهاجرت از نیوک است. PHP-Nuke بیش از یک دهه است که توسعه‌دهنده و وصلهٔ امنیتی ندارد و آسیب‌پذیری‌های شناخته‌شدهٔ آن به‌صورت عمومی منتشر شده‌اند؛ بنابراین نگه‌داشتن یک سایت نیوک روی سرور عمومی — چه کپچایش کار کند و چه نکند — یک ریسک امنیتی پذیرفته‌شده است.

نیوک چه بود و امروز در چه وضعیتی است

PHP-Nuke که در ایران به «نیوک» شناخته می‌شد، یکی از قدیمی‌ترین سیستم‌های مدیریت محتوای متن‌باز است که از سال ۲۰۰۰ توسط فرانسیسکو بورزی منتشر شد. ساختار آن ماژولار بود: پوشه‌های modules/ و blocks/، یک نقطهٔ ورود مرکزی به نام mainfile.php و پیکربندی متمرکز در config.php. در دههٔ ۱۳۸۰ بخش بزرگی از پورتال‌ها و سایت‌های خبری فارسی روی همین سیستم ساخته شدند.

اما شاخهٔ ۸ آخرین نسل نیوک بود و پس از آن پروژه عملاً متوقف شد. سال‌هاست نسخه‌ای که ایرادهای امنیتی را برطرف کند منتشر نشده است؛ یعنی نیوک ۸٫۲ امروز یک نرم‌افزار مرده است، نه نرم‌افزاری قدیمی که بشود با چند اصلاح سرِ پا نگهش داشت.

ماجرای متغیر gfx_chk دقیقاً چه بود

برای ثبت در تاریخ، توضیح فنی آن دوران درست بود: نمایش کد امنیتی در نیوک با متغیر $gfx_chk در فایل config.php کنترل می‌شد. مقدار 0 یعنی کپچا در هیچ فرمی نمایش داده نشود و مقدار 7 یعنی در همهٔ فرم‌ها از جمله ورود مدیر و ورود کاربران فعال باشد. وقتی کپچا خراب نمایش داده می‌شد، معمولاً ریشهٔ ماجرا نبودِ افزونهٔ GD در PHP یا در دسترس نبودن فایل فونت بود.

مشکل اینجاست که راه‌حل رایجی که سال‌ها تکرار می‌شد — یعنی صفر کردن $gfx_chk — در واقع کپچای صفحهٔ ورود مدیر را خاموش می‌کند. نتیجه این است که یک پنل مدیریت با آسیب‌پذیری‌های عمومی، بدون هیچ سدی در برابر حملهٔ رمز‌آزمایی (brute force) روی اینترنت باز می‌ماند. این «رفع مشکل» نیست؛ برداشتن آخرین لایهٔ محافظ است.

چرا نیوک روی سرور امروزی اصلاً بالا نمی‌آید

حتی اگر بحث امنیت را کنار بگذارید، نیوک ۸٫۲ با PHP امروزی سازگار نیست. این کد بر پایهٔ توابع mysql_* نوشته شده که از PHP 7 به‌طور کامل حذف شدند، به رفتار register_globals وابسته است که مدت‌ها پیش برداشته شد، و از توابع ereg استفاده می‌کند که دیگر وجود ندارند. روی PHP 8 نتیجه یک خطای مرگبار است، نه یک کپچای خراب.

تنها راهی که سایت را «بالا» می‌آورد، پایین بردن نسخهٔ PHP به نسخه‌ای پایان‌عمر است که خودش دیگر وصلهٔ امنیتی نمی‌گیرد؛ یعنی برای زنده نگه‌داشتن نرم‌افزاری وصله‌نشده، مفسر وصله‌نشده هم زیرش بگذارید. روی یک هاست لینوکس ایران که به‌روز نگه داشته می‌شود، چنین ترکیبی پیکربندی سالمی نیست.

چطور بفهمید سایتی که تحویل گرفته‌اید نیوک است

اگر مدیریت سایتی را از کسی تحویل گرفته‌اید و مطمئن نیستید روی چه سیستمی کار می‌کند، این نشانه‌ها تقریباً قطعی هستند:

  • آدرس‌ها به شکل modules.php?name=News&file=article&sid=12 هستند و صفحهٔ ورود مدیر admin.php است.
  • در ریشهٔ سایت فایل‌های mainfile.php و config.php و پوشه‌های modules/ و blocks/ دیده می‌شوند.
  • در config.php متغیرهایی مثل $dbhost و $prefix تعریف شده‌اند و جدول‌های دیتابیس با پیشوند nuke_ شروع می‌شوند.
  • در پاورقی قالب عبارت Powered by PHP-Nuke باقی مانده است.

برای ارزیابی بیرونی و سریع گواهی SSL، هدرهای امنیتی و رندر صفحه هم می‌توانید از سرویس رایگان بررسی سلامت سایت کمک بگیرید؛ این ابزار فقط چیزی را می‌بیند که کاربر و موتور جستجو می‌بینند و جایگزین بازرسی فایل‌های سرور نیست.

ریسک واقعی نگه‌داشتن یک سایت نیوک

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

مسیرهای واقع‌بینانهٔ مهاجرت

سه مسیر عملی وجود دارد و انتخاب بین آن‌ها به نوع محتوای سایت بستگی دارد:

  • وردپرس — طبیعی‌ترین مقصد برای سایت‌های خبری و پورتال‌های محتوایی که ساختارشان با نیوک هم‌خانواده است. اکوسیستم افزونه و قالب فارسی گسترده‌ای دارد و برای اجرای آن هاست وردپرس با کنترل‌پنل cPanel کافی است.
  • جوملا — اگر سایت شما سطح‌بندی دسترسی پیچیده، چند زبانه بودن یا ساختار مدیریت کاربران سنگین دارد، نسخه‌های امروزی جوملا (شاخهٔ ۵ به بعد) گزینهٔ نزدیک‌تری هستند.
  • سایت استاتیک — اگر محتوا دیگر به‌روز نمی‌شود و فقط باید آرشیو بماند، بهترین کار تولید نسخهٔ HTML ثابت و کنار گذاشتن کامل PHP و دیتابیس است. این گزینه سطح حملهٔ سایت را عملاً به صفر می‌رساند.

پیش از مهاجرت این موارد را برنامه‌ریزی کنید

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

  • استخراج محتوا: مطالب معمولاً در جدول‌هایی با پیشوند nuke_ نشسته‌اند. یک SELECT ساده و تبدیل به CSV یا XML معمولاً سریع‌تر از هر مبدل آماده جواب می‌دهد.
  • نقشهٔ آدرس‌ها و ریدایرکت: برای هر آدرس قدیمی مثل modules.php?name=News&file=article&sid=12 باید یک ریدایرکت دائمی 301 به نشانی جدید تعریف شود، وگرنه رتبه و بک‌لینک‌های سایت را از دست می‌دهید.
  • کاربران و رمزها: رمزهای نیوک با الگوریتم‌های منسوخ ذخیره شده‌اند. آن‌ها را منتقل نکنید؛ به همهٔ کاربران فرآیند بازنشانی رمز بدهید.
  • تصاویر و پیوست‌ها: این‌ها معمولاً بیرون از دیتابیس و در پوشه‌هایی مثل images/ هستند و باید جداگانه کپی و مسیرشان در متن اصلاح شود.
  • ترتیب سوییچ: سایت جدید را روی یک دامنهٔ آزمایشی کامل کنید، سپس رکورد DNS را جابه‌جا کنید. سایت قدیمی را تا اطمینان از صحت مهاجرت نگه دارید، اما از دسترس عمومی خارج کنید.

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

جمع‌بندی

اگر امروز دنبال رفع مشکل کد امنیتی ورود مدیریت نیوک ۸٫۲ هستید، پاسخ صادقانه این است: خودِ نیوک مشکل است، نه کپچای آن. متغیر $gfx_chk را دستکاری نکنید و به‌ویژه آن را صفر نکنید. به‌جای آن سایت را شناسایی کنید، از فایل‌ها و دیتابیس نسخهٔ پشتیبان بگیرید، مسیر مهاجرت را انتخاب کنید و پنل مدیریت قدیمی را تا زمان جابه‌جایی از دسترس عمومی خارج نگه دارید.