آگهی PHP را فعال کنید چگونه صفحه ثبت نام خود را در Multisite وردپرس ایجاد کنید

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

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

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

  • wp-login.php - مجوز
  • wp-login.php؟ action \u003d ثبت نام - ثبت نام
  • wp-login.php؟ action \u003d loadpassword - بازنشانی رمز عبور

در حالت Multisite، هسته وردپرس شروع به رفتار تا حدودی متفاوت و هنگام تغییر به لینک WP-login.php می کند؟ action \u003d ثبت نام یک تغییر مسیر را در wp-signup.php دریافت خواهید کرد. این صفحه ثبت نام از شبکه شما است که به طور پیش فرض در وردپرس است.

علاوه بر ثبت نام حساب های کاربر عادی، می توانید یک سایت جدید را بر روی آن ایجاد کنید اگر SuperMinistrator این فرصت را در تنظیمات شبکه (تنظیمات شبکه) فعال کرده است.

در اکثر موضوعات، صفحه ثبت نام خیلی خوب نیست. بسیاری از تم ها توسط چارچوب CSS مانند بوت استرپ و کلاس های خاص خود را برای سبک سازی عناصر مختلف در صفحات استفاده می شود، بنابراین سخت است که یک HTML را بنویسید که برای همه مناسب باشد.

اما اگر صفحه به نظر بی نظیر نباشد، نباید ناامید شود. فایل WP-Signup.php یک چیز عالی است در ابتدا، زمانی که هیچ وقت برای کار کردن هر بخش از سایت وجود ندارد - شما می توانید بر روی دیگر تمرکز کنید صفحات مهم و محتوا

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

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

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

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

جایگزین برای functions.php.

سفارش در فایل ها

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

| mu-plugins | | load.php | | سلنا-شبکه | | | ثبت نام | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

در فایل load.php، ترجمه ها و تمام پلاگین های لازم "پلاگین ها متصل هستند:

// انتقال انتقال برای mu-plugins load_muplugin_textdomain (selena_network "،" / سلنا-شبکه / زبان / ")؛ // عملکرد صفحه ثبت نام نیاز به wpmu_plugin_dir. "/selena-network/signup/plugin.php"؛ // پلاگین دیگری // نیاز به wpmu_plugin_dir ...

در داخل دایرکتوری Selena-Network، پوشه های پلاگین ذخیره می شوند. هر کدام دارای plugin.php خود است، که ما در load.php متصل هستیم. این انعطاف پذیری و توانایی فورا غیر فعال کردن و روشن شدن است اجزای جداگانه در پروژه کار در صورت اضطراری.

صفحه ثبت نام

با درک کجا و چگونگی نوشتن کد، می توانید به ایجاد صفحه ثبت نام بروید.

یک صفحه را با example.org/signup/ از طریق رابط کاربری معمولی ایجاد کنید. به عنوان یک آدرس، شما می توانید از هر URL استفاده کنید که برای پروژه شما مناسب است.

تغییر مسیر به صفحه ثبت نام مورد نظر

برای وردپرس برای پیدا کردن صفحه ثبت نام جدید ما و ایجاد یک تغییر مسیر بر روی آن، هنگام کلیک بر روی لینک "ثبت نام"، فیلتر WP_signup_Location استفاده می شود. این را می توان در داخل wp-login.php یافت و این است که مسئول تغییر مسیر به طور پیش فرض WP-signup.php است.

مورد "ثبت نام": اگر (IS_Multisite ()) (WP_REDIRECT (APTION_FILTERS ("WP_SIGNUP_LOCATION"، NETWORK_SITE_URL ("WP-signup.php"))؛ خروج؛ // ...

به طور پیش فرض به یاد داشته باشید، صفحه ثبت نام بر روی دامنه اصلی شبکه باز می شود. به همین دلیل است که network_site_url () در اینجا استفاده می شود.

فیلتر فیلتر خود را به MU-Plugins / Selena-Network / Signup / Plugin.php اضافه کنید، که به آدرس صفحه ثبت نام در سایت فعلی داده می شود:

تابع selena_network_signup_page ($ url)؛) add_filter ("wp_signup_location"، "selena_network_signup_page"، 99)؛

selena_network - پیشوند، که من در نام تمام توابع درون mu-plugins در سایت من برای جلوگیری از درگیری ها استفاده می شود، باید با پیشوند منحصر به فرد خود جایگزین شود. اولویت اضافه کردن فیلتر 99، به دلیل برخی از پلاگین ها، مانند BBPress و BuddyPress، می توانید این آدرس را به خودتان بازنویسی کنید (MU-plugins زودتر از پلاگین های معمولی بارگیری می شود).

لطفا توجه داشته باشید که home_url () استفاده می شود، که، بر خلاف network_site_url ()، آدرس سایت فعلی را می دهد، و نه سایت اصلی شبکه.

WP-Signup.php قابلیت

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

در ابتدای فایل از 1 تا 80، خط (در نسخه 4.1.1)، چک های مختلف ساخته شده و خروجی صفحه "شروع" با استفاده از get_header ().

بعد، بسیاری از روش ها اعلام می شود و قبل از شروع کار با آنها، ارزش درک هر چه عملکرد را می سازد. در داخل، بسیاری از این ها اغلب از توابع دیگر با پیشوند WPMU_ استفاده می شود، همه آنها در فایل WP / MS-Functions.php اعلام شده اند. این بخش بدون دیدن کد خود سخت است. زیر شرح مختصری از توابع اساسی در صورت مشکل شما.

  • wpmu_signup_stylesheet () - خروجی CSS اضافی در صفحه ثبت نام.
  • show_blog_form () - زمینه های ثبت نام سایت (آدرس، نام قابل مشاهده برای موتورهای جستجو).
  • validate_blog_form () - بررسی آدرس سایت وارد شده و نام ها با استفاده از wpmu_validate_blog_signup ().
  • show_user_form () - زمینه برای ثبت نام کاربر (ورود و آدرس ایمیل).
  • validate_user_form () - بررسی ورود وارد شده و آدرس ها. ایمیل با wpmu_validate_user_signup ().
  • signup_another_blog () - زمینه های ثبت نام سایت های جدید با استفاده از show_blog_form () برای کاربرانی که قبلا در سایت ثبت شده اند.
  • validate_another_blog_signup () - آدرس سایت و نام را با استفاده از validate_blog_form () بررسی می کند.
  • signup_User () تابع اصلی برای خروجی زمینه صفحه ثبت نام است.
  • validate_user_signup () - آدرس ورود و آدرس ایمیل را بررسی می کند. ایمیل با validate_user_form ().
  • signup_blog () - زمینه ها برای ورود به آدرس، نام و دید از سایت (مرحله دوم ثبت نام) با استفاده از show_blog_form ().
  • validate_blog_signup () - ورود به سیستم، آدرس ایمیل را بررسی می کند. نامه، آدرس و نام سایت

در پایین فایل WP-Signup.php (از 646 دوخت در نسخه 4.1.1)، منطق اصلی صفحه ثبت نام، که از روش های فوق استفاده می کند. این قسمت از کد به تابع ارسال نمی شود. در پایان، get_footer () نامیده می شود.

کپی WP-Signup.php را کپی کنید

بعد، روش کپی کردن wp-signup.php در MU-plug-ins شرح داده خواهد شد و تغییرات را به چنگال توصیف می کند. ممکن است به نظر درست نیست. در عوض، شما می توانید توابع خود را از ابتدا برای چک کردن و خروجی فرم ها با استفاده از کلاس ها، نه توابع متعارف بنویسید. به نظر من، WP-signup.php در حال حاضر دارای تمام منطق لازم برای صفحه ما، تنها برای تغییرات جزئی باقی می ماند.

هنگام به روز رسانی وردپرس، WP-Signup.php تغییرات را از زمان به زمان تغییر می دهد، اما این بدان معنا نیست که با هر نسخه باید "Forc" آن را همگام سازی کند. توابع در داخل WP-Signup.php اساسا تنها توسط خروجی HTML مشغول به کار هستند، بررسی داده ها، ایجاد حساب ها و سایت ها در پیشوند WPMU_ مشغول به کار هستند، که در MS-Functions.php اعلام شده است.

ما یک تابع ایجاد می کنیم که فرم ثبت نام را در صفحه نمایش می دهد. برای انجام این کار، wp-signup.php را از ریشه وردپرس در mu-bubs / selena-network / ثبت نام / کپی کنید. آن را در داخل Mu-Pugins / Selena-Network / Signup / Plugin.php وصل کنید).

نیاز به wpmu_plugin_dir. "/selena-network/signup/wp-signup.php"؛

حذف تمام چک های مورد نیاز و غیر ضروری از همان ابتدای فایل کپی شده. در نسخه 4.1.1، این کل کد از 1 تا 80 خط است.

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

(خطوط 722 و 723)، و همچنین تماس Get_footer ().

در ابتدا، در ابتدا ایجاد selena_network_signup_main () در ابتدا، متغیر جهانی Active_signup را اعلام خواهیم کرد که تمام روش های دیگر از این فایل استفاده می شود. و اضافه کردن تماس رویداد قبل از_signup_form، که ما از شروع فایل حذف کردیم.

تابع selena_network_signup_main () (Global $ active_signup؛ do_action ("fure_signup_form")؛ // ...)

در حال حاضر تنها برای تغییر طرح در همه مکان هایی که لازم است تغییر می کند و صفحه ثبت نام آماده است.

خروجی فرم ثبت نام

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

// ایجاد یک network_signup add_shortcode کوتاه ("network_signup"، "selena_network_signup_main")؛

گزینه دوم این است که یک صفحه Page-Signup.php را در پوشه تم دختر ایجاد کنید. به جای کلمه "ثبت نام" شما می توانید از یک شناسه منحصر به فرد اختصاص داده شده به صفحه استفاده کنید. در داخل الگو، طرح بندی مورد نیاز را اضافه کنید و Selena_Network_signup_main () را در جای مناسب انتخاب کنید.

در نتیجه، صفحه ثبت نام من شروع به نگاه بسیار بهتر و تمیز تر کرد.

صفحه فعال سازی

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

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

Example.org/Activate / Page را از طریق رابط کاربری معمولی ایجاد کنید. به عنوان یک آدرس، از هر URL استفاده کنید که برای شما مناسب است.

فایل WP-Activate.php را به MU-Plugins کپی کنید و آن را به Mu-Pugins / Selena-Network / Signup / Plugin.php وصل کنید.

نیاز به wpmu_plugin_dir. "/selena-network/signup/wp-activate.php"؛

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

حذف تمام چک های غیر ضروری و نیاز - از 1 تا 69 خط در وردپرس 4.1.1. در نهایت، تماس Get_footer () را حذف کنید. محتویات باقیمانده با انتقال به تابع selena_network_activate_main ().

جالب است که متوجه شوید که ثابت WP_INSTALLING در اینجا قبل از بارگیری وردپرس (WP-Load.php) اعلام شد. حضور آن باعث ایجاد وردپرس برای بارگذاری پلاگین ها نمی شود.

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

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

نامه های فعال سازی با منابع مناسب

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

در زمان پر کردن و ارسال یک فرم در صفحه ثبت نام وردپرس تماس wpmu_signup_ کاربر.() یا wpmu_signup_ وبلاگ.() بسته به نوع ثبت نام. هر دو توابع یک ورودی جدید را در جدول wp_signups ایجاد می کنند که آن را با محتوای لازم پر می کنند، که کلید فعال سازی حساب وجود دارد.

پس از، بسته به تابع، wpmu_signup_ نامیده می شود کاربر._ نانوایی () یا wpmu_signup_ وبلاگ._اطلاع (). هر دو توابع عملکرد مشابهی دارند - تولید و ارسال یک نامه با یک مرجع فعال سازی، اما استدلال های مختلف را انجام دهید. در هر دو فیلتر برای "رهگیری" رویدادها وجود دارد.

اگر (! apply_filters ("wpmu_signup_user_notification"، $ user، $ user_email، $ key، $ meta)) بازگشت نادرست؛

برای فعال کردن حسابهای با ایجاد وبلاگ:

اگر (apply_filters ("wpmu_signup_blog_notification"، $ دامنه، $ path، $ title، $ کاربر، $ user_email، $ key، $ meta)) (بازگشت نادرست؛)

این تنها برای نوشتن دستگیره های خود است که در آن شما از طریق WP_MAIL () نامه های خود را ارسال می کنید، و در نهایت لزوما دروغ گفتن به طوری که وردپرس یک نامه فعال سازی را دو بار ارسال نمی کند - یکی از شما، دیگری - نامه به طور پیش فرض با یک لینک به طور پیش فرض WP-algent.php.

تابع selena_network_wpmu_signup_user_notification ($ user، $ user_email، $ key، $ meta \u003d array ()) (/ / header، header، text and letter headers // ... // ارسال یک نامه یا اضافه کردن یک کار cron برای ارسال یک نامه wp_mail ($ user_email، wp_specialchars_decode ($ subject)، $ message، $ message_headers)؛ // بازیابی نادرست به طوری که وردپرس یک نامه فعال سازی را ارسال نمی کند دو بار بازگشت نادرست؛) add_filter ("wpmu_signup_uver_notification"، "selena_network_wpmu_signup_user_notification"، 10، 4) ؛

اگر نامه ها را از طریق سرور SMTP ارسال کنید یا تعداد ثبت نام ها بسیار بزرگ است، باید فکر کنید که بلافاصله نامه ها را ارسال نکنید. در عوض، شما می توانید کارهای cron را با استفاده از وردپرس cron اضافه کنید.

دسترسی به WP-Signup.php و WP-Activital.php را نزدیک کنید

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

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

RewriteEngine در rewritebase / # دانش عبارات منظم هرگز اضافی نخواهد بود :) rewraterule ^ wp-signup \\ .php - rewriterule ^ wp-activate \\ .php - # شروع وردپرس # قوانین از وردپرس به طور پیش فرض را لمس نکنید :) # .. . # پایان دادن به وردپرس

نتیجه

برای این و بسیاری دیگر "مشکلات" مرتبط با وردپرس در اینترنت راه حل های زیادی وجود دارد. به عنوان مثال، برای ایجاد صفحات ثبت نام و فعال سازی، برخی از آنها پیشنهاد می شوند که WP-Signup.php اصلی را بازنویسی کنند و WP-algent.php را بازنویسی کنند. این نباید انجام شود زیرا در مورد به روز رسانی وردپرس، شما تمام تغییرات ساخته شده به فایل ها را از دست خواهید داد، و شما نمی توانید یکپارچگی هسته را بررسی کنید.

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

P.S.

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

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

27.03.2015 27.03.2015

توسعه دهنده وردپرس. او در همه چیز را دوست دارد و در ابزارهای جدید معامله می کند. با الهام از معماری اجزای Symfony.

  • صفحه ثبت نام خود را برای Multisite به جای استاندارد WP-Signup.php ایجاد کنید.

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

    • /wp-login.php - مجوز
    • /wp-login.php؟action\u003dregister - ثبت نام
    • /wp-login.php؟action\u003dlostpassword - تنظیم مجدد رمز عبور

    برای Multisite در WP-login.php شرایط جداگانه ای وجود دارد. بنابراین، هنگامی که بر روی لینک /wp-login.php؟action\u003dregister در Multisaite کلیک میکنید، وردپرس به صفحه /wp-signup.php هدایت می شود. در بسیاری از موضوعات، صفحه به نظر بسیار جذاب نیست، بنابراین ما خودمان را خواهیم ساخت.

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

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

    functions.php؟

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

    چرت زدن

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

    سفارش در فایل ها

    MU-Plugins ممکن است شامل هر تعداد فایل ها و هر نمودار باشد، که به نظر شما منطقی است. من در مورد چنین سلسله مراتب پایبند هستم:

    | -Mu-plugins | - | load.php | - | - | سلنا-شبکه | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | -... | - | - | - |-جتپاک | - | - | - | - | - -Plugin.php

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

    بارگیری های بارگذاری شده برای تمام افزونه ها load_muplugin_textdomain ("selena_network"، "/ selena-network / زبان /")؛ // ثبت نام شبکه نیاز به 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 است.

    مورد "ثبت نام": if (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) (بازگشت home_url (). "/ ثبت نام /"؛) add_filter ("wp_signup_location"، "selena_network_signup_page"، 99)؛

    selena_network - پیشوند، که من در نام تمام توابع درون mu-plugins در سایت من برای جلوگیری از درگیری ها استفاده می شود، باید با پیشوند منحصر به فرد خود جایگزین شود. اولویت اضافه کردن فیلتر 99، به دلیل برخی از پلاگین ها، مانند BBPress و BuddyPress، می توانید این آدرس را به خودتان بازنویسی کنید (MU-plugins زودتر از پلاگین های معمولی بارگیری می شود). لطفا توجه داشته باشید که صفحه اصلی_url () به جای network_site_url () استفاده می شود، برای ترک بازدید کننده در همان دامنه. شما می توانید هر URL را به عنوان یک آدرس استفاده کنید.

    ایجاد یک صفحه

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

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

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

    wP-Signup.php و WP-algent.php

    در حال حاضر ما یک تابع ایجاد می کنیم که فرم ثبت نام را نمایش می دهد. برای انجام این کار، فایل های WP-Signup.php را کپی کنید و WP-Activity.php را از وردپرس ریشه در MU-Bubs / Selena-Network / ثبت نام / (و فراموش نکنید که آنها را در داخل MU-Plugins / Selena-Network / ثبت نام / plugin.php). دستکاری های بیشتری با فایل ها بسیار دشوار و طولانی برای توصیف هستند، بنابراین آنها را به خودتان بسازید. من فقط توضیح خواهم داد که دقیقا باید انجام شود و فایل های منبع پروژه شما را منتشر کند:

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

    در داخل WP-Activate.php شما باید در مورد همین کار انجام دهید:

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

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

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

    صفحه ثبت نام نامه ای را به بازدید کننده ارسال می کند با اشاره به فعال شدن حساب. به طور پیش فرض، این تابع wpmu_signup_user_notification () از فایل MS-Functions.php است. قابلیت آن را می توان برای عملکرد آن قرض گرفت. دلیل اینکه شما می خواهید از استفاده از این تابع اجتناب کنید - یک مرجع فعال سازی حساب را با WP-algember.php ارسال می کند. شما می توانید این ویژگی را با استفاده از فیلتر WPMU_SIGNUP_USER_NOTFICATIFICATIFICATION غیر فعال کنید (اگر این کار را انجام دهید (اگر این کار را انجام ندهد، نامه فعال سازی دو بار ارسال می شود، در واقع دو حرف متفاوت).

    تابع Armyofselenagomez_wpmu_signup_user_notification ($ کاربر، $ user_mail، $ key، $ meta \u003d array ()) (/ / // کد از WPMU_SIGNUP_USER_NOTIFICATION () تابع WP_MAIL ($ user_email، wp_specialchars_decode ($ subject)، $ پیام، $ message_headers ) بازگشت نادرست؛) add_filter ("wpmu_signup_user_notification"، "armyofselegenagomez_wpmu_signup_user_notification"، 10، 4)؛

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

    نتیجه

    اینترنت دارای بسیاری از راه های بسیار صحیح نیست که یک چیز را انجام دهد - Apache Redirects، AJAX فرم هایی که بدون اسکریپت جاوا کار نمی کنند و غیره من واقعا آن را خیلی دوست نداشتم، بنابراین سعی کردم آن را به درستی انجام دهم وب سایت من

    من متوجه می شوم که فایل های ویرایش باید بتوانند با دقت و سعی نکنند از منبع به RANSNESH حرکت نکنند، اگر وردپرس فایل های WP-Signup.php و WP-Activate.php را تغییر دهد، آنها را آسان تر برای پیدا کردن تغییرات پیدا کرد .

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

    جایزه. حفاظت در برابر اسپم ها

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

    RewRiteEngine در Rewritebase / Rewiterule ^ WP-Signup \\ .php - Rewiterule ^ WP-Activate \\ .php - # شروع وردپرس # قوانین از وردپرس به طور پیش فرض لمس نمی کنند :) # ... # پایان وردپرس

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

    Segal ما بهره برداری از آسیب پذیری بحرانی 1day را در CMS محبوب جوملا، که در پایان ماه اکتبر در اینترنت قرار گرفت، در نظر خواهیم گرفت. این در مورد آسیب پذیری با اعداد خواهد بود CVE-2016-8869, CVE-2016-8870 و CVE-2016-9081. هر سه از یک قطعه کد رخ می دهد، که یک بار در عمق چارچوب، منتظر ساعت های خود بود، پس از آن به صورت رایگان آزاد و هرج و مرج را با هرج و مرج، سایت های هک شده و اشک در هر کاربر بی گناه این جوملا به ارمغان بیاورد. تنها توسعه دهندگان شجاع ترین و جسورانه که چشم آنها از نور مانیتورها قرمز هستند و صفحه کلید با خرده نان پوشیده می شود، آنها توانستند عواقب تورم را به چالش بکشد و سر خود را بر روی محراب رفع قرار دهند.

    هشدار

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

    چرا همه چیز شروع شد

    در 6 اکتبر سال 2016، Damis Palma (Demis Palma) یک موضوع را در مبادله پشته ایجاد کرد، که در واقع، در واقع، در جوملا نسخه 3.6، دو روش برای ثبت نام کاربران با همان نام ثبت نام وجود دارد ()؟ اولین بار در کنترل کننده UserControlerregistration قرار دارد و دوم در UserControlleruser است. Damis می خواست بداند که آیا کاربران Constrolleruser :: Register () از جایی استفاده می شود، یا تنها یک انشعاب تکاملی است که از منطق قدیمی باقی می ماند. او این واقعیت را مختل کرد که حتی اگر این روش در هر ارائه استفاده نشود، می توان آن را با استفاده از یک درخواست تشکیل داد. پاسخ از توسعه دهنده تحت نام مستعار Itoctopus بود، تایید: مشکل واقعا وجود دارد. و یک گزارش را به توسعه دهندگان جوملا ارسال کرد.

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

    پس از آن، دیوید تامپلینی (Davide Tampellini) اشکال را به وضعیت ثبت نام می رساند یک کاربر ساده نیست، بلکه مدیر است. و در 21 اکتبر، تیم امنیتی جوملا یک پرونده جدید را وارد می کند. این در حال حاضر در مورد افزایش امتیازات صحبت می کند. در همان روز، اعلامیه در وب سایت جوملا ظاهر می شود که در روز سه شنبه، 25 اکتبر، نسخه دیگری با شماره توالی 3.6.3 منتشر خواهد شد، که آسیب پذیری بحرانی را در هسته سیستم اصلاح می کند.

    در 25 اکتبر، تیم اعتصاب جوملا، آخرین مشکل را پیدا می کند که یک قطعه کد توسط Damis کشف شده است. سپس در شعبه اصلی جوملا رسمی جوملا، تعهد 21 اکتبر، با نام نامعلوم آماده سازی 3.6.4 نسخه پایدار، که رفع اشکال بدبخت است.

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

    در 27 اکتبر، پژوهشگر هری رابرتز، یک سوء استفاده آماده شده را در مخزن تحقیقاتی Xiphos ارائه می دهد که می تواند یک فایل پی اچ پی را به یک سرور با CMS آسیب پذیر آپلود کند.

    جزئیات

    خوب، با پیش از تاریخ، به پایان رسید، به جالب ترین چیز بروید - تشخیص آسیب پذیری. به عنوان یک نسخه آزمایشی، جوملا 3.6.3 را نصب کردم، بنابراین تمام اعداد ردیف برای این نسخه مناسب خواهد بود. و تمام مسیرها به فایل هایی که بعدا خواهید دید، نسبت به ریشه CMS نصب شده نشان داده می شود.

    با تشکر از پالم Damis Palm، ما می دانیم که دو روش وجود دارد که ثبت نام کاربر را در سیستم انجام می دهند. اولین بار توسط CMS استفاده می شود و در /components/com_users/controllers/comers/controllers/RCistration.php:108 است. دوم (یکی که ما باید تماس بگیرید)، زندگی می کند / components / com_users / controllers / user.php: 293. بیایید به آن نزدیکتر نگاه کنیم.

    286: / ** 287: * روش ثبت نام کاربر. 288: 289: * return boolean 290: * 291: * Szaince 1.6 292: * / 293: عملکرد عمومی ثبت نام () 294: (295: JSession :: CheckToken ("پست") یا jexit (jtext :: _ ("jinvalid_token"))؛ ... 300: // دریافت اطلاعات فرم 301: $ data \u003d $ this-\u003e input-\u003e post-\u003e دریافت ("کاربر"، آرایه ()، "آرایه")؛ .. 315: $ return \u003d $ model-\u003e validate ($ فرم، داده های $)؛ 316: 317: // بررسی خطاها. 318: اگر ($ بازگشت \u003d\u003d\u003d FALSE) 319: (... 345: / پایان ثبت نام 346: $ return \u003d $ model-\u003e ثبت نام ($ داده ها)؛

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

    ما آن را فهمیدیم که چه اتفاقی می افتد زمانی که ثبت نام کاربر منظم: چه اطلاعاتی ارسال می شود و چگونه آنها پردازش می شوند. اگر ثبت نام کاربر در تنظیمات فعال شود، فرم را می توان در http: //joomla.local/index.php/component/users/ یافت؟ مشاهده \u003d ثبت نام.


    درخواست قانونی برای ثبت نام کاربر به نظر می رسد تصویر زیر است.


    اجزای com_users مسئول کار با کاربران است. توجه به پارامتر وظیفه در پرس و جو. این کنترل $ است. روش $ بیایید به ساختار فایل نگاه کنیم.

    نام اسکریپت در پوشه کنترل کننده ها. مطابق با نام های کنترل کننده های نامیده می شود. از آنجا که در درخواست ما در حال حاضر $ controller \u003d "ثبت نام"، فایل تماس خواهد گرفت. ثبت نام .php و روش ثبت نام آن.

    توجه، سوال: نحوه انتقال پردازش ثبت نام در یک منطقه آسیب پذیر در کد؟ شما احتمالا قبلا حدس زده اید نام روش های آسیب پذیر و فعلی همزمان (ثبت نام)، بنابراین ما فقط می توانیم نام کنترل کننده نامیده می شود. و کجا کنترل کننده آسیب پذیر است؟ درست در فایل user.php.. به نظر می رسد $ controller \u003d "کاربر". ما همه را جمع آوری می کنیم و task \u003d user.register را دریافت می کنیم. در حال حاضر درخواست ثبت نام توسط روش مورد نیاز ما پردازش می شود.


    دومین چیزی که ما باید انجام دهیم این است که اطلاعات را در فرمت مناسب ارسال کنیم. همه چیز اینجا ساده است ثبت نام قانونی () منتظر یک آرایه از ما به نام JForm، که در آن ما انتقال داده ها را به ثبت نام - نام، ورود به سیستم، رمز عبور، ایمیل (نگاه کنید به تصویر با یک پرس و جو).

    • /components/com_users/controllers/registration.php: 124: // دریافت اطلاعات کاربر. 125: $ requestdata \u003d $ this-\u003e input-\u003e post-\u003e دریافت ("جگر"، آرایه ()، "آرایه")؛

    بخش ما این داده ها را از آرایه به نام کاربر دریافت می کند.

    • /components/com_users/controllers/user.php: 301: // دریافت اطلاعات فرم. 302: $ data \u003d $ this-\u003e input-\u003e post-\u003e دریافت ("کاربر"، آرایه ()، "آرایه")؛

    بنابراین، نام تمام پارامترها را با jfrom بر روی کاربر تغییر می دهیم.

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

    • /components/com_users/controllers/user.php: 296: JSession :: CheckToken ("پست") یا jexit (jinvalid_token))؛

    به نظر می رسد یک هش MD5، و شما می توانید آن را، به عنوان مثال، از فرم مجوز در سایت /index.php/component/users/؟view\u003dlogin.


    حالا شما می توانید کاربران را از طریق روش دلخواه ایجاد کنید. اگر همه چیز اتفاق افتاد، من تبریک می گوییم - شما فقط آسیب پذیری را درک کردید CVE-2016-8870 "تایید گمشده مجوز برای ثبت نام کاربران جدید".

    در اینجا این است که چگونه در روش "کار" ثبت نام () از کنترل کننده کاربران Constrollerregistration به نظر می رسد:

    • /components/com_users/controllers/registration.php: 113: // اگر ثبت نام غیرفعال باشد - تغییر مسیر به صفحه ورود به سیستم. 114: اگر (jcomponenthelper :: getParams ("com_users") -\u003e دریافت ("allowuserregistration") \u003d\u003d 0) 115: (116: $ این-\u003e setredirect (jroute :: _ ("index.php؟ option \u003d com_users & مشاهده \u003d ورود به سیستم "، false))؛ 117: 118: بازگشت نادرست؛ 119 :)

    و به همین ترتیب آسیب پذیر است:

    • /components/com_users/controllers/user.php:

    بله، به هیچ وجه.

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

    ادامه در دسترس تنها به شرکت کنندگان

    گزینه 1. پیوستن به جامعه سایت برای خواندن تمام مواد در سایت

    عضویت در جامعه در طول دوره مشخص شده، شما را به تمام مواد هکر دسترسی پیدا می کند، تخفیف تجمع شخصی خود را افزایش می دهد و امتیاز نمره XAKEP حرفه ای را جمع آوری می کند!

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

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

    عملکرد موضوع: تهاجم به قلمرو پلاگین ها

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

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

    من قبلا قبلا در یکی از مقالات من یک قانون تجربی "پلاگین های قلمرو" را تشکیل دادم

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

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

    خوشبختانه یک راه حل ساده وجود دارد که علیه حاکمیت "قلمرو پلاگین ها" نیست.

    مقدمه ای بر کتابخانه فعال سازی پلاگین TGM

    تنظیم فعال سازی پلاگین TGM

    توجه به عملکرد TGMPA () با دو پارامتر در انتهای کد. پارامتر دوم متغیر $ config است که همچنین یک آرایه مانند $ plugins است. به شرح زیر از نام آن، شما می توانید کتابخانه فعال سازی پلاگین TGM را با استفاده از آن پیکربندی کنید از این توده. متغیر مجموعه ای از گزینه های خود را می پذیرد:

    • شناسه (رشته) یک شناسه منحصر به فرد برای کتابخانه فعال سازی پلاگین TGM در موضوع شماست. این بسیار مهم است: اگر پلاگین های دیگر نیز از فعال سازی پلاگین TGM استفاده کنند، شناسه های مختلف از اختلافات احتمالی جلوگیری خواهند کرد.
    • default_Path (رشته) - یک مسیر مطلق پیش فرض برای پلاگین ها در موضوع شما. هنگامی که شما آن را نصب می کنید، می توانید از نام فایل ZIP به عنوان مقدار پارامتر منبع برای پلاگین خود استفاده کنید.
    • منو (رشته) - منوی منو برای نصب پلاگین ها.
    • has_notices (boolean) - اگر مشخص شده در حقیقت، اعلان های اداری برای پلاگین های مورد نیاز / توصیه شده صادر شود.
    • از بین بردن (boolean) - اگر مشخص شده در درست باشد، کاربر می تواند اطلاعیه ها را "بسته" کند.
    • dismiss_msg (رشته) - اگر گزینه اخراج شده در اشتباه تنظیم شده باشد، این پیام بالاتر از اطلاع مدیر نشان داده خواهد شد.
    • iS_Automatic (boolean) - اگر در TRUE مشخص شده باشد، پلاگین ها پس از آنکه کاربر موافقت می کند تا آنها را نصب کند، فعال خواهد شد.
    • پیام (رشته) - HTML اضافی، نمایش داده شده در مقابل جدول پلاگین.
    • رشته ها (آرایه) - آرایه ای که شامل پیام های نمایش داده می شود. شما می توانید آنها را به عنوان خطوط پخش تنظیم کنید. به فایل example.php نگاه کنید تا لیست کامل تمام پیام ها را ببینید.
    "mytheme-tgmpa"، // id منحصر به فرد TGMPA شما "default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /"، // پیش فرض مطلق مسیر "منو" \u003d\u003e "mytheme-install-install-plugins"، // menu slug "has_notices" \u003d\u003e true، // نمایش اطلاعیه های مدیریت "dismissable" \u003d\u003e false // این اعلان ها "dismiss_msg" \u003d\u003e "من واقعا واقعا نیاز به شما برای نصب این پلاگین ها، خوب؟"، // این پیام خروجی در بالای nag "IS_Automatic" \u003d\u003e درست است، // به طور خودکار فعال کردن پلاگین ها پس از نصب "پیام" \u003d\u003e ""، // پیام به خروجی درست قبل از پلاگین جدول" رشته ها "\u003d\u003e آرایه () ؛// array از رشته های پیام که فعال سازی پلاگین TGM استفاده می کند)؛؟\u003e

    نتیجه

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

    شما در مورد این ابزار چه فکر میکنید؟ آیا تا به حال از آن استفاده کرده اید، آیا قصد دارید از آن در آینده استفاده کنید؟ افکار خود را به اشتراک بگذارید!