ثبت‌نام ورود

مشکل امنیتی وردپرس در تمام نسخه ها! حل کنید مشکل را

مشکل امنیتی وردپرس

طبق گفته ی متخصصان وردپرس، این پلت فرم 29% از وبسایت های اینترنتی جهان را میزبانی می کند. منظور این مقاله٬ ایجاد هر وبسایت وردپرس بصورت آنلاین هست و کاری با وردپرس های نصب شده در لوکال هاست سازمان ها و سیستم های شخصی نداریم! حالا یک مشکل امنیتی بوجود آمده. این مشکل از طریق Denial of Service صورت می پذیرد. Denial of Service به این معنی وارد کردن تقاضاهای زیادی به سرور هست و امروز بحث این نیست که چگونه وبسایت وردپرس خود را از هک شدن دور کنیم و امنیت را بالا ببریم. بحث امروز ما رفع مشکل امنیتی وردپرس هست.

بروزرسانی: این مشکل در نسخه جدید وردپرس برطرف شد.

۲۹ درصد از سایت های دنیا مشکل امنیت دارند!

به دلیل overload شدن یا حجم زیاد پردازش کننده عملیات سرور در یک بازه زمانی به صورت پی در پی توسط رایانه های مختلف حالا بصورت خواسته یا ناخواسته٬ سرور سایت شما ممکن است با مشکل مواجه شود. چون حجم اطلاعات زیاد هست در واقع میزان لود سرور سایت شما افزایش پیدا کرده و اصطلاحا می گوییم سرور Down شده.

توجه داشته باشید که ورود به مسائل امنیتی وبسایت ها غیر قانونی بوده و در صورتی که مدیر وبسایت این اجازه را به شما دهد می توانید وارد مسائل امنیتی یک سایت شوید. در واقع این کار (هک یا اعمال فشار روی یک سایت) با انگیزه های متفاوت توسط گروهی از افراد صورت می پذیرد. اهداف این دسته از گروه ها ممکن است متفاوت باشد مثلاً برای از سر راه برداشتن رقیبان در وبسایت های مختلف. در هر صورت بهتر است برای جلوگیری از این حمله ها راه های پیشگیری را بدانید.

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

https://siteshoma.com/wp-admin/load-scripts.php?c=1&load=jquery-ui-core

فایل load-scripts.php یک پارامتر به نام load [] دریافت می کند، مقدار پارامتر jquery-ui-core است. در پاسخ درخواست “JQuery UI Core” JS module را دریافت می کنیم. مانند تصویر زیر:

فایل load وردپرس

حالا این مشکل امنیتی وردپرس چی هست؟

از این url می توان نتیجه گرفت که احتمالا این ادرس برای ایجاد فایل و خروجی برخی از ماژول های js است. علاوه بر این پارامتر [] یک آرایه است.که امکان ارائه مقادیر متعدد و قادر به دریافت ماژول های js می باشد. همانطور که وردپرس یک منبع باز است و باز بینی کدها و بررسی این ویژگی ها آسان هست. از این ویژگی می‌توان برای صرفه جویی برای مقدار درخواست ارسال شده از سرویس گیرنده در هنگام بارگذاری فایل های JS یا CSS استفاده کرد.

بنابراین هنگامی که مرورگر نیاز به بارگذاری چند فایل JS / CSS دارد، از کد اسکریپت (php) برای JS استفاده می شود. برای سریعتر کارکردن پنل مدیریت وردپرس بهتر هست همه فایل های js و سی اس اس توسط این فایل بصورت همزمان اجرا شود پس ایجاد این فایل در وردپرس چندان هم بی‌خود و بی جهت نبوده.

حالا مشکل اینجاست که این مقدار می تواند حدود ۱۸۱ متغیر را در خود جای دهد! لیست متغیر ها:

