محافظت از اسکریپت های PHP در برابر تجزیه و تحلیل و اصلاح. فراموش نکنید که کلیدهای مخفی کوکی خود را تغییر دهید

همه محصولات نرم افزاری برای محافظت از اسکریپت های PHP به دو دسته تقسیم می شوند: آنهایی که نیاز به نصب ماژول های اضافی روی سرور دارند و با پیکربندی معمول وب سرورها کار می کنند. اولی ها از نظر امنیت قابل اعتمادتر هستند، زیرا اسکریپت های PHP را از یک فرم متنی به یک کد باینری خاص ترجمه می کنند، اما نیاز به دسترسی به سرور با حقوق مدیر دارند. دومی می تواند تقریباً روی همه هاست ها با پشتیبانی PHP کار کند، از جمله موارد رایگان، اما هک کردن آنها چندان دشوار نیست. کد منبعی که از رمزگذاری یا فشرده سازی استفاده نمی کند را می توان به یک زیر گروه جداگانه تقسیم کرد.

حفاظت در سطح سرور:

Zend Encoder / Zend SafeGuard Suite محبوب‌ترین حفاظت تجاری است، ماژول‌های پشتیبانی Zend معمولاً بر روی همه هاست‌های پولی نصب می‌شوند. Zend اسکریپت نویسی دامنه و IP، زمان بندی اسکریپت آزمایشی و مبهم سازی قدرتمند را ارائه می دهد. همه سیستم عامل ها پشتیبانی می شوند. در حوزه عمومی، چندین گزینه برای برنامه های حذف Zend وجود دارد، همه آنها نسخه های PHP 4 و 5 اصلاح شده هستند. نسخه های قدیمی Zend بدون مشکل حذف می شوند، در دومی مشکلاتی به دلیل مبهم بودن کد منبع وجود دارد.

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

حفاظت تجاری عملاً یافت نمی شود، روی هاست مجازی نصب نمی شود. به شما امکان می دهد یک دوره آزمایشی برای عملکرد اسکریپت ها با بررسی تاریخ در سرورهای زمان خارجی، اتصال اسکریپت های محافظت شده به سرورها، آدرس IP، آدرس MAC کارت شبکه تنظیم کنید و از این داده ها برای رمزگشایی استفاده می شود. همه سیستم عامل ها پشتیبانی می شوند. هیچ رمزگشای عمومی وجود ندارد.

phpSHIELD. SourceGuardian برای نمونه اولیه PHP. پس از ادغام این دو توسعه دهنده، توسعه آن به عنوان یک محصول مستقل متوقف شد. عملکرد اصلی یکسان است، هیچ رمزگشای عمومی وجود ندارد.

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

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

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

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

یک افزونه منبع باز برای شتاب دهنده های قدیمی php Turck MMCache و eAccelerator. اسکریپت ها را به بایت کد تبدیل می کند تا سرعت اجرای آنها را افزایش دهد. نسخه هایی از ماژول ها برای ویندوز و لینوکس وجود دارد. هیچ رمزگشای عمومی وجود ندارد، اما شاید کد منبع باز پروژه به نوعی به مطالعه کمک کند.

حفاظت در سطح منبع:

PHP LockIt! ... حفاظت تجاری محبوب، بسیار رایج است، عمدتاً در اسکریپت های توسعه دهندگان خارجی. به شما امکان می دهد یک دوره آزمایشی برای عملکرد اسکریپت ها، اتصال به دامنه ها و آدرس های IP، فشرده سازی اسکریپت ها با استفاده از ابزارهای استاندارد php (gzinflate) تنظیم کنید. تنها بخش مشکل، یک مبهم کننده خوب است. نسخه های مختلف حفاظت فقط در اصلاح ماژول باز کردن بسته بندی متفاوت هستند. به راحتی در دو حالت دستی و اتوماتیک قابل جابجایی است. بدون مبهم، دقیقاً به کد منبع حذف می شود، با یک مبهم کننده، نیاز به پردازش اضافی دارد.

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

PHPCipher. حفاظت یک سرویس آنلاین است. یک بایگانی با اسکریپت های شما در سایت آپلود می شود و آرشیو از قبل محافظت شده دوباره دانلود می شود. مجوز پولی به شما امکان می دهد اسکریپت های محافظت شده را با داده های خود امضا کنید و از آن برای مقاصد تجاری استفاده کنید. مجوز رایگان فقط برای استفاده شخصی اجازه می دهد. حفاظت خود یک ماژول php محافظت شده توسط Zend است که به اسکریپت های محافظت شده متصل می شود.پس از deZend، ماژول حفاظتی و به دست آوردن تمام ثابت های لازم از آن به طور کامل به کد منبع حذف می شود. هیچ عملکرد مبهم وجود ندارد.

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

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

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

TrueBug PHP Encoder، اخیراً TrueBug PHP Obfuscator & Encoder. یک مسیر بسیار جالب برای کشف. قبل از نسخه 1.0.2، ابزارهای استاندارد php برای فشرده سازی gzip استفاده می شد، از نسخه 1.0.3 نویسندگان الگوریتم فشرده سازی خود را توسعه داده اند. محصول جدید TrueBug PHP Obfuscator & Encoder عملکرد مبهم سازی و بهینه سازی کد منبع را اضافه می کند. تنها نقطه ضعف حفاظت، الگوریتم رمزگشایی متغیر اسکریپت است، اما خود الگوریتم برای هر نسخه از حفاظت تغییر می کند. پس از تجزیه، حفاظت به راحتی دقیقاً از کد منبع حذف می شود، البته به شرطی که از مبهم استفاده نشده باشد.

زورکس PHP CryptZ. Protection مانند CodeLock یک برنامه php است و برای کار کردن به پایگاه داده MySQL نیاز دارد. ماژول حفاظتی یک پلاگین اسکریپت php است که در چندین لایه رمزگذاری شده است. پس از تجزیه و تحلیل، الگوریتم به راحتی به کد منبع حذف می شود. هیچ عملکرد مبهم وجود ندارد.

رمزگذار PHP رایگان. سرویس آنلاین رایگان برای کدنویسی اسکریپت های php. ماژول حفاظت یک پلاگین php-اسکریپت تحت پوشش Zend است که باید از سایت دانلود شود.پس از حذف Zend و تجزیه الگوریتم، حفاظت به راحتی به طور کامل به کد منبع حذف می شود. الگوریتم حفاظت بدون تغییر است، هیچ عملکرد مبهم وجود ندارد.

اسکریپت Php، رمزگذاری اولیه، استاندارد base64. سزاوار توجه بیشتر نیست و هیچ علاقه عملی ندارد.

ما به جای wp-signup.php استاندارد، صفحه ثبت نام خود را برای چند سایت ایجاد می کنیم.

در یک نصب معمولی وردپرس، صفحه ثبت نام (ورود به سیستم، تنظیم مجدد رمز عبور) فایل wp-login.php را نمایش می دهد.

  • /wp-login.php - مجوز
  • /wp-login.php?action=register - ثبت نام
  • /wp-login.php?action=lostpassword - رمز عبور را بازنشانی کنید

شرایط جداگانه ای برای multisite در wp-login.php وجود دارد. بنابراین، وقتی روی پیوند /wp-login.php?action=register در یک سایت چندگانه کلیک می کنید، وردپرس به صفحه /wp-signup.php هدایت می شود. در بسیاری از تم ها، صفحه چندان جذاب به نظر نمی رسد، بنابراین ما خودمان را می سازیم.

سایت اصلی شبکه

به طور پیش فرض، وردپرس یک صفحه ثبت نام (wp-signup.php) را در دامنه اصلی (سایت) شبکه باز می کند. با این حال، می توانید برای هر سایتی در شبکه یک صفحه ثبت نام جداگانه ایجاد کنید، حتی اگر آنها تم های متفاوتی داشته باشند. ما موردی را در نظر می گیریم که همه سایت های موجود در شبکه صفحه ثبت نام خود را داشته باشند، اما از یک موضوع استفاده شود و سایت ها فقط از نظر زبان متفاوت باشند. اگر از تم های مختلف استفاده می کنید، باید کد بیشتری بنویسید.

functions.php؟

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

انحراف غزلی

شایان ذکر است که افزونه های MU زودتر از افزونه های معمولی و قبل از بارگذاری کامل هسته وردپرس بارگذاری می شوند، بنابراین فراخوانی برخی از توابع می تواند منجر به خطاهای مرگبار در PHP شود. این بارگذاری "زود" مزایای خود را نیز دارد. به عنوان مثال، در داخل هر تم، نمی‌توانید به برخی از اقداماتی که حتی قبل از بارگیری فایل functions.php از درون زمینه انجام می‌شوند، بچسبید. نمونه ای از این اقدامات از افزونه Jetpack از فرم jetpack_module_loaded_related-posts (related-posts - نام ماژول) است که با آن می توان فعالیت ماژول ها را در Jetpack ردیابی کرد. "چسبیدن" به این عمل از فایل تم غیرممکن است، زیرا این عمل قبلاً قبل از بارگیری موضوع فعال شده است - افزونه ها قبل از تم بارگیری می شوند. شما می توانید به یک تصویر کلی از ترتیب بارگذاری وردپرس در صفحه Action Reference در کدکس نگاهی بیندازید.

سفارش فایل

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

| -mu-plugins | - | -load.php | - | - | -selena-network | - | - | - | - ثبت نام | - | - | - | - | -plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | -plugin.php

تمام "پلاگین های" لازم برای شبکه ما در فایل load.php متصل شده اند:

// بارگیری ترجمه‌ها برای همه افزونه‌ها load_muplugin_textdomain ("selena_network"، "/ selena-network / languages ​​/"); // ثبت نام شبکه به WPMU_PLUGIN_DIR نیاز دارد. "/selena-network/signup/plugin.php"؛ // افزونه های دیگر // به WPMU_PLUGIN_DIR نیاز دارند ...

پوشه های پلاگین در داخل پوشه selena-network ذخیره می شوند، هر کدام plugin.php خود را دارند که در load.php قرار می دهیم. این به شما انعطاف پذیری و توانایی سریع خاموش و روشن کردن همه چیز را می دهد.

آدرس صفحه ثبت نام

برای تعیین آدرس صفحه ثبت نام از فیلتر wp_signup_location استفاده می شود. می توان آن را در داخل فایل wp-login.php یافت و مسئول هدایت مجدد به wp-signup.php است.

مورد "رجیستر": اگر (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location"، network_site_url ("wp-signup.php")))؛ خروج.

بیایید تابع خود را به mu-plugins / selena-network / signup / plugin.php اضافه کنیم، که آدرس صفحه ثبت نام در سایت فعلی را برمی گرداند:

تابع selena_network_signup_page ($ url) (return home_url (). "/ Signup /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network پیشوندی است که من در نام تمام توابع داخل افزونه های MU در سایت خود استفاده می کنم تا از برخورد جلوگیری کنم، باید با پیشوند منحصر به فرد خودم جایگزین شود. این فیلتر دارای اولویت 99 است زیرا برخی از افزونه‌ها مانند bbPress و BuddyPress ممکن است این URL را با خود بازنویسی کنند (افزونه‌های MU زودتر از افزونه‌های معمولی بارگیری می‌شوند، به بالا مراجعه کنید). توجه داشته باشید که home_url () به جای network_site_url () برای نگه داشتن بازدید کننده در همان دامنه استفاده می شود. هر URL می تواند به عنوان آدرس استفاده شود.

یک صفحه ایجاد کنید

حالا بیایید از طریق رابط معمولی صفحه ای با آدرس site.com/signup/ ایجاد کنیم و در پوشه child theme، قالب صفحه جدید ما page-signup.php است. به جای کلمه "ثبت نام" می توان از یک شناسه منحصر به فرد استفاده کرد.

در داخل قالب جدید، باید تابع selena_network_signup_main () را فراخوانی کنید که فرم ثبت نام را نمایش می دهد.

لازم به ذکر است که کل فرآیند با قالب ها مورد نیاز نیست و در عوض می توانید کد کوتاه خود را ایجاد کنید که تابع selena_network_signup_main () را نیز فراخوانی می کند.

wp-signup.php و wp-activate.php

حالا بیایید شروع به ایجاد یک تابع کنیم که فرم ثبت نام را نمایش دهد. برای انجام این کار، فایل های wp-signup.php و wp-activate.php را از ریشه وردپرس به mu-plugings / selena-network / signup / کپی کنید (و فراموش نکنید که آنها را داخل mu-plugins / selena-network متصل کنید. / ثبت نام / plugin.php) ... دستکاری های بیشتر با فایل ها بسیار دشوار و زمان بر است، بنابراین باید خودتان آنها را انجام دهید. من فقط توضیح می دهم که دقیقاً چه کاری باید انجام شود و فایل های منبع پروژه خود را منتشر می کنم:

  1. در ابتدای فایل، تمام نیازها، فراخوانی های تابع و سایر کدهای خارج از توابع را حذف کنید.
  2. با افزودن پیشوندهای منحصر به فرد به نام ها، نام همه توابع را تغییر دهید.
  3. قسمت پایین کد wp-signup.php را در تابع selena_network_signup_main بپیچید و در همان ابتدا جهانی $ active_signup را بنویسید. ...
  4. در مکان های مناسب طرح را با طرح خود جایگزین کنید.

در داخل wp-activate.php، باید تقریباً همین کار را انجام دهید:

  1. تمام کدهای خارج از توابع را حذف کنید، طرح بندی را در یک تابع جداگانه قرار دهید.
  2. در صورت لزوم طرح را تغییر دهید.

فایل wp-activate.php مسئولیت صفحه فعال سازی حساب را بر عهده دارد. همانند صفحه ثبت نام، باید یک قالب جداگانه برای آن ایجاد کنید که در داخل آن تابع را از فایل wp-activate.php فراخوانی کنید.

ما نامه های فعال سازی ارسال می کنیم

صفحه ثبت نام برای بازدیدکننده یک ایمیل با لینک فعال کردن حساب خود ارسال می کند. به طور پیش فرض، این کار توسط تابع wpmu_signup_user_notification () از فایل ms-functions.php انجام می شود. عملکرد آن را می توان برای عملکرد شما قرض گرفت. دلیل توقف استفاده از این ویژگی این است که لینک فعال سازی حساب را از wp-activate.php ارسال می کند. می توانید با استفاده از فیلتر wpmu_signup_user_notification، این تابع را "غیرفعال کنید" و به آن false بدهید (اگر این کار را انجام ندهید، نامه فعال سازی دو بار ارسال می شود، خوب، در واقع دو حرف مختلف).

تابع Armofselenagomez_wpmu_signup_user_notification ($ user، $ user_email، $ key، $ meta = آرایه ()) (// ... // کد از تابع wpmu_signup_user_notification () wp_mail ($ user_email، wp_specialchars_decode)، $ message، $ message بازگشت نادرست؛) add_filter ("wpmu_signup_user_notification"، "armyofselenagomez_wpmu_signup_user_notification"، 10، 4);

در نتیجه، صفحه ثبت نام در تم سلنا بسیار تمیزتر و دقیق تر به نظر می رسد.

نتیجه

بسیاری از راه های نه چندان صحیح دیگر برای انجام همین کار در اینترنت وجود دارد - تغییر مسیرهای آپاچی، فرم های AJAX که بدون جاوا اسکریپت کار نمی کنند و غیره وب سایت خود.

توجه داشته باشید که باید فایل ها را با دقت ویرایش کنید و سعی کنید زیاد از نسخه اصلی منحرف نشوید تا در آینده اگر وردپرس فایل های wp-signup.php و wp-activate.php را تغییر داد، مقایسه آنها برای یافتن آسان تر باشد. تغییر می کند.

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

جایزه. حفاظت از هرزنامه

حتی کوچکترین سایت های وردپرسی در معرض ثبت نام مکرر هرزنامه هستند. می‌توانید شرایط بی‌پایانی را برای فیلتر کردن ربات‌ها بنویسید، اغلب بیشتر شبیه تلاش برای ایجاد هوش مصنوعی. acitvate.php، من 404 را درخواست کردم (من در تنظیمات آپاچی متخصص نیستم، بنابراین قوانین من ممکن است خیلی درست نباشند).

RewriteEngine در RewriteBase / RewriteRule ^ wp-signup \ .php - RewriteRule ^ wp-activate \ .php - # BEGIN WordPress # به طور پیش فرض قوانین وردپرس را لمس نکنید :) # ... # END WordPress

P. S. من سعی می کنم تا آنجا که ممکن است برخی از چیزهای شخص ثالث را با جزئیات توصیف کنم، زیرا وقتی شروع کردم، گاهی اوقات کسی نبود که خیلی چیزها را تلقین کند و توضیح دهد. من همچنین معتقدم که چنین نکات کوچکی در مورد سایر مواد باعث می شود کسی چیز جدیدی بیاموزد و حوزه دانش خود را گسترش دهد. عبارات منظم در ورودی های RewriteRule استفاده می شود، آنها اصلا پیچیده نیستند، به عنوان مثال، کاراکتر ^ به معنای ابتدای یک خط است.

"آنها وب سایت های بانک ها را برای پول می شکنند، پنتاگون را برای جاسوسی، و هیچ کس به پروژه من نیاز ندارد"، متأسفانه، این همان چیزی است که اکثر صاحبان وبلاگ های شخصی، کارت های ویزیت اینترنتی، دفاتر مجازی شرکت های کوچک فکر می کنند. فقط تعداد کمی از مردم به نحوه محافظت از سایت فکر می کنند، اما بیهوده. در واقعیت های مدرن، مطلقاً هر پلتفرمی، صرف نظر از نوع یا محبوبیت، مورد توجه هکرها است. چه کسی ممکن است به منبع شما نیاز داشته باشد و چرا؟ بیایید آن را بفهمیم:
1. شوخی های scriptkiddis. اصطلاح Jargon به هکرهای مشتاقی اشاره دارد که اولین گام های خود را در "سمت تاریک" برمی دارند. آنها با به دست آوردن چندین ابزار یا با نوشتن چند برنامه خود مشتاق هستند تا عملکرد خود را روی اولین قربانی که با آن برخورد می کنند آزمایش کنند و به عنوان یک قاعده ساده ترین اهداف (CMS با محافظت ضعیف و به روز نشده) را انتخاب کنند.
2. سئو سیاه. خدمات بهینه سازهای ناصادق هنوز در حال استفاده هستند - قرار دادن پیوندهای مخفی در کد پروژه هایی با بیش از 10 TCI هنوز هم انجام می شود. و اول از همه، منابع روی موتورهای منبع باز (جوملا، دروپال، اپن کارت و غیره) مورد حمله قرار می گیرند.
3. ساخت بات نت. محافظت از وردپرس با htaccess و افزونه ها نیز مرتبط است زیرا می توان از هر منبعی برای ایجاد یک شبکه زامبی استفاده کرد که در حملات DDoS، ارسال هرزنامه و غیره استفاده می شود.
4. خسارت جانبی. در نهایت، ممکن است مورد حمله قرار نگیرید - هدف اصلی میزبانی است و سایت تنها به عنوان یک آسیب پذیری بزرگ زیرساخت فناوری اطلاعات ارائه دهنده عمل خواهد کرد. البته هکرها به سرنوشت او اهمیتی نمی دهند.

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

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

روش های ایمن سازی سایت وردپرسی

یکی از ابتدایی ترین روش های هک، brute force است. این اصطلاح به معنای واقعی کلمه به عنوان "Brute Force" ترجمه می شود و به معنای دریافت یک جفت ورود / رمز عبور با شمارش brute-force گزینه های ممکن است. غالباً، نیروهای brute-forcer سعی می کنند با استفاده از خطاهای موجود در تنظیمات موتور و سرور، زندگی خود را آسان تر کنند - این به آنها کمک می کند، به عنوان مثال، نام حساب را پیدا کنند، که به طور قابل توجهی تعداد ترکیب ها را کاهش می دهد. در مورد حذف این آسیب پذیری ها و همچنین روش های مبارزه با تلاش های دسترسی غیرمجاز است که مورد بحث قرار خواهد گرفت.

1. از یک لاگین مدیر منحصر به فرد استفاده کنید

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

از طریق پنل مدیریت به بخش "کاربران" بروید، روی دکمه "افزودن جدید" کلیک کنید و یک حساب کاربری ایجاد کنید. در قسمت "نقش"، "Administrator" را انتخاب کنید و عملیات را تأیید کنید. سپس مجدداً از طرف حساب تازه ایجاد شده وارد شوید، به بخش «کاربران» برگردید، «admin» را انتخاب کنید و روی «حذف» کلیک کنید. در پنجره باز شده، دکمه رادیویی را در موقعیت “Link all content” قرار دهید و یک مدیر جدید را از لیست کشویی انتخاب کنید و سپس بر روی “Confirm Deletion” کلیک کنید.
... با استفاده از phpMyAdmin انجام همین رویه از طریق کنترل پنل پایگاه داده بسیار ساده تر است. پایگاه داده مورد نیاز را انتخاب کنید، جدول wp_users را پیدا کنید، خط "admin" (ID = 1) را پیدا کنید، روی "Change" کلیک کنید و نام مورد نظر را وارد کنید.

2. یک حساب انتشار اختصاصی ایجاد کنید

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

3. یک رمز عبور قوی وارد کنید

توصیه های عمومی پذیرفته شده را دنبال کنید: رمز عبور باید حداقل 10 کاراکتر باشد، باید منحصر به فرد باشد و متشکل از یک دنباله تصادفی از حروف بزرگ و کوچک، اعداد و کاراکترهای خاص باشد.
در هیچ موردی نباید:
... یک رمز عبور از عبارات معنی دار بسازید
... استفاده از هر گونه داده واقعی (تاریخ تولد، نام دختر، شماره حساب بانکی، سال جاری ...)
این کار خطر جستجوی عبارت عبور با استفاده از دیکشنری را از بین می برد و همچنین زمان مورد نیاز برای brute force را به میزان قابل توجهی افزایش می دهد. بنابراین، شکستن دنباله ای از 10 کاراکتر، که فقط از حروف کوچک و اعداد (hki458p1fa) تشکیل شده است، 10 روز از زمان کامپیوتر برای یک رایانه نیاز دارد، اما اگر حروف بزرگ و کاراکترهای اضافی (Nv6 $ 3PZ ~ w1) را اضافه کنید، این دوره تا 526 سال افزایش می یابد و تقریباً محافظت کامل از وردپرس را تضمین می کند. پیدا کردن و به خاطر سپردن این رمزهای عبور بسیار دشوار است، به خصوص اگر شما مسئول چندین پروژه باشید. بنابراین، برای تولید و ذخیره آنها، بهتر است از مدیران ویژه استفاده کنید، به عنوان مثال، KeePassX، توزیع شده رایگان، یا یک سند آزمایشی معمولی (بهتر است اگر با یک رمز عبور در یک آرشیو بسته بندی شود).

4. رمز عبور پایگاه داده را تغییر دهید

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

1. به کنترل پنل phpMyAdmin خود بروید
2. تب "کاربران" را باز کرده و صاحب پایگاه داده را انتخاب کنید
3. بر روی “Edit Privileges” کلیک کنید
4. ستون "تغییر رمز عبور" را پیدا کنید و دنباله مخفی جدید را در فیلدهای مربوطه وارد کنید
5. با کلیک بر روی "Ok" تغییرات را ذخیره کنید.

اکنون فقط ویرایش wp-config.php باقی مانده است، در غیر این صورت وردپرس نمی تواند به پایگاه داده متصل شود. تعریف خط را پیدا کنید ('DB_PASSWORD', 'password')؛ و به جای کلمه رمز رمز جدید را وارد کنید. توجه داشته باشید که از آنجایی که کاراکتر (‘) برای مرزبندی دستورات SQL استفاده می شود، نباید به عنوان بخشی از عبارت عبور استفاده شود.

5. رمزهای عبور را به طور منظم به روز کنید

آنها باید حداقل هر شش ماه یکبار تعویض شوند. تغییر فوق العاده عبارات کد همیشه باید بعد از:

انتقال داده ها برای احراز هویت به اشخاص ثالث (برنامه نویسان، مدیران سیستم، بهینه سازها و سایر متخصصان، حتی اگر روی کارکنان شرکت میزبان کار می کنند)
... ورود به یک منبع وب از رایانه شخص دیگری (در یک مهمانی، در یک کافی نت)
... مجوز از تجهیزاتی که ممکن است در معرض خطر قرار گرفته باشند (دستگاه آلوده به ویروس)

6. فراموش نکنید که کلیدهای مخفی کوکی ها را تغییر دهید

آنها در فایل wp-config.php قرار دارند. 8 مورد از آنها وجود دارد:

تعریف کنید ("AUTH_KEY"، "کلید منحصر به فرد"); تعریف کنید ("SECURE_AUTH_KEY"، "کلید منحصر به فرد"); define ("LOGGED_IN_KEY"، "کلید منحصر به فرد"); تعریف ("NONCE_KEY"، "کلید منحصر به فرد"); تعریف کنید ("AUTH_SALT"، "کلید منحصر به فرد"); تعریف کنید ("SECURE_AUTH_SALT"، "کلید منحصر به فرد"); define ("LOGGED_IN_SALT"، "کلید منحصر به فرد"); تعریف کنید ("NONCE_SALT"، "کلید منحصر به فرد");

تعریف کنید ("AUTH_KEY"، "کلید منحصر به فرد"); تعریف کنید ("SECURE_AUTH_KEY"، "کلید منحصر به فرد"); define ("LOGGED_IN_KEY"، "کلید منحصر به فرد"); تعریف ("NONCE_KEY"، "کلید منحصر به فرد"); تعریف کنید ("AUTH_SALT"، "کلید منحصر به فرد"); تعریف کنید ("SECURE_AUTH_SALT"، "کلید منحصر به فرد"); define ("LOGGED_IN_SALT"، "کلید منحصر به فرد"); تعریف کنید ("NONCE_SALT"، "کلید منحصر به فرد");

همانطور که از نام متغیرها حدس می زنید، کلیدها وظیفه رمزگذاری کوکی ها را بر عهده دارند (عامیانه معروف: کوکی - کوکی ها، نمک - نمک، ما هکرها را با کوکی های نمکی تغذیه می کنیم) که برای ساخت سایت استفاده می شود. کامپیوتر خود را پس از مجوز "به خاطر بسپارید". نکته اصلی این است که حتی اگر مهاجم هش رمز عبور مدیریت را در اختیار بگیرد، نمی‌تواند کوکی‌های لازم برای دسترسی به سایت را بدون عبارات مخفی فهرست شده ایجاد کند.

برای بهبود امنیت، توالی کاراکترهای پیش‌فرض باید بلافاصله پس از استقرار CMS با توالی‌های منحصربه‌فرد جایگزین شوند. برای راحتی، توسعه دهندگان یک وب مولد در آدرس www.api.wordpress.org/secret-key/1.1/salt/ ایجاد کرده اند - وقتی وارد می شوید، کلیدها را می بینید و اگر صفحه را به روز کنید، ترکیب ها به روز می شوند. .

7. مجوز مضاعف برای منطقه مدیریت

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

< Files wp- login. php> # ما نوع اصلی احراز هویت را تنظیم می کنیم - این بدان معنی است که وقتی سعی می کنید# برای دسترسی به دایرکتوری یا فایل مشخص شده یک رمز عبور از شما خواسته می شود: AuthType اساسی # متنی که در سربرگ فرم نمایش داده می شود را وارد کنید: AuthName "خود را شناسایی کنید" # مسیر فایل حاوی عبارت عبور را مشخص کنید: AuthUserFile "/home/site/.htpasswd" # ما نشان می دهیم که هنگام دسترسی به فایل wp-login.php، باید رمز عبور را وارد کنید:نیاز به کاربر معتبر # دسترسی اشخاص ثالث به فایل .htpasswd را رد کنید:< Files . htpasswd>دستور اجازه، انکار از همه

# فایل اسکریپت مجوز را انتخاب کنید: # نوع اصلی احراز هویت را تنظیم کنید - این بدان معنی است که وقتی # سعی می کنید به فهرست یا فایل مشخص شده دسترسی پیدا کنید، از شما یک رمز عبور خواسته می شود: AuthType basic # متنی را که در هدر فرم نمایش داده می شود وارد کنید: AuthName "Identify yourself" # مسیر فایل حاوی عبارت عبور را مشخص کنید: AuthUserFile "/home/site/.htpasswd" # ما نشان می دهیم که هنگام دسترسی به فایل wp-login.php، باید یک رمز عبور وارد کنید: Require valid-user# دسترسی اشخاص ثالث به فایل .htpasswd را رد کنید: دستور اجازه، انکار از همه

در عین حال، خوب است که مراقب امنیت خود htaccess نیز باشیم. به طور دقیق، چنین دستورالعملی باید در تنظیمات میزبانی اصلی مشخص شود، اما با توجه به بی دقتی برخی از ارائه دهندگان، باید آن را ایمن بازی کنید:

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

1) یک فایل .php در notepad ایجاد کنید، برای مثال crypt.php
2) کد را در آنجا وارد کنید و رمز عبور خود را به جای کلمه "Password" جایگزین کنید:

3) فایل را ذخیره کرده و در پوشه اصلی آپلود کنید
4) پیوند site_name.ru / crypt.php را دنبال کنید - رمز عبور هش روی صفحه ظاهر می شود
5) این مقدار را در فایل htpasswd ذخیره کنید و آن را در پوشه ریشه آپلود کنید و crypt.php را حذف کنید.

آخرین لمس ممنوعیت مشاهده محتویات فهرست منابع وب است. کافی است یک خط به htaccess اضافه کنید:

گزینه‌ها همه - فهرست‌ها

گزینه های همه -شاخص ها

این کار به این دلیل انجام می شود که هکرها نتوانند بفهمند کدام فایل ها در فهرست های پروژه هستند. در بسیاری از سایت های میزبانی، این دستورالعمل قبلاً در تنظیمات سرور گنجانده شده است، اما اگر این نکته نادیده گرفته شد، باید خودتان آن را ثبت کنید.

8. کپچا را نصب کنید

استفاده از کپچا به شما این امکان را می‌دهد، اگر نه همه، حداقل بیشتر ربات‌های brute-force را در همان زمان قطع کنید. فهرست پلاگین حفاظت از سایت وردپرس گزینه های زیادی را ارائه می دهد. علاوه بر اتصال یک راه حل اختصاصی از گوگل، Captcha by BestWebSoft از نوع ترکیبی (گرافیک و متن) که بر اساس عملیات ریاضی است، بسیار مورد توجه است. استقلال سرویس، وضوح و سطح پیچیدگی قابل قبول، ماژول را به یکی از بهترین ها تبدیل کرده است.

سفارشی سازی مشکل بزرگی نیست. تب "Basic" به شما امکان می دهد مکان نمایش کپچا را انتخاب کنید، همچنین عنوان و نمادی را برای علامت گذاری فیلدهای مورد نیاز مشخص کنید.

بخش "پیشرفته" امکان ایجاد پیام های خطای خود و همچنین فعال کردن بسته های تصویری اضافی را فراهم می کند تا زندگی را برای ربات ها دشوارتر کند.

یکی دیگر از ویژگی های مفید، لیست سفید داخلی آدرس های IP است که کپچا برای آنها نمایش داده نمی شود.

نتیجه نصب و فعال سازی افزونه ظاهر شدن فرمی در صفحه مجوز خواهد بود:

9. آدرس ادمین را تغییر دهید

در مورد نحوه محافظت از سایت وردپرس، لازم است به روشی رادیکال تر، اما همچنین پیچیده تر اشاره کنیم - تغییر URL صفحه ورود در سطح اسکریپت. این روش در چند مرحله انجام می شود:

1. نام فایل wp-login.php را تغییر دهید. از یک دنباله تصادفی از حروف کوچک لاتین، اعداد و خط تیره استفاده کنید. به عنوان مثال: abc-123.php
2. همه ارجاع به wp-login.php را در فایل حاصل پیدا کنید و نام جدید را جایگزین کنید.
3. برای اینکه سایت به درستی کار کند، جایگزینی باید در موارد زیر نیز انجام شود: wp-activate.php, general-template.php, post-template.php, functions.php, class-wp-customize-manager.php, general -template.php، link-template.php، admin-bar.php، post.php، pluggable.php، ms-functions.php، canonical.php، functions.wp-scripts.php، wp-signup.php، my -sites.php، schema.php، ru_RU.po

پس از این دستکاری ها، پنل مدیریت در سایت / abc-123.php قرار می گیرد. دسترسی به فایل جدید باید محدود باشد و همانطور که در بالا توضیح داده شد با رمز عبور محافظت شود. همچنین می توان با ایجاد یک فایل wp-login.php جعلی و تعیین رمز عبور برای آن، هکرهای احتمالی را گمراه کرد.

یک گزینه حتی ساده تر، استفاده از افزونه "تغییر نام wp-login.php" است. پس از نصب افزونه برای محافظت از سایت، یک فیلد جدید در منوی "Settings" -> "Permalinks" ظاهر می شود:

10. IP ادمین را مشخص کنید

اگر یک آدرس IP ثابت داشته باشید، امنیت بیشتری را می توان فراهم کرد. ممانعت از دسترسی به wp-login.php از هر رایانه ای غیر از رایانه شما، زندگی را برای هکرها سخت تر می کند:

< Files wp- login. php>دستور رد، اجازه انکار از همه اجازه از 127.0.0.1، 127.0.02 # آدرس های IP خود را با کاما جدا کنید

دستور رد، اجازه انکار از همه اجازه از 127.0.0.1، 127.0.02 # آدرس های IP خود را با کاما جدا کنید

11. خطاهای مجوز را غیرفعال کنید

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

add_filter ("login_errors"، create_function ("$ a"، "return null;"));

add_filter ("login_errors"، create_function ("$ a"، "return null;"));

برای انجام این کار، "Appearance" -> "Editor" -> "Theme Functions" را در پنل مدیریت انتخاب کنید. نوشتن کد بعد از تگ باز الزامی است

12. از یک اتصال امن استفاده کنید.

برای رمزگذاری ترافیک بین رایانه کاربر و وب سرور، پروتکل https وجود دارد که استفاده از آن امکان رهگیری داده های مهم، در مورد ما، داده های شناسایی را حذف می کند. برای فعال کردن آن، ابتدا باید یک گواهی SSL خریداری کنید که دو عملکرد را همزمان انجام می دهد: تأیید اعتبار یک منبع وب و رمزگذاری اطلاعات ارسال شده. می توانید آن را در مراکز تخصصی یا از تعدادی ثبت کننده نام دامنه دریافت کنید. برای مقاصد غیرتجاری، دریافت گواهینامه سطح ورودی رایگان (که توسط شرکت www.startssl.com ارائه می شود) کاملاً کافی است. در مورد فرآیند نصب، به عنوان یک قاعده، در بخش راهنمای میزبان به تفصیل توضیح داده شده است.

پس از دریافت گواهی SSL، باید هدایت بخش مدیریتی منبع وب را به یک اتصال ایمن پیکربندی کنید. در مورد وردپرس، این کار با استفاده از ساختار زیر انجام می شود:

< IfModule mod_rewrite. c>Options + FollowSymlinks RewriteEngine در RewriteCond% (HTTPS) = خاموش RewriteCond% (REQUEST_URI) = / wp- login. php RewriteRule (. *) https:

Options + FollowSymlinks RewriteEngine در RewriteCond% (HTTPS) = خاموش RewriteCond% (REQUEST_URI) = / wp-login.php RewriteRule (. *) Https: //% (HTTP_HOST)% (REQUEST_URI)

همچنین می توانید استفاده از گواهینامه های SSL را در سطح موتور مجبور کنید. برای این کار فایل wp-config.php را باز کرده و سپس اضافه کنید

تعریف کنید ("FORCE_SSL_ADMIN"، درست)؛

تعریف کنید ("FORCE_SSL_ADMIN"، درست)؛

علاوه بر این، می توانید یک تغییر مسیر سراسری از http به https راه اندازی کنید. برای سایت های جدید، با توجه به اینکه گوگل پروژه های ایمن را تشویق می کند و در نتایج جستجو به آنها اولویت می دهد، این رویکرد بهینه است:

< IfModule mod_rewrite. c>Options + FollowSymlinks RewriteEngine در RewriteCond% (HTTPS) = خاموش RewriteRule ^ (. *) $ Https: //% (HTTP_HOST)% (REQUEST_URI)

Options + FollowSymlinks RewriteEngine در RewriteCond% (HTTPS) = خاموش RewriteRule ^ (. *) $ Https: //% (HTTP_HOST)% (REQUEST_URI)

13. متجاوزان را مسدود کنید

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

سفارش Allow, Deny Allow from all Deny from 127.0.0.1, 127.0.02 # IP ناخواسته را مشخص کنید

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

در غیر این صورت می توانید از افزونه امنیتی سایت وردپرس به نام WP Cerber استفاده کنید. این راه حل کاملا رایگان است، در حالی که مجموعه بسیار چشمگیری از ابزارهای طراحی شده برای جلوگیری از هک CMS را ارائه می دهد. می توانید آن را مستقیماً از پنل مدیریت نصب کنید.

به طور پیش فرض، پارامترهای نسبتا معقولی ارائه می شود. با این حال، تعداد تلاش ها باید به 5 افزایش یابد تا از سوء تفاهم جلوگیری شود.

اگر آدرس ادمین را به روشی که قبلا توضیح داده شد تغییر دهید، کادر انتخاب مقابل "Block IP for any wp-login.php" باید علامت زده شود.

برای این اهداف، می توانید از ابزار خود WP Cerber نیز استفاده کنید:

حالت پلاگین برای محافظت از سایت سیتادل نیز نیازی به پیکربندی اضافی ندارد. این طراحی شده است تا پروژه را در طول یک حمله brute-force عظیم «گلوله» کند. بهتر است علامت کادر کنار "ثبت تلاش برای ورود به فایل" را بردارید - این به حذف بار اضافی روی سرور کمک می کند.

از برگه «فهرست‌های دسترسی» برای ایجاد فهرست IP «سیاه» و «سفید» استفاده می‌شود (اگر آدرس ثابتی دارید، حتماً آن را به لیست موارد مورد اعتماد اضافه کنید)، و بخش «ابزارها» به شما اجازه می‌دهد تنظیمات قبلی را وارد و صادر کنید. با این حال، این احتمالات نیازی به بررسی جداگانه ندارند.

14. فایل کانفیگ را جابجا کنید

همانطور که در بالا متوجه شدیم، wp-config.php داده های مهمی مانند ورود و رمز عبور برای دسترسی به MySQL و همچنین کلیدهای API را ذخیره می کند. به نظر می رسد مرحله بعدی واضح است - محافظت از وردپرس از طریق htaccess با محدود کردن دسترسی به فایل:

< Files wp- config. php>دستور اجازه دهید، از همه انکار کنید

دستور اجازه دهید، از همه انکار کنید

با این حال، روش قابل اعتماد تری نیز وجود دارد. وردپرس یک ویژگی بسیار جالب دارد که کمتر کسی از آن اطلاع دارد. موتور اجازه می دهد تا فایل پیکربندی را یک سطح بالاتر از دایرکتوری ریشه قرار دهید. php را می توان به فهرست سایت منتقل کرد. در این صورت، فایل از طریق اینترنت کاملاً غیر قابل دسترسی خواهد بود، در حالی که اطلاعات موجود در آن همچنان توسط CMS خوانده می شود.

15. چک REFERER را اضافه کنید

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

< IfModule mod_rewrite. c>RewriteEngine در RewriteCond% (REQUEST_METHOD) POST RewriteCond% (REQUEST_URI). (wp- نظرات- ارسال | wp- ورود) \. php * RewriteCond% (HTTP_REFERER)!. * tekseo. su * [OR] RewriteCond% (HTTP_USER_AGENT) ^ $ RewriteRule (. *) http: //% (REMOTE_ADDR) / $ 1

RewriteEngine در RewriteCond% (REQUEST_METHOD) POST RewriteCond% (REQUEST_URI). (Wp-comments-post | wp-login) \. Php * RewriteCond% (HTTP_REFERER)!. * Site. * RewriteCond% (HTTPER)% HTTP_USER_AGENT) ($ RewriteCond) ^ $ RewriteCond *) http: //% (REMOTE_ADDR) / 1 دلار

16. از XML-RPC محافظت کنید

از نسخه 3.5، توانایی غیرفعال کردن پروتکل فراخوانی روش راه دور XML-RPC از وردپرس ناپدید شده است. اساساً برای تعامل با برنامه های تلفن همراه لازم است، اما همه به چنین عملکردی نیاز ندارند. در همان زمان، xmlrpc.php به طور فعال برای انجام حملات DDoS استفاده می شود، که پاشنه آشیل کل پروژه است.

علاوه بر این، هکرها به فکر استفاده از XML-RPC برای خشونت بی رحمانه هستند. استفاده از روش wp.getUsersBlogs به شما این امکان را می‌دهد که اعتبارنامه‌ها را بسیار سریع‌تر از استفاده از فرم مدیریت تکرار کنید. از آنجایی که بسیاری از فراخوانی های XML-RPC نیاز به مجوز دارند، درخواستی مانند این:

< methodCall> < methodName>wp getUsersBlogs < params>< param>< value>< string>مدیر < param>< value>< string> 12345

wp.getUsersBlogs مدیر 12345

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

1) با مسدود کردن دسترسی به فایل xmlrpc.php از طریق htaccess

require_once (ABSPATH. "wp-settings.php");

نیاز به ثبت نام

تابع remove_x_pingback ($ headers) (تنظیم نشده ($ headers ["X-Pingback"])؛ بازگشت $ headers;) add_filter ("wp_headers"، "remove_x_pingback");

4) با استفاده از افزونه انتشار کنترل XML-RPC گزینه مناسب را در Settings -> Writing برمی گرداند:

لطفاً توجه داشته باشید: افزونه بلافاصله پس از فعال سازی پروتکل را غیرفعال می کند و در تنظیمات می توانید با علامت زدن چک باکس مربوطه آن را فعال کنید.

17. حملات brute force را رصد کنید

در پایان لازم است به یک افزونه جالب برای تلاش های هک ورود به سیستم - Authentication و xmlrpc log writer اشاره کنیم. اگرچه همان WP Cerber دارای ابزارهای نظارتی داخلی است، اما این ماژول همچنان مفید خواهد بود، به خصوص برای کسانی که به قابلیت های پروتکل توضیح داده شده در بالا نیاز دارند. AX LogWriter قادر است نیروی بی رحم را از طریق xmlrpc.php ردیابی کند، بنابراین شما می توانید درجه تهدید و امکان امتناع کامل از استفاده از قابلیت های آن را ارزیابی کنید. در نهایت، برای کسانی که اصلاً درگیر امنیت پروژه خود نبوده اند، افزونه محافظت از سایت چشمان آنها را به اهمیت فعالیت های ذکر شده باز می کند.

استفاده از AX LogWriter ساده است. پس از نصب، بخش مربوطه در منوی مدیریت ظاهر می شود که در آن می توانید تمام تغییرات لازم را انجام دهید:

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

گزارش سفارشی را می توان مستقیماً از پنل مدیریت در صفحه نمایشگر ثبت سفارشی مشاهده کرد:

بیایید خلاصه کنیم:

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


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

  1. اعتبار سنجی داده های ورودی
  2. محافظت در برابر حملات XSS
  3. محافظت در برابر حملات CSRF
  4. جلوگیری از تزریق SQL
  5. حفاظت از سیستم فایل
  6. حفاظت از داده های جلسه
  7. خطا در پردازش
  8. محافظت از فایل های گنجانده شده

اعتبار سنجی داده های ورودی

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

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

محافظت در برابر حملات XSS

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

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

برای محافظت از برنامه های خود، داده های دریافتی را از طریق تابع strip_tags () اجرا کنید، که هر تگ موجود را حذف می کند. هنگام نمایش داده ها در مرورگر، از تابع htmlentities () استفاده کنید.

محافظت در برابر حملات CSRF

نوع بعدی حمله ای که به آن نگاه خواهیم کرد، حمله CSRF یا جعل درخواست بین سایتی است. مهاجم از ترفندهای مختلفی برای به دست آوردن اطلاعات محرمانه یا انجام معامله بدون اطلاع قربانی استفاده می کند. این عمدتاً در سایت‌هایی با محافظت ضعیف اتفاق می‌افتد، جایی که منطق تجاری بر اساس کار درخواست‌های GET است.

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

مثال ساده زیر نشان می دهد که چگونه یک سایت ناامن می تواند در معرض حمله CSRF قرار گیرد:

فرض کنید باب می خواهد یک حمله CSRF به آلیس انجام دهد. او یک آدرس url ویژه تشکیل داد و آن را از طریق ایمیل برای آلیس ارسال کرد:

از وب سایت من دیدن کنید!

اگر آلیس در وب سایت example.com مجاز باشد و این پیوند را دنبال کند، 1000 دلار از حساب او به حساب باب منتقل می شود. از طرف دیگر، باب می تواند یک تصویر نیز ارسال کند و URL "بد" را در ویژگی src پر کند.

مرورگر نمی تواند این تصویر را نمایش دهد، زیرا این تصویر وجود ندارد، اما درخواست بدون اطلاع و مشارکت آلیس انجام می شود.

برای جلوگیری از این نوع حملات، فقط از درخواست های POST برای پردازش هایی که برای تغییر اطلاعات در پایگاه داده طراحی شده اند استفاده کنید. از _REQUEST $ استفاده نکنید. از $ _GET برای مدیریت پارامترهای GET و $ _POST برای بازیابی پارامترهای POST استفاده کنید.

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

جلوگیری از تزریق SQL

شما باید از PDO برای اجرای پرس و جو در پایگاه داده استفاده کنید. با پرس و جوهای پارامتری و عبارات آماده شده، می توانید خطر تزریق SQL را کاهش دهید.

بیایید به مثال زیر نگاهی بیندازیم:

در کد بالا درخواستی به متد ()prepare شامل پارامترهای نامگذاری شده:: name و: age ارسال می کنیم. بنابراین، پرس و جو برای جایگزینی بیشتر داده ها از قبل کامپایل شده است. هنگامی که متد execute () فراخوانی می شود، درخواست به طور کامل تشکیل و اجرا می شود. اگر از این تکنیک استفاده کنید، تمام تلاش های مهاجم برای انجام تزریق SQL باطل خواهد شد.

حفاظت از سیستم فایل

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

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

حفاظت از داده های جلسه

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

اگر هنوز نیاز به ذخیره چنین داده‌هایی در یک جلسه دارید، رمزگذاری بهترین معیار است. این به طور کامل مشکل را حل نمی کند، زیرا داده های رمزگذاری شده 100٪ ایمن نیستند، اما اطلاعات ذخیره شده غیرقابل خواندن خواهند بود. همچنین، باید در نظر داشته باشید که داده های جلسه را می توان در جای دیگری مانند پایگاه داده ذخیره کرد. PHP یک متد ویژه session_set_save_handler () دارد که به شما امکان می دهد داده های جلسه را به روش خود ذخیره کنید.

از PHP 5.4، می توانید یک شی از نوع SessionHandlerInterface را به session_set_save_handler () منتقل کنید.

خطا در پردازش

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

در سرور عمومی باید گزینه هایی مانند display_errors و display_start_up_errors را غیرفعال کنید، اما گزینه هایی مانند error_reporting و log_errors باید فعال باشند تا تمامی خطاهایی که کاربران با آن مواجه می شوند ثبت شوند.

همچنین می توانید از set_error_handler برای تعریف کنترل کننده خطای خود استفاده کنید. با این حال، ممکن است محدودیت هایی وجود داشته باشد، زیرا هندلر بومی نسبت به مکانیسم بومی PHP پایین تر است. خطاهای E_CORE_ERROR، E_STRICT، یا E_COMPILER_ERROR را نمی توان در همان فایل به عنوان یک کنترل کننده خاص یافت. علاوه بر این، خطاهایی که ممکن است در خود کنترل کننده رخ دهد نیز قابل تشخیص نیستند.

برای روشی زیباتر برای گرفتن استثناها، کد بالقوه خطرناک باید در یک بلوک try/catch قرار داده شود. همه استثناهای بومی باید اشیاء کلاس ها یا زیر کلاس های Exception باشند. اگر استثناء وجود داشته باشد، می توان آنها را در بلوک try/catch مدیریت کرد.

محافظت از فایل های گنجانده شده

اغلب، فایل های دیگر در اسکریپت های PHP بارگذاری می شوند، مانند اتصال به پایگاه داده و بسیاری دیگر. برخی از توسعه دهندگان به این فایل ها پسوند .inc می دهند. PHP به طور پیش فرض چنین فایل هایی را تجزیه نمی کند. اگر مستقیماً آنها را آدرس دهی کنید، کاربر می تواند متن این فایل را ببیند. اگر هکر بتواند به فایلی که اتصال داده به پایگاه داده را ذخیره می کند دسترسی پیدا کند، بعداً می تواند به تمام داده های برنامه شما دسترسی پیدا کند. بنابراین همیشه از پسوند .php برای فایل های آپلود شده استفاده کنید و آنها را در جایی ذخیره کنید که دسترسی مستقیم کاربر وجود ندارد.

نتیجه

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

بیایید به این فکر کنیم که هکر کیست؟ هکر کرکر نیست! مردم اغلب این مفاهیم را اشتباه می گیرند. هکر قبل از هر چیز فردی با تفکر خارج از چارچوب است و به اصطلاح قدرت او این است.

برای مقاومت در برابر هکرها، باید یاد بگیرید که خارج از چارچوب فکر کنید. همانطور که می گویند، یک گوه توسط یک گوه از بین می رود.

امروز یک راه بسیار غیرمعمول برای محافظت از خود در برابر حملاتی مانند php ارائه خواهم داد. البته او برای همه مناسب نیست. و اگر صادقانه بگویم او نه از خود حمله، بلکه از تشخیص آن محافظت می کند. شیفته؟

نحوه پیدا کردن شامل ...

بیایید ابتدا متوجه شویم که چگونه یک مهاجم سعی می کند یک آسیب پذیری را پیدا کند.

به نظر می رسد این است. مهاجم تمام پارامترهای ورودی را یکی یکی اصلاح می کند، با این فرض که داده های این پارامترها وارد تابع include می شود. خوب، یا اگر، به روشی ساده، سعی می کند فایل ها را "ضمیمه" کند. و برای تعیین اینکه آیا آسیب پذیری وجود دارد یا خیر، باید فایلی را در سیستم هدف قرار دهد (اگر می داند - آسیب پذیری وجود دارد، خیر - آسیب پذیری وجود ندارد).

طبیعتاً اگر یک مهاجم از بیرون عمل کند، ساختار مکان دایرکتوری ها و فایل ها را نمی داند و نمی تواند هیچ فایلی را ضمیمه کند، زیرا مسیر آن را نمی داند. اما فایل هایی هستند که همیشه در سیستم وجود دارند و همیشه مجوز خواندن برای آنها وجود دارد. برای لینوکس، این / etc / passwd است، و برای ویندوز، C: \ boot.ini باشد. اما به هر حال، ویندوز برای ما چندان جالب نیست، بنابراین در ادامه در مورد passwd صحبت خواهیم کرد

/ etc / passwd

احتمالاً با رکوردهای بیشتری از فرم در گزارش های خود مواجه شده اید:

Action = .. / etc / passwd% 00
? action = .. / .. / etc / passwd% 00
? action = .. / .. / .. / etc / passwd% 00
? اقدام = .. / .. / .. / .. / etc / passwd% 00
? اقدام = .. / .. / .. / .. / .. / etc / passwd% 00
انجام = .. / etc / passwd% 00
انجام = .. / .. / etc / passwd% 00
انجام = .. / .. / .. / etc / passwd% 00
انجام = .. / .. / .. / .. / etc / passwd% 00
انجام = .. / .. / .. / .. / .. / etc / passwd% 00
? id = .. / etc / passwd% 00
? id = .. / .. / etc / passwd% 00
? id = .. / .. / .. / etc / passwd% 00
? id = .. / .. / .. / .. / etc / passwd% 00
? id = .. / .. / .. / .. / .. / etc / passwd% 00

اگر بله، پس باید بدانید که سعی کرده اید php include (خوب، یا توانایی خواندن فایل های دلخواه را پیدا کنید، اما ما اکنون به این موضوع علاقه نداریم). بنابراین، اگر یکی از پارامترهای شما به درستی پردازش نشود و به یک تابع ختم شود عبارتند از ()، سپس فایل / etc / passwd اضافه می شود، محتوای آن به عنوان یک اسکریپت php تفسیر می شود و از آنجایی که حاوی برچسب کد php نیست، بدون تغییر در مرورگر نمایش داده می شود. این به عنوان یک "نشانگر" برای مهاجم برای داشتن یک آسیب پذیری عمل می کند.

چرا این را می نویسم، با این واقعیت که هنگام جستجوی شامل، مهاجم قطعا (من تضمین می کنم که در 90٪ موارد) سعی خواهد کرد فایل را اضافه کند. / etc / passwd.

از خودت محافظت کن آقا!

شاید شما اکنون فکر می کنید: "آیا او می خواهد یک WAF معمولی و بسته های فیلتر را با وجود / etc / passwd در آنها ارائه دهد؟" خیر این روش استاندارد است. این نمونه ای از طرز فکر یک فرد عادی است.

بیایید کمی خلاقیت به خرج دهیم. چرا فقط مقداری کد php به محتویات فایل passwd اضافه نمی کنیم؟ و اگر به طور ناگهانی مهاجم موفق به اتصال او شود، کد php ما اجرا می شود. (آیا آن را مزخرف می دانید؟ - به نتیجه نگاه کنید)

از آنجایی که می دانیم تنها کسی که گنجاندن این فایل را حدس می زند یک کرکر است، کد php ما باید آن را ممنوع کند و برای جلوگیری از هک شدن بیشتر سیستم، فایل آسیب پذیر را مسدود کرده و بهتر است به مدیر اطلاع داده شود. در مورد حادثه

اما چگونه می توان کد php را به / etc / passwd اضافه کرد زیرا نحو آن کاملاً تنظیم شده است؟ هر کاربر یک فیلد "نظر" دارد - توضیحات کاربر، می توانید هر چیزی را که می خواهید در آنجا وارد کنید (البته به جز دو نقطه). بنابراین ما با نظری که نیاز داریم یک کاربر به سیستم می گیریم و اضافه می کنیم. پس از آن، / etc / passwd حاوی خط زیر خواهد بود

ریشه: x: 0: 0: سوپرکاربر: /:
دیمون: *: 1: 5 :: /: / sbin / sh
bin: *: 2: 2 :: / usr / bin: / sbin / sh
sys: *: 3: 3 :: /:
adm: *: 4: 4 :: / var / adm: / sbin / sh
امنیت کاربر: *: 1001: 1001::/:

خوب، در اسکریپت افزونه، ما قبلاً اقدامات مورد نیاز خود را انجام می دهیم - کاربر را ممنوع کنید، درخواست را مسدود کنید، به مدیر اطلاع دهید.

در نتیجه ما نوعی تله داریم که می تواند سایت شما را از هک محافظت کند.

نتیجه

بله، من کاملاً آگاه هستم که همه چیزهایی که در بالا نوشته شده است بیهوده به نظر می رسد. و من کاملاً درک می کنم که هیچ کس در عمل از آن استفاده نخواهد کرد. اما این چیزی نیست که من برای آن نوشتم. من نوشتم تا نمونه ای از رویکرد غیر استاندارد در زمینه حفاظت را نشان دهم.

ممنون از توجهتون =)