eutil,common,wp-a11y,sack,quicktag,colorpicker,editor,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check,wp-lists,prototype,scriptaculous-root,scriptaculous-builder,scriptaculous-dragdrop,scriptaculous-effects,scriptaculous-slider,scriptaculous-sound,scriptaculous-controls,scriptaculous,cropper,jquery,jquery-core,jquery-migrate,jquery-ui-core,jquery-effects-core,jquery-effects-blind,jquery-effects-bounce,jquery-effects-clip,jquery-effects-drop,jquery-effects-explode,jquery-effects-fade,jquery-effects-fold,jquery-effects-highlight,jquery-effects-puff,jquery-effects-pulsate,jquery-effects-scale,jquery-effects-shake,jquery-effects-size,jquery-effects-slide,jquery-effects-transfer,jquery-ui-accordion,jquery-ui-autocomplete,jquery-ui-button,jquery-ui-datepicker,jquery-ui-dialog,jquery-ui-draggable,jquery-ui-droppable,jquery-ui-menu,jquery-ui-mouse,jquery-ui-position,jquery-ui-progressbar,jquery-ui-resizable,jquery-ui-selectable,jquery-ui-selectmenu,jquery-ui-slider,jquery-ui-sortable,jquery-ui-spinner,jquery-ui-tabs,jquery-ui-tooltip,jquery-ui-widget,jquery-form,jquery-color,schedule,jquery-query,jquery-serialize-object,jquery-hotkeys,jquery-table-hotkeys,jquery-touch-punch,suggest,imagesloaded,masonry,jquery-masonry,thickbox,jcrop,swfobject,moxiejs,plupload,plupload-handlers,wp-plupload,swfupload,swfupload-all,swfupload-handlers,comment-repl,json2,underscore,backbone,wp-util,wp-sanitize,wp-backbone,revisions,imgareaselect,mediaelement,mediaelement-core,mediaelement-migrat,mediaelement-vimeo,wp-mediaelement,wp-codemirror,csslint,jshint,esprima,jsonlint,htmlhint,htmlhint-kses,code-editor,wp-theme-plugin-editor,wp-playlist,zxcvbn-async,password-strength-meter,user-profile,language-chooser,user-suggest,admin-ba,wplink,wpdialogs,word-coun,media-upload,hoverIntent,customize-base,customize-loader,customize-preview,customize-models,customize-views,customize-controls,customize-selective-refresh,customize-widgets,customize-preview-widgets,customize-nav-menus,customize-preview-nav-menus,wp-custom-header,accordion,shortcode,media-models,wp-embe,media-views,media-editor,media-audiovideo,mce-view,wp-api,admin-tags,admin-comments,xfn,postbox,tags-box,tags-suggest,post,editor-expand,link,comment,admin-gallery,admin-widgets,media-widgets,media-audio-widget,media-image-widget,media-gallery-widget,media-video-widget,text-widgets,custom-html-widgets,theme,inline-edit-post,inline-edit-tax,plugin-install,updates,farbtastic,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter

اگر هنوز هم به عمق فاجعه پی نبرده اید٬ فیلم آموزشی رو ببینید تا متوجه این موضوع بشید.

پس یک هکر نه چندان حرفه ای هم می تواند با چندبار reload کردن صفحه سایت شما را زیر فشار Dos قرار دهید و سایتتان را Down کند. به همین راحتی!

حالا چطور مشکل را حل کنیم؟

اگر سرور سایت دست شماست و دسترسی مستقیم به سرور سایتتان دارید. فیلم آموزشی بالای صفحه را ببینید و به راحتی مشکلتان را حل کنید.

این هم کدی که در فیلم آموزشی به فایل reza.sh اضافه کردم:

#! /bin/bash

if [[ -f wp-login.php && -f wp-admin/load-scripts.php && -f wp-admin/includes/noop.php ]]
then
        sed -i "1 s/^.*$/<?php\ndefine('CONCATENATE_SCRIPTS', false);/" wp-login.php
        sed -i -e "s/^require( ABSPATH . WPINC . '\/script-loader.php' );$/require( ABSPATH . 'wp-admin\/admin.php' );/g" wp-admin/load-scripts.php
        sed -i -e "s/^require( ABSPATH . WPINC . '\/script-loader.php' );$/require( ABSPATH . 'wp-admin\/admin.php' );/g" wp-admin/load-styles.php
        echo """<?php
/**
* Noop functions for load-scripts.php and load-styles.php.
*
* @package WordPress
* @subpackage Administration
* @since 4.4.0
*/
function get_file( \$path ) {
        if ( function_exists('realpath') ) {
                \$path = realpath( \$path );
        }
        if ( ! \$path || ! @is_file( \$path ) ) {
                return '';
        }
        return @file_get_contents( \$path );    
}""" > wp-admin/includes/noop.php
 echo 'Successfuly patched.'
else
        echo 'Please run this file from WordPress root directory.'
fi

و نحوه کار با این کدها و قراردادن آن در سایتتان را در فیلم ببینید.

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

موفق و پیروز و سربلند و متخصص امنیت وردپرس باشید 😀

نظر یا سوال شما در این مورد چیست؟

  1. کاربر مهمان ۲۳ خرداد ۱۳۹۸

    با سلام و احترام
    امروز 23 خرداد 98 هست خواستم بپرسم آیا این باگ فیکس شده یا همچنان این مشکل وجود داره؟
    ممنون میشم پاسخ بدید
    با تشکر

  2. کاربر مهمان ۰۶ شهریور ۱۳۹۷

    بسیار مفید بود جناب مهندس

  3. کاربر مهمان ۲۹ تیر ۱۳۹۷

    سلام اگه امکان داره در مورد فایروال سرور بیشتر توضیح بدید

  4. U12577 ۰۵ تیر ۱۳۹۷

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

  5. U12577 ۰۳ تیر ۱۳۹۷

    باسلام. با توجه به تاریخ این پست و بعد از آن آپدیت شدن وردپرس به نسخه جدید این آپدیت مشکل رو حل کرده؟
    چرا خود وردپرس این مشکل رو که 29 درصد سایتها رو تهدید میکنه تا حالا برطرف نکرده؟
    باتشکر.

  6. کاربر مهمان ۰۷ خرداد ۱۳۹۷

    سلام
    وقت بخیر
    اگه مشکل امنیتیه چرا برای سایت خودتون برطرفش نکردید!!!؟؟؟

  7. U11218 ۰۶ اردیبهشت ۱۳۹۷

    سلام
    در فیلم های آموزشیتان ، با چه نرم افزاری از دسکتاپ فیلم ضبط می کنید ؟

  8. U11168 ۲۵ فروردین ۱۳۹۷

    همه این کارها را انجام دادم ولی باز هم مشکل وجود داره
    فایل را دانلود کده و آپدیت نمودم

  9. U11168 ۲۲ فروردین ۱۳۹۷

    من از افزونه افزونه امنیتی وردپرس و فایروال استفاده میکنم ایا نیازی به این کار بود

    تازه من این فایل دانلودی شما رو دانلود کردم و در هاست جایگزین کردم
    وقتی وارد ادمین میشم هیچ درخواستی رو نداده

    انتها
    اینو نوشته
    شما در حال استفاده از یک نگارش در حال توسعه (5.0-alpha-42964) می‌باشید٬ ایول!

    ولی هیچ تاثیری هم نداشته و باز هکر میتونه کار خودشو انجام بده

  10. کاربر مهمان ۱۴ فروردین ۱۳۹۷

    من روی لوکال تست کردم نشد …. به هر حال ممنون

  11. کاربر مهمان ۱۳ فروردین ۱۳۹۷

    سلام
    فایل شما را گذاشتم به جای فایل اصلی ورد پرس ولی هیچ فرقی نکرد . شما خودتون فایل را تست کردین ؟

  12. U6057 ۱۰ فروردین ۱۳۹۷

    بنظرم بجای این کارها بهتره برید در خط اول فایل “load-scripts.php” بعد از 20) exit;
    در این کد گفته شده اگر تعداد متغیرها بیشتر از 20 تا شد عملیات کنسل بشه این عدد قابل تغییر است.

  13. U7655 ۲۴ اسفند ۱۳۹۶

    سلام
    حتما باید با لینوکس مشکلو حل کرد با ویندوز نمی شه

  14. کاربر مهمان ۲۰ اسفند ۱۳۹۶

    افزونه all-in-one-wp-security-and-firewall رو معرفی کنید راحت
    https://wordpress.org/support/topic/load-scriptphp-fails-to-load/?replies=3

  15. کاربر مهمان ۱۶ اسفند ۱۳۹۶

    سلام. سایت خودتونم که هنوز همین مشکل رو داره D:

    • رضا حسینی راد رضا حسینی راد ۱۷ اسفند ۱۳۹۶

      سلام سایت ما از روش دیگه ای مشکل رو حل کرده. از طریق فایروال سرور 😀 سه بار درخواست رو بفرستید و نتیجه رو ببینید. 🙂 آی پی شما سریع بلاک میشه

  16. U1814 ۱۲ اسفند ۱۳۹۶

    جالب بود.اما نیاز به این همه اب و تاب نداشت به نظر من
    خیلی راحت میشه با password protect directory یا محدود کردن بخش ادمین به ip این مورد رو رفع کرد
    ما هیچ مشکلی نداریم با این موضوع چون اصلا اجازه لود این فایل رو نمیدیم و تمام

    • رضا حسینی راد رضا حسینی راد ۱۲ اسفند ۱۳۹۶

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

      • U1814 ۱۲ اسفند ۱۳۹۶

        سلام استاد
        شما که فرمودید بنده هم به شک افتادم که نکنه کاربر ها مشکلی داشته باشند
        اما چک کردم موردی نیست برای لاگین کردن کاربران سایت از بابت password protect directory

        • رضا حسینی راد رضا حسینی راد ۱۲ اسفند ۱۳۹۶

          در یک صورت مشکلی نیست. اینکه از افزونه هایی مثل یوزر پرو یا theme mylogin استفاده کنید برای ورود کاربر از محیط سایت نه از طریق wp-login.php

  17. U11318 ۱۱ اسفند ۱۳۹۶

    سلام
    ممنون
    توی وردپرسی که گذاشتید کدوم فایل ها دقیقا تغییر داشته که همون ها رو کپی کنیم رو هاست؟

    • رضا حسینی راد رضا حسینی راد ۱۱ اسفند ۱۳۹۶

      سلام متشکرم
      فایل noodp و یه سری فایل دیگه. بهتره با winmegre ادغام کنید دقیقتر فایل ها رو

  18. U11168 ۱۰ اسفند ۱۳۹۶

    با سلام
    من به هاستم دسترسی دارم سی پنل
    یک فایل درسنت کنم و این کدهای معرفی شده رو درون فایل بریزم ایا اسم فایل مهمه چی باشه
    بعد در روت هاست بریززم کنار فایل های وردپرس

    • رضا حسینی راد رضا حسینی راد ۱۱ اسفند ۱۳۹۶

      درود خیر امکانش نیست باید به ssh دسترسی داشته باشید

      • U11168 ۱۴ اسفند ۱۳۹۶

        من هاست اشتراکی دارم یعنی فقط سی پنل و اختصاصی ندارم برای جلوگیری فایل شما را قرار بدم کافیه

        • رضا حسینی راد رضا حسینی راد ۱۴ اسفند ۱۳۹۶

          درود بله نیازی به انجام مراحل اولیه کار نیست

          • U11168 ۱۴ اسفند ۱۳۹۶

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

            • رضا حسینی راد رضا حسینی راد ۱۵ اسفند ۱۳۹۶

              درود با نرم افزار minmerge مقایسه کنید و تغییرات رو اعمال کنید روی وردپرس جدید

  19. U557 ۱۰ اسفند ۱۳۹۶

    از کجا متوجه شیم که این مشکل برای سایت ما دیگه بوجود نمیاد ؟

  20. U557 ۱۰ اسفند ۱۳۹۶

    پایین در قسمت پیشخوان این جمله رو نوشته:
    شما در حال استفاده از یک نگارش در حال توسعه (5.0-alpha-42619) می‌باشید
    آپدیت دیگه نکنیم تا مشکلش رو وردپرس حل کنه؟

  21. کاربر مهمان ۱۰ اسفند ۱۳۹۶

    سلام
    ممنون آموزش بسیار کاربردی بود. دمتون گرم .