Reklāmas aktivizēšana PHP. Kā izveidot savu reģistrācijas lapu WordPress Multiite

Ļauj izmantot vienu WordPress iestatījumu vairākām vietnēm, tajā pašā laikā. Tajā pašā laikā katra vietne saņem savas tabulas datubāzē ar unikālu prefiksu.

Tabulas ar reģistrētu lietotāju datiem, kas ir kopīgi visām tīkla vietnēm. Tas ir noteikts plus un reģistrējot kādu dienu, varat piekļūt vairākām vietnēm. Turklāt katrā vietnē tajā pašā kontā var būt atšķirīgas tiesības. Piemēram, vienā vietnē lietotājs var būt redaktors un cits administrators.

Parastajā uzstādīšanā WordPress lapa Reģistrācija, autorizācija un paroles atiestatīšana parāda WP-login.php failu.

  • wP-login.php - atļauja
  • wP-login.php? Action \u003d reģistrs - reģistrācija
  • wP-login.php? Action \u003d LostPassword - paroles atiestatīšana

Multisite režīmā WordPress kodols sāk rīkoties nedaudz atšķirīgi, un, pārejot uz WP-login.php saiti? Action \u003d reģistrs saņems novirzīšanu uz WP-Deckup.php. Šī ir jūsu tīkla reģistrācijas lapa, kas ir noklusējuma WordPress.

Papildus parasto lietotāju kontu reģistrēšanai varat izveidot jaunu vietni, ja Superministrator ir iespējojis šādu iespēju tīkla iestatījumos (tīkla iestatījumi).

Lielākajā daļā tēmu reģistrācijas lapa nav ļoti laba. Daudzas tēmas izmanto CSS sistēmas, piemēram, bootstrap, un to īpašās klases dažādu elementu stilizācijai lapās, tāpēc ir grūti rakstīt vienu html, kas būs piemērots ikvienam.

Bet jums nevajadzētu izmisumā, ja lapa izskatās nekārtīga. WP-Deckup.php fails ir lieliska lieta sākumā, kad nav laika, lai izstrādātu katru vietnes daļu - jūs varat koncentrēties uz citiem vairāk vairāk svarīgas lapas un saturu.

Kad jūs būsiet gatavi padarīt savu lappuse Reģistrācija, WP-Deck.php būs labs paraugs, un piemērs, kurā ir viegli saprast funkciju spektru, ko WordPress nodrošina lietotāju ievadīto datu apstrādi un pārbaudi un izveido jaunus kontus.

Galvenais mājas lapas tīkls

Pēc noklusējuma WordPress atver reģistrācijas lapu (WP-Deck.php) galvenajā domēnā (tīmekļa vietnes) tīklā. Neskatoties uz to, jūs varat izveidot reģistrācijas lapas katrai tīkla vietnei, pat ja viņiem ir tēmas.

Mēs izskatīsim lietu, kad vienā tīkla vietnēs tiek izmantota viena tēma, bet katrai no tām ir reģistrācijas lapa. Vietnes atšķiras mēles (angļu un krievu), tāpēc reģistrācijas lapa tiks parādīta "dzimtā" valodas vietnē. Ja vietnes izmanto dažādas tēmas, viss būs atkarīgs no tā, kādas tēmas, kas atbilstu viņiem to pašu izkārtojumu (lieliska situācija, kas var virzīt jūs, lai apvienotu visas tās tēmas), vai ir vērts izstrādāt lapas atsevišķi.

Alternatīva funkcijām.php.

Pasūtiet failus

Mu-spraudņi var saturēt jebkuru failu skaitu un struktūru, kas jums šķiet loģiska. Es ievēroju par šādu hierarhiju:

| Mu-spraudņi | | Ielādēt.php | | Selena tīkls | | | Pierakstīšanās | | | | plugin.php | | | ... | | | | Jetpack | | | | spraudnis.php.

Slodzes.Php failā, tulkojumi un visi nepieciešamie "spraudņi" ir savienoti:

// Mu-spraudņu slodzes slodzes ielāde load_muplugin_textdomain ("Selena_network", "/ Selena tīkls / valodas /"); Reģistrācijas lapas funkcionālajam darbam nepieciešama WPMU_PLUGIN_DIR. "/ /elena-network/signup/plugin.php"; // Vēl viens spraudnis // pieprasīt wpmu_plugin_dir ...

Selena-tīkla direktorijā tiek glabātas plug-in mapes. Katram ir savs spraudnis.php, ko mēs savienojam uz ielādes.php. Tas dod elastību un spēju uzreiz atspējot un ieslēgt atsevišķas sastāvdaļas Par darba projektu ārkārtas situācijā.

Reģistrācijas lapa

Izpratne par to, kur un kā mēs rakstīs kodu, jūs varat doties uz reģistrācijas lapas izveidi.

Izveidojiet lapu ar piemēru.org/signup/ izmantojot parasto interfeisu. Kā adresi, jūs varat izmantot jebkuru URL, kas šķiet piemērots jūsu projektam.

Novirzīt uz vēlamo reģistrācijas lapu

Par WordPress, lai uzzinātu par mūsu jauno reģistrācijas lapu un veica novirzīšanu uz to, ja noklikšķinot uz "Reģistrēties", tiek izmantots WP_Signup_Location filtrs. To var atrast iekšpusē WP-login.php, un tas ir tas, kas ir atbildīgs par novirzīšanu noklusējuma WP-Deck.php.

Case "Reģistrēties": ja (is_multisite ()) (WP_Redirect (lietojumprogramma) ("wp_signup_location", Network_site_url ("WP-Deck.php"))); izeja; // ...

Kā jūs atceraties, pēc noklusējuma, reģistrācijas lapa tiek atvērta galvenajā tīkla jomā. Tāpēc šeit tiek izmantots tīkls_site_url ().

Pievienojiet sava filtra apstrādi uz MU-Spraudņu / Selena-Network / Reģistrācijai / Spraudņot.php, kas tiks dota adrese reģistrācijas lapā pašreizējā vietnē:

Funkcija selena_network_signup_page ($ URL);) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network - prefikss, ko es izmantoju visu funkciju nosaukumos, kas atrodas manā vietnē, lai izvairītos no konfliktiem, jāaizstāj ar savu unikālo prefiksu. Filtra pievienošanas prioritāte 99, jo daži spraudņi, piemēram, bbpress un buddypress, var pārrakstīt šo adresi uz jūsu pašu (Mu-spraudņi ir ielādēti agrāk nekā parastie spraudņi, skatīt iepriekš).

Lūdzu, ņemiet vērā, ka tiek izmantots home_url (), kas, atšķirībā no tīkla_site_url (), sniedz pašreizējās vietnes adresi, nevis galveno tīkla vietni.

WP-signUp.php funkcionalitāte

WP-SignUp.php fails satur liels skaits Funkcijas un kods. Lai redzētu attēlu kopumā, varat izmantot locīšanas kodu. Kā likums, angļu valodā to sauc par "koda locīšanu".

Faila sākumā no 1 līdz 80, līnija (versijā 4.1.1), tiek veiktas dažādas pārbaudes un izdrukā "sākuma" lapu, izmantojot Get_header ().

Tālāk, daudzas metodes ir deklarētas un pirms mēs sākam strādāt ar viņiem, ir vērts saprast, kas padara katru funkciju. Iekšpusē daudzi no tiem bieži tiek izmantoti citas funkcijas ar WPMU_ prefiksu, visi no tiem ir deklarēti WP-ietver / MS-Feekcijas.php failā. Šī sadaļa ir grūti saprast, neredzot kodu pats. Zem neliela apraksta pamatfunkcijas, ja jums ir grūtības.

  • wpmu_signup_stylesheet () - papildu CSS izvade reģistrācijas lapā.
  • show_blog_form () - lauki vietnes reģistrācijai (adrese, vārda redzamība meklētājprogrammām).
  • validate_blog_form () - ievadītās vietnes adreses un vārdu pārbaude, izmantojot wpmu_validate_blog_signup ().
  • show_user_form () - Lauki, lai reģistrētu lietotāju (pieteikšanās un e-pasta adrese).
  • validate_user_form () - Pieteikšanās pārbaude un adreses. Pasts ar wpmu_validate_user_signup ().
  • reģistrēšanās_another_blog () - lauki jaunu vietņu reģistrēšanai, izmantojot Show_blog_form () lietotājiem, kas jau ir reģistrēti vietnē.
  • validate_another_blog_signup () - pārbauda vietnes adresi un vārdu, izmantojot validate_blog_form ().
  • dIGNUP_USER () ir galvenā funkcija, lai izvadītu reģistrācijas lauku.
  • validate_user_signup () - pārbauda pieteikšanās un e-pasta adresi. Pasts ar validate_user_form ().
  • reģistrēšanās_blog () - lauki, lai ievadītu vietnes adresi, nosaukumu un redzamību (otrais reģistrācijas solis), izmantojot Show_blog_form ().
  • validate_blog_signup () - pārbauda pieteikumvārdu, e-pasta adresi. Pasts, adrese un vietnes nosaukums.

WP-DOGLUP.PHP faila apakšā (no 646 šuves 4.1.1 versijā), galvenā reģistrācijas lapas loģika, kas izmanto iepriekš minētās metodes. Šī koda daļa netiek iesniegta funkcijai. Beigās, Get_footer () sauc.

Kopējiet funkcionālo WP-DIGNUP.PHP

Pēc tam tiks aprakstīts, ka WP-Deck.php kopēšanas procedūra tiks aprakstīta un veicot izmaiņas dakšā. Tas var šķist ne pareizi. Tā vietā varat rakstīt savas funkcijas no nulles, lai pārbaudītu un izejas veidlapas, izmantojot klases, nevis parastās funkcijas. Manuprāt, WP-Deckup.php jau ir visu nepieciešamo loģiku mūsu lapā, tas joprojām ir tikai nelielas izmaiņas.

Atjauninot WordPress, WP-SignUp.php laika pa laikam mainās, bet tas nenozīmē, ka ar katru atbrīvošanu būs jāsinhronizē tās "FORC". WP-Deckup.php iekšējā funkcijas būtībā nodarbojas tikai ar HTML izeju, datu pārbaude, kontu un vietņu izveide ir iesaistīti WPMU_ prefiksā, kas deklarēti MS-Feekcijas.php.

Mēs izveidosim funkciju, kas parādīs reģistrācijas veidlapu lapā. Lai to izdarītu, kopējiet WP-Deckup.php no WordPress Root Mu-Sugings / Selena-Network / Reģistrācijai /. Pievienojiet to iekšpusē mu-pugins / selena tīkla / pierakstīšanās / spraudņa.php).

Pieprasīt wpmu_plugin_dir. "/selena-network/signup/wp-signup.php";

Izdzēsiet visas pieprasītās un nevajadzīgās pārbaudes no paša kopētā faila sākuma. Šajā versijā 4.1.1, tas ir viss kods no 1 līdz 80 līnijām.

Tagad mēs esam gatavi izveidot galveno funkciju, lai parādītu reģistrācijas veidlapu. Lai to izdarītu, visi loģika no 646. līnijas un faila beigām mēs tiks pārcelti uz funkciju, ko sauc par Selena_network_signup_main. Tajā pašā galā jūs izdzēsiet divus nevajadzīgus aizvēršanas

(722. un 723. līnijas), kā arī zvans get_footer ().

Jaunizveidotajā selena_network_signup_main () pašā sākumā, mēs paziņosim globālo mainīgo Active_signup, ka visas citas metodes no šīs faila lietošanas. Un pievienojiet pirms_signup_form notikumu zvanu, ko mēs izdzēsām no faila sākuma.

Funkcija selena_network_signup_main () (Global $ Active_signup; Do_action ("pirms_signup_form"); // ...)

Tagad paliek tikai, lai mainītu izkārtojumu visās vietās, kur tas ir nepieciešams, un reģistrācijas lapa ir gatava.

Reģistrācijas veidlapas produkcija

Šeit ir vismaz divas iespējas. Ērtāks veids, kā izveidot īsziņu un ievietot to lapā, izmantojot parasto redaktoru.

// izveidot tīkla_signup add_shortcode shortcode ("tīkla_signup", "selena_network_signup_main");

Otrā iespēja ir izveidot lapu-signUp.php lapu meitas tēmas mapē. Vārda "pierakstīšanās" vietā varat izmantot unikālu ID, kas piešķirts lapai. Veidnes iekšpusē pievienojiet nepieciešamo izkārtojumu un izveidojiet izvēlieties SELENA_NETWORK_SIGNUP_MAIN () pareizajā vietā.

Tā rezultātā mana reģistrācijas lapa sāka izskatīties daudz labāka un tīrāka.

Aktivizācijas lapa

Pēc noklusējuma WordPress tradicionāli sadala reģistrācijas procesu multisite diviem soļiem - aizpildot veidlapu uz vietas un aktivizēšanas konta, kad saite tiek nosūtīta uz izsūtīto elektroniskā vēstule. Pēc iepriekšējā sadaļā izveidotā veidlapa WordPress nosūta vēstuli ar nelielu instrukciju un atsauci, lai aktivizētu kontu.

Par izejas aktivizēšanas lapu, WP-Activate.php fails tiek atbildēts WordPress saknes direktorijā. WP-Activate.php var arī pilnībā mainīt. Šis process ir līdzīgs tam, ko mēs jau esam darījuši WP-Deckup.php.

Izveidojiet piemēru.org/activate / lapu, izmantojot parasto interfeisu. Kā adresi izmantojiet jebkuru URL, kas jums šķiet piemērots.

Kopējiet WP Activate.php failu uz jūsu MU-spraudņiem un savienojiet to ar MU-PUGINS / SELENA-NETWORK / Reģistrācijai / Sugin.php.

Pieprasīt wpmu_plugin_dir. "/ /elena-network/signup/wp-activate.php";

Iekšpusē, ne tik daudz satura, atšķirībā no WP-Deckup.php. Fails veic vienu darbību - aktivizē kontu, ja tiek iegūta pareizā atslēga un parāda kļūdas ziņojumu vai veiksmīgu darbību.

Dzēst visas nevajadzīgās pārbaudes un pieprasīt - no 1 līdz 69 līnijas WordPress 4.1.1. Tajā pašā beigās noņemiet GET_FOTER () zvanu. Atlikušo saturu, pārsūtot uz Selena_network_activate_main () funkciju.

Tas ir interesanti pamanīt, ka WP_Installing konstante tika paziņots šeit pirms iekraušanas WordPress (WP-Load.php). Tās klātbūtne izraisa WordPress nevis ielādēt spraudņus.

Tāpat kā reģistrācijas lapas gadījumā, tas paliek tikai, lai noteiktu izkārtojumu, ja tas ir nepieciešams. Varat arī mainīt tekstu parādīto ziņojumu (šajā gadījumā, neaizmirstiet pievienot teksta domēnu jūsu Mu-spraudņi visiem funkciju tulkotājiem, tas nav instalēts nekur citur).

Gatavo funkciju var izmantot iepriekš noteiktā lapā, izmantojot īsziņu vai atsevišķu veidni meitasuzņēmumā.

Aktivizācijas vēstules ar pareizām atsaucēm

Aktivizācijas lapa ir gatava darbam, bet WordPress par to nezina un joprojām nosūtīs aktivizēšanas vēstules, atsaucoties uz WP Activate.php. Atšķirībā no WP-Deckup.php nav filtra, kas ļautu mainīt adresi. Tā vietā jums ir nepieciešams rakstīt savu funkciju, kas nosūtīs vēstules ar pareizām saitēm.

Brīdī aizpildot un nosūtot veidlapu lapā reģistrācija WordPress Zvani wpmu_signup_ lietotājs.() vai wpmu_signup_ emuārs.() Atkarībā no reģistrācijas veida. Abas funkcijas rada jaunu ierakstu WP_Signups tabulā, aizpildot to ar nepieciešamo saturu, starp kuriem ir konta aktivizēšanas atslēga.

Pēc tam, atkarībā no funkcijas, WPMU_Signup_ tiek saukts lietotājs._Notifikācija () vai wpmu_signup_ emuārs._Notifikācija (). Abām funkcijām ir līdzīgas funkcionalitātes - ģenerēt un nosūtīt vēstuli ar aktivizācijas atsauci, bet ņem dažādus argumentus. Gan ir Filtri "pārtveršanu" notikumiem.

Ja (! Pieteikties_filters ("wpmu_signup_user_notifikācija", $ lietotājs, $ user_email, $ taustiņš, $ meta)) Atgriezties FALSE;

Lai aktivizētu kontus ar emuāra izveidi:

Ja (! Pieteikties_filters ("wpmu_signup_blog_notifikācija", $ domēns, $ ceļš, $ titulu, $ lietotājs, $ user_email, $ taustiņš, $ meta)) (atgriezties FALSE;)

Tas paliek tikai, lai uzrakstītu savus apstrādātājus, kurā jūs sūtāt vēstules, izmantojot WP_Mail (), un pašā galā, lai sniegtu nepatiesu, lai WordPress nesūta aktivizācijas vēstuli divreiz - viens no jums, vēl vienu - vēstuli pēc noklusējuma ar saiti uz WP-Activate.php.

Funkcija SELENA_NETWORK_WPMU_SIGNUP_USER_NOTIFIKĀCIJA ($ lietotājs, $ user_email, $ taustiņš, $ meta \u003d masīvs ()) (// Izveidot galveni, teksta un burtu virsrakstus // ... // Nosūtiet vēstuli vai pievienojiet Cron-uzdevumu, lai nosūtītu vēstuli Wp_mail ($ user_email, wp_specialchars_decode ($ subjekts), $ ziņu, $ message_headers); // atgūt viltus tā, ka WordPress nesūta aktivizācijas burtu divreiz atgriezties false;) add_filter ("wpmu_signup_uver_wotification", "selena_network_wpmu_signup_user_noting", 10, 4) ;

Ja sūtāt vēstules, izmantojot SMTP serveri vai reģistrāciju skaits ir ļoti liels, jums vajadzētu domāt par vēstuļu nosūtīšanu uzreiz. Tā vietā varat pievienot Cron uzdevumus, izmantojot WordPress Cron.

Cieša piekļuve WP-Deckup.php un WP-Activate.php

Izveidojot savas reģistrācijas un aktivizēšanas lapas, var būt nepieciešams slēgt "oriģinālus". Piemēram, ja reģistrācijas lapā ir papildu lauki, kurai jāaizpilda. Arī daudzas WordPress vietnes ir pakļautas surogātpasta reģistrācijai.

Atrisiniet divas problēmas ar vienu darbību var lūgt Apache dot 404 gadījumā mēģinot atvērt šīs lapas. Lai to izdarītu, jums vienkārši ir nepieciešams reģistrēt pāris papildu pārrakstotāju uz konfigurācijas failu Or.htaccess.

RewwriteElgine uz RewriteBase / # zināšanas par regulārām izteiksmēm nekad nebūs lieks :) Rewriterule ^ wp-pierakstīšanās .php - rewriteRule ^ wp-aktivēt \\ .php - # sākt WordPress # Noteikumi no WordPress pēc noklusējuma Nepieskarieties :) # .. # End WordPress.

Secinājums

Šim un daudzām citām problēmām, kas saistītas ar WordPress internetā, ir daudz risinājumu. Piemēram, lai izveidotu reģistrācijas un aktivizācijas lapas, daži tiek piedāvāti, lai pārrakstītu sākotnējo WP-Deckup.php un WP-Activate.php. Tas nav jādara, jo gadījumā, ja WordPress atjauninājumu, jūs zaudēsiet visas izmaiņas, kas veiktas failos, un jūs nevarat, pārbaudiet integritāti kodola, izmantojot.

Izstrādājot jebkuru pievienošanu, tēmas vai risinājumi ir pavadīti kādu laiku, lai risinātu to, kas notiek WordPress iekšā. Šim nolūkam ir daudz noderīgu atkļūdošanas rīku.

P.S.

Lai automātiski piešķirtu dažādas lomas, jauni lietotāji var izmantot multisite lietotāju pārvaldības spraudni.

Ja jums ir kādi jautājumi vai grūtības reģistrācijas un aktivizācijas lapu izveidē pēc raksta lasīšanas, atstājiet komentāru, un mēs atbildēsim.

27.03.2015 27.03.2015

WordPress izstrādātājs. Viņš mīl kārtību visu un nodarbojas ar jauniem instrumentiem. Iedvesmojoties no simfonijas komponentu arhitektūras.

  • Izveidojiet savu reģistrācijas lapu multisite nevis standarta WP-Deckup.php.

    Parastā uzstādīšana WordPress Reģistrācijas lapa (autorizācija, paroles atiestatīšana) parāda WP-login.php failu.

    • /wp-login.php - atļauja
    • /wp-login.php?action\u003dRegister - reģistrācija
    • /wp-login.php?action\u003dlostpassword - paroles atiestatīšana

    Multiite WP-login.php ir atsevišķi apstākļi. Tātad, noklikšķinot uz saites /wp-login.php?action\u003dRegister uz multisaite, WordPress padarīs novirzīšanu uz /wp-signup.php lapā. Daudzās tēmās lapa nav ļoti pievilcīga, tāpēc mēs padarīsim mūsu pašu.

    Galvenais mājas lapas tīkls

    Pēc noklusējuma WordPress atver reģistrācijas lapu (WP-Deck.php) galvenajā domēnā (tīmekļa vietnes) tīklā. Tomēr jūs varat veikt atsevišķu reģistrācijas lapu katrai tīkla vietnei, pat ja viņiem ir dažādas tēmas. Mēs izskatīsim lietu, kad visās tīkla vietnēs ir sava reģistrācijas lapa, bet tajā pašā tēmā tiek izmantota un vietnes atšķiras tikai valodā. Ja tiek izmantotas dažādas tēmas, jums būs nepieciešams rakstīt vairāk kodu.

    funkcijas.php?

    Ne. Šķiet, ka šī faila nosaukums ir minēts jebkurā rakstā par WordPress. Mūsu gadījumā, ņemot vērā faktu, ka reģistrācijas funkcionalitāte ir paredzēta vairākām vietām, ir lietderīgi to izmantot mu-spraudņos, kas tiek ielādēti, atverot jebkuru vietni.

    Liriskā novirze

    Jāatzīmē, ka Mu-spraudņi ir iekrauti agrāk nekā parastie spraudņi un līdz brīdim, kad WordPress kodols ir pilnībā lejupielādēts, tāpēc aicinājums dažām funkcijām var izraisīt Fatabal kļūdas PHP. Līdzīgi "agri" lejupielādei ir savas priekšrocības. Pieņemsim teikt iekšā jebkurā tēmā nevar pieķerties uz kādu darbību, kas tiek aktivizēta pirms lejupielādes funkcijas.php failu no tēmas. Tas var kalpot kā jetpack_module_loaded_related-posts spraudnis (saistītie-posts - nosaukums moduļa), ar kuru ir iespējams izsekot aktivitāti moduļus jetpack. Nav iespējams "sajūgt" no tēmas faila uz šo darbību, jo darbība jau ir strādājusi pirms tēmas iekraušanas - spraudņi ir ielādēti agrāk. Jūs varat apskatīt kopējo priekšstatu par WordPress sāknēšanas rīkojumu par rīcības atsauces lapu kodā.

    Pasūtiet failus

    Mu-spraudņi var saturēt jebkuru failu skaitu un jebkuru diagrammu, kas jums šķiet loģiski. Es ievēroju par šādu hierarhiju:

    | -MU-spraudņi | - | load.php | - | - | Selena tīkls | - | - | - - -Signup | - | - | - | - | --Plugin.php | - | - | - | -... | - | - | - -Jetpack | - | - | - | - | - -plugin.php

    Load.php failā visi nepieciešamie "spraudņi" ir savienoti ar mūsu tīklu:

    Slodze traslates visiem addons load_muplugin_textdomain ("selena_network", "/ selena tīkls / valodas /"); // tīkla reģistrācija prasa wpmu_plugin_dir. "/ /elena-network/signup/plugin.php"; // Vēl viens spraudņi // pieprasīt wpmu_plugin_dir ...

    Inside Selena-tīkla mapē, plug-in mapes tiek glabāti, katram ir savs spraudnis.php, ko mēs savienot uz ielādes.php. Tas dod elastību un spēju ātri atspējot un iekļaut dažas lietas.

    Reģistrācijas lapas adrese

    Lai norādītu reģistrācijas lapas adresi, izmantojiet WP_SIGNUP_LOCTION filtru. To var atrast iekšpusē WP-login.php failu, un tas ir tas, kas ir atbildīgs par novirzīšanu uz WP-Deck.php.

    Case "Reģistrēties": ja (IS_MULTISITE ()) (WP_Redirect (lietojumprogramma) ("WP_SIGNUP_LOCTION", NETWORK_SITE_URL ("WP-DIGNUP.PHP"))); iziet;

    Pievienojiet savu funkciju MU-Spraudņos / Selenas tīklā / Reģistrācijai / Spraudņot.php, kas sniegs reģistrācijas lapas adresi pašreizējā vietnē:

    Funkcija selena_network_signup_page ($ URL) (atgriezties home_url () "/ pierakstīšanās /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_network - prefikss, ko es izmantoju visu funkciju nosaukumos, kas atrodas manā vietnē, lai izvairītos no konfliktiem, jāaizstāj ar savu unikālo prefiksu. Filtra pievienošanas prioritāte 99, jo daži spraudņi, piemēram, bbpress un buddypress, var pārrakstīt šo adresi uz jūsu pašu (Mu-spraudņi ir ielādēti agrāk nekā parastie spraudņi, skatīt iepriekš). Lūdzu, ņemiet vērā, ka Home_url () tiek izmantots, nevis tīkla_site_url (), lai atstātu apmeklētāju tajā pašā domēnā. Jūs varat izmantot jebkuru URL kā adresi.

    Lapas izveidošana

    Tagad izveidosim lapu ar Site.com/signUp/, izmantojot regulāru interfeisu, un meitas-mācību mapes veidnē mūsu jaunajai lapai - Page-Deckup.php. Vārda "pierakstīšanās" vietā varat izmantot unikālu ID.

    Jaunās veidnes iekšpusē, jums ir jāzvana SELENA_NETWORK_SIGNUP_MAIN () funkcija, kas parādīs reģistrācijas veidlapu.

    Ir vērts atzīmēt, ka viss process ar veidnēm nav nepieciešams, un tā vietā jūs varat izveidot savu shortcode, kas arī izsauks selena_network_signup_main () funkciju.

    wP-Deckup.php un WP-Activate.php

    Tagad mēs izveidosim funkciju, kas parādīs reģistrācijas veidlapu. Lai to izdarītu, kopējiet failus WP-DOGLUP.PHP un WP-Activate.php no saknes WordPress Mu-Sugings / Selena-Network / Reģistrācijai / (un neaizmirstiet savienot tos iekšpusē Mu-Plugins / Selena tīkla / Reģistrācija / spraudnis.php). Papildu manipulācijas ar failiem ir ļoti grūti un ilgi aprakstīt, tāpēc nākiet tos pats. Es tikai aprakstīšu, kas tieši jādara un jāpublicē jūsu projekta avota faili:

    1. Faila sākumā izdzēsiet visus pieprasītos, zvanot funkcijas un citus kodus ārpus funkcijas.
    2. Pārdēvējiet visas funkcijas, pievienojot vārdiem unikālus prefiksus.
    3. WP-DIGNUP.Php koda apakšējā daļa tiek iesaiņota selena_network_signup_main funkcijā, un tās paši sāk rakstīt globālo $ Active_signUp; .
    4. Nomainiet izkārtojumu savā labajā vietā.

    Iekšā WP-Activate.php jums ir jādara par to pašu:

    1. Dzēst visu kodu ārējās funkcijas, iesaiņojiet izkārtojumu atsevišķā funkcijā.
    2. Mainiet izkārtojumu vietās, kur tas ir nepieciešams.

    WP Activate.php fails ir atbildīgs par konta aktivizēšanas lapu. Tāpat kā reģistrācijas lapā, jums ir nepieciešams izveidot atsevišķu veidni, kurā zvanīs funkcija no WP-Activate.php faila.

    Mēs nosūtām aktivizēšanas burtus

    Reģistrācijas lapa nosūta vēstuli apmeklētājam, atsaucoties uz aktivizēšanu kontā. Pēc noklusējuma tas ir WPMU_SIGNUP_USER_NOTIFIKĀCIJA () funkcija no MS-Featy.php faila. Tās funkcionalitāti var aizņemt tās funkciju. Iemesls, kāpēc jūs vēlaties atteikties izmantot šo funkciju - tas nosūta konta aktivizēšanas atsauci ar WP Activate.php. Jūs varat atspējot šo funkciju, izmantojot WPMU_SIGNUP_USER_NOTIFIKĀCIJAS filtru, pārvietojot FALSE par to (ja tas nav jādara, aktivizācijas vēstule tiks nosūtīta divas reizes, jo labi, patiesībā divi dažādi burti).

    Funkcija armyofelenagomez_wpmu_signup_user_notifikācija ($ lietotājs, $ user_mail, $ taustiņš, $ meta \u003d masīvs ()) (... // kods no wpmu_signup_user_notification () funkcija wp_mail ($ user_email, wp_specialchars_decode ($ subjekts), $ message, $ message_headers ); Atgriešanās false;) add_filter ("wpmu_signup_user_notifikācija", "armyofelegenagomez_wpmu_signup_user_notifikācija", 10, 4);

    Tā rezultātā reģistrācijas lapa Selena tēmā sāka izskatīties daudz tīrāku un rūpīgu.

    Secinājums

    Internetam ir daudzi citi nav ļoti pareizi veidi, kā padarīt to pašu - Apache novirzīšanu, Ajax-veidlapas, kas nedarbosies bez Java skripta utt. Man tiešām nav ļoti patīk, tāpēc es mēģināju to darīt pareizāk mana tīmekļa vietne.

    Es atzīmēju, ka rediģēšanas failiem vajadzētu būt iespējai rūpīgi un mēģināt neizteikt prom no avota līdz rangahesh, ja WordPress maina WP-SignUp.php un WP aktivizēt.php failus, tie bija vieglāk salīdzināt tos, lai atrastu izmaiņas .

    Neaizmirstiet apskatīt visu iepriekš aprakstīto funkciju pirmkodu, lai pilnībā risinātu to, ko un kā tas notiek koda iekšpusē.

    Bonuss. Aizsardzība pret surogātpasta izplatītājiem

    Pat jaunākās vietnes WordPress bieži ir pakļautas surogātpasta reģistrācijai. Jūs varat rakstīt nebeidzamos apstākļus filtrēšanas botiem, bieži vien vairāk līdzīgi mēģinājumam izveidot mākslīgu intelektu 🙂 Multisite gadījumā, regulāra Apache novirzīšana man palīdzēja, ar kuru atverot /wp-signup.php un / wp- acitvate.php, es aicināju izdot 404 (es neesmu eksperts pielāgojiet Apache.Tāpēc mani noteikumi var nebūt ļoti pareizi).

    RewriteElgine uz RewriteBase / Rewriterule ^ WP-pierakstīšanās .php - rewriterule ^ wp-aktivēt \\ .php - # sākt WordPress # Noteikumi no WordPress pēc noklusējuma Nepieskarieties :) # ... # End WordPress

    P. S. Es cenšos aprakstīt dažas trešās puses lietas, kā detalizēti, cik vien iespējams, jo, kad es sāku, dažreiz tas bija kaut kā pateikt un izskaidrot daudzas lietas. Es arī uzskatu, ka līdzīgi nelieli padomi par citiem materiāliem, kāds tiks uzstājās uz pētījumu par kaut ko jaunu un paplašinot savu zināšanu jomu. Regulāras izteiksmes tiek izmantotas reriterule ierakstos, tie nav pilnīgi sarežģīti, piemēram, simbols ^ nozīmē līnijas sākumu.

    Segal mēs apsvērsim kritiskās 1 dienas neaizsargātības izmantošanu populārajā CMS Joomla, kas bija pērkons internetā oktobra beigās. Tas būs par neaizsargātību ar cipariem CVE-2016-8869, CVE-2016-8870 un CVE-2016-9081. Visi trīs notiek no viena koda gabala, kas reiz bija sistēmas dziļumā, gaidot savas stundas, lai pēc tam pārtrauktu un nogādātu ar viņu haosu, hacked vietnes un asaras nevienā nevainīgos šīs Joomla lietotājiem. Tikai lielākie un drosmīgākie izstrādātāji, kuru acis ir sarkanas no monitoru gaismas, un tastatūras ir pakaiši ar maizes drupatām, viņi varēja apstrīdēt pietūkumu noķeršanos un uzspiest galvu uz fiksāžu altāra.

    Brīdinājums

    Visa informācija tiek sniegta tikai informatīviem nolūkiem. Ne redaktori, ne autors nav atbildīgs par jebkuru iespējamo kaitējumu, ko rada šī panta materiāli.

    Kāpēc tas viss sākās

    2016. gada 6. oktobrī Damis Palma (Demis Palma) izveidoja tēmu uz Stack Exchange, kas jautāja: kāpēc, patiesībā, Joomla versijā 3.6 ir divas metodes, lai reģistrētu lietotājus ar to pašu nosaukumu reģistru ()? Pirmais atrodas UsersControlerRegistration kontrolieris, un otrais atrodas UsersControlleruser. Damis gribēja uzzināt, vai lietotājuControlleruser :: Reģistrēties () metode tiek izmantota kaut kur, vai arī tas ir tikai evolūcijas anahronisms, kas paliek no vecās loģikas. Viņš tika traucēts ar to, ka pat tad, ja šī metode netiek izmantota jebkurā prezentācijā, to var saukt, izmantojot veidotu pieprasījumu. Kāda bija atbilde no izstrādātāja saskaņā ar iToctopus segvārdu, apstiprinot: problēma patiešām pastāv. Un nosūtīja ziņojumu Joomla izstrādātājiem.

    Pēc tam notikumi attīstījās visstraujāk. 18. oktobrī Joomla izstrādātāji pieņem Damis ziņojumu, kas ar šo laiku pounced POC, kas ļauj reģistrēt lietotāju. Viņš publicēja piezīmi savā vietnē, kur vispārīgi stāstīja par problēmu un domām par to. Tajā pašā dienā iznāk jauna versija Joomla 3.6.3, kas joprojām satur neaizsargāto kodu.

    Pēc tam, David Tampellini (Davide Tampellini) spins kļūda reģistrācijas valstij nav vienkāršs lietotājs, bet administrators. Un 21. oktobrī Joomla drošības komanda ierodas jaunā gadījumā. Tā jau runā par privilēģiju paaugstināšanu. Tajā pašā dienā paziņojums parādās Joomla tīmekļa vietnē, kas otrdien, 25. oktobrī, tiks izlaista vēl viena versija ar secības numuru 3.6.3, kas labo sistēmas kodola kritisko neaizsargātību.

    25. oktobrī Joomla drošības streika komanda atrod pēdējo problēmu, ko Damis atklāja koda gabals. Tad pie galvenās filiāles oficiālā Joomla Repository, apņemšanās 21. oktobrī, ar neuzkrītošu vārdu sagatavot 3.6.4 stabilu izlaišanu, kas nosaka nelikināto kļūdu.

    Pēc tam daudzas ieinteresētās personas ir saistītas ar izstrādātāju transmisijas transmisiju - viņi sāk veicināt neaizsargātību un pavāri.

    27. oktobrī Harijs Roberts pētnieks nosaka gatavu izmantošanu XIPHOS pētījumu repozitorijā, kas var augšupielādēt PHP failu serverim ar neaizsargātu CMS.

    Detaļas

    Nu, ar priekšvēsturi tas ir pabeigts, dodieties uz interesantāko lietu - neaizsargātību. Kā testa versija, es instalēju Joomla 3.6.3, tāpēc visi rindu numuri būs atbilstoši šajā versijā. Un visi ceļi uz failiem, kurus redzēsiet nākamais, tiks norādīts attiecībā uz instalētās CMS sakni.

    Pateicoties atrast Damis Palm, mēs zinām, ka ir divas metodes, kas veic lietotāja reģistrāciju sistēmā. Pirmais tiek izmantots CMS un ir tcomponents/com_users/controllers/comers/controllers/registration.Php:108. Otrais (viens, kas mums un būs jāzvana), dzīvo / komponenti / com_users / kontrolieri / user.php: 293. Apskatīsim to tuvāk.

    286: / ** 287: * Metode lietotāja reģistrēšanai. 288: * 289: * @return Boolean 290: * 291: * @SINCE 1.6 292: * / 293: publiskā funkciju reģistrs () 294: (295: JSesijas :: CheckToken ("Post") vai JEXIT (JText :: _ ("Jinvalid_token")) ... 300: // Iegūstiet veidlapas datus. 301: $ DATA \u003d $ THE-\u003e INPUT-\u003e Post-\u003e Get ("lietotājs", masīvs (), "masīvs");. .. 315: $ atgriešanās \u003d $ Model-\u003e Apstiprināt ($ veidlapa, $ dati); 316: 317: // Pārbaudiet kļūdas. 318: Ja ($ atgriešanās \u003d\u003d\u003d FALSE) 319: (... 345: / ... Pabeigt reģistrāciju. 346: $ atgriešanās \u003d $ Model-\u003e Reģistrēties ($ dati);

    Šeit es atstāju tikai interesantas līnijas. Visu neaizsargātās metodes versiju var apskatīt Joomla repozitorijā.

    Mēs to sapratīsim, kas notiek, kad regulāra lietotāja reģistrācija: kādi dati tiek nosūtīti un kā tie tiek apstrādāti. Ja iestatījumos ir iespējota lietotāja reģistrācija, veidlapu var atrast vietnē http: //joomla.local/index.php/component/users/? Skatīt \u003d reģistrāciju.


    Likumīgs pieprasījums pēc lietotāja reģistrācijas izskatās šādā ekrānuzņēmums.


    COM_USERS komponenti ir atbildīgi par darbu ar lietotājiem. Pievērsiet uzmanību uzdevuma parametram vaicājumā. Tas ir $ kontrolieris. $ Metode. Apskatīsim failu struktūru.

    Skriptu nosaukumi mapē kontrolieri. Atbilst nosaukumiem saucātajiem kontrolieriem. Tā kā mūsu pieprasījumā tagad ir $ kontrolieris \u003d "Reģistrācija", fails zvanīs. reģistrācija.php. un tā reģistrs () metode.

    UZMANĪBU, Jautājums: Kā pārraidīt reģistrācijas apstrādi neaizsargātā apgabalā kodā? Jūs, iespējams, esat jau uzminējis. Neaizsargāto un pašreizējo metožu nosaukumi sakrīt (reģistrs), lai mēs varētu vienkārši mainīt nosaukumu saucamo kontrolieri. Un kur ir neaizsargātais kontrolieris? Tieši failā user.php.. Izrādās $ kontrolieris \u003d "lietotājs". Mēs apkopojam visus kopā un iegūt uzdevumu \u003d user.register. Tagad reģistrācijas pieprasījumu apstrādā ar nepieciešamo metodi.


    Otrā lieta, kas mums jādara, ir nosūtīt datus pareizajā formātā. Viss šeit ir vienkāršs. Likumīgais reģistrs () gaida masīvu no mums, ko sauc par Jform, kurā mēs nosūtām datus, lai reģistrētos - vārds, pieteikšanās, parole, pasts (sk. Ekrānuzņēmums ar vaicājumu).

    • /Components/com_Users/controllers/registration.php: 124: // Iegūstiet lietotāja datus. 125: $ pieprasījumsData \u003d $ this-\u003e Ieeja -\u003e Post-\u003e Get ("Jform", masīvs (), "masīvs");

    Mūsu Ward saņem šos datus no masīva nosaukta lietotāja.

    • /Components/com_Users/controllers/user.php: 301: // iegūt veidlapas datus. 302: $ Dati \u003d $ this-\u003e Ieeja -\u003e Post-\u003e Get ("Lietotājs", masīvs (), "masīvs");

    Tāpēc mēs mainām visu parametru nosaukumus ar JFROM uz lietotāju.

    Trešais mūsu solis ir atrast CSRF derīgu marķieri, jo bez tā nebūs reģistrācijas.

    • /Components/com_Users/controllers/user.php: 296: JSesija :: CheckToken ("Post") vai JEXIT (Jinvalid_Token));

    Tas izskatās kā Hash MD5, un jūs varat to ņemt, piemēram, no atļaujas veidlapas vietnē /index.php/component/users/?View\u003dlogin.


    Tagad jūs varat izveidot lietotājus, izmantojot vēlamo metodi. Ja viss noticis, es apsveicu - jūs vienkārši sapratāt neaizsargātību CVE-2016-8870 "Jaunu lietotāju reģistrācijas atļauju trūkuma pārbaude".

    Lūk, kā tas izskatās kā "darba" metode reģistra () no UsersControllerRegistration kontroliera:

    • /Components/com_Users/controllers/registration.php: 113: // Ja reģistrācija ir atspējota - novirziet uz pieteikšanās lapu. 114: Ja (Jcomponenthelper :: GetParams ("COM_USERS") -\u003e Get ("AllowuserRegistration") \u003d\u003d 0) 115: (116: $ tas -\u003e SetRedirect (Jroute :: _ ("Index.php? Opcija \u003d com_users &) Skats \u003d pieteikšanās ", nepatiesa)); 117: 118: Atgriezties FALSE; 119 :)

    Un tā neaizsargāti:

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

    Jā, nekādā veidā.

    Lai saprastu otro, daudz nopietnāku problēmu, mēs nosūtīsim mums veidoto pieprasījumu un sekosim, kā tas tiek veikts dažādās koda sadaļās. Šeit ir gabals, kas ir atbildīgs par lietotāja nosūtīto datu pārbaudi darba metodē:

    Turpinājums pieejams tikai dalībniekiem

    1. variants Pievienojieties vietnes kopienai, lai izlasītu visus materiālus uz vietas

    Dalība Kopienā noteiktā laika posmā atvērs Jums piekļuvi visiem hakeru materiāliem, palielinās jūsu personīgo uzkrājumu atlaidi un uzkrāt profesionālu Xakep rezultātu vērtējumu!

    Tēmas parasti nav funkcionālas, bet dažreiz mēs, izstrādātājiem, jums ir jāievieš dažas iespējas mūsu tēmā, lai padarītu to nedaudz labāku un ērtāku.

    Šajā rokasgrāmatā mēs apsvērsim terminu "spraudņu teritorija", kā arī uzzināt, kā izmantot fantastisku rīku, ko rakstījis Thomas Griffin: TGM spraudņa aktivizēšanas bibliotēka.

    Tēmas funkcionalitāte: iebrukums Plugins teritorijā

    Tēmas ir paredzētas, lai mainītu WordPress tīmekļa vietnes dizainu. Ideālā gadījumā tēma skar tikai vizuālo aspektu. Tomēr mūsu "Golden Age" WordPress, plug-in izstrādātājiem bieži ietver funkcionālās funkcijas savās tēmās, kas ļauj jums saglabāt konkurētspēju tirgū.

    Tas ir spraudņu teritorijas iebrukums. Mēs varam prezentēt "Plugins" teritoriju kā dažus koda funkcionālos posmus. Jebkura koda fragmenta mainās jūsu vietnes funkcionalitāti jābūt pārstāvētai kā spraudnis, ja norādītais kods nav noteikts WordPress kodolā.

    Es jau esmu formulējis agrāk vienā no maniem rakstiem empīrisks noteikums "Teritorijas spraudņi: \\ t

    Ja īpatnība ir saistīta ar vietnes vizuālo pārstāvību, tad šajā gadījumā tas būtu jāiekļauj tēmā; Ja tas ir saistīts ar funkcionalitāti, tad tas ir jāatspoguļo kā atsevišķs spraudnis.

    Diezgan vienkāršs noteikums. Cilvēki joprojām cenšas reģistrēties kodu funkcionālo fragmentu līmenī to tēmās, bet tēmu katalogi (piemēram, WordPress.org vai themeforest) Nelietojiet tēmas, kas iebrukt spraudņu teritorijā. Tādējādi priekšlikums par funkcionalitāti tēmās ir kļuvusi par noteiktu problēmu.

    Par laimi, ir vienkāršs risinājums, kas nav pretrunā ar "spraudņu teritorijas" noteikumiem.

    Ievads TGM spraudņa aktivizēšanas bibliotēkā

    TGM spraudņa aktivizēšanas iestatīšana

    Pievērsiet uzmanību TGMPA () funkcijai ar diviem parametriem pašā beigās kodu. Otrais parametrs ir $ configer mainīgais, kas ir arī masīvs, piemēram, $ spraudņi. Šādi no tās nosaukuma jūs varat konfigurēt TGM spraudņa aktivizēšanas bibliotēku, izmantojot no šīs masīva. Mainīgais akceptē savas iespējas:

    • iD (virkne) ir unikāls ID TGM spraudņa aktivizēšanas bibliotēkai jūsu tēmā. Tas ir ļoti svarīgi: ja citi spraudņi izmanto arī TGM spraudņa aktivizēšanu, dažādi ID tiks novērst iespējamos konfliktus.
    • default_path (virkne) - noklusējuma absolūtais ceļš spraudņiem jūsu tēmā. Instatējot to, jūs varat izmantot ZIP faila nosaukumu kā avota parametru vērtību jūsu spraudnim.
    • izvēlne (virkne) - izvēlnes izvēlne Plug-ins instalēt.
    • has_notices (Boolean) - ja norādīts pareizos paziņojumus, tiks izsniegtas nepieciešamajiem / ieteicamajiem spraudņiem.
    • noraidāms (Būla) - ja norādīts patiesā, lietotājs var "aizvērt" paziņojumus.
    • noraidīt_msg (virkne) - ja atlaišana ir noteikta nepatiesa, Šis ziņojums tiks parādīts virs administratora paziņojuma.
    • is_automatic (Boolean) - ja norādīts patiesā, spraudņi tiks aktivizēti pēc tam, kad lietotājs piekrīt instalēt tos.
    • ziņojums (virkne) - papildu HTML, kas parādīts plug-in galda priekšā.
    • stīgas (masīvs) - masīvs, kas ietver parādītos ziņojumus. Jūs varat iestatīt tos kā apraides līnijas. Paskaties piemērs.Php failu, lai redzētu pilnu visu ziņojumu sarakstu.
    "Mytheme-TGMPA", // Jūsu unikālais TGMPA ID "DEFAULT_PATH" \u003d\u003e GET_STYLESHEET_DIRECTORY (). "/ Lib / spraudņi /", // Noklusējuma absolūtais ceļš "Izvēlne" \u003d\u003e "Mytheme-Install-obligāti spraudņi", // izvēlnes lode "has_notices" \u003d\u003e TRUE, // Rādīt administratora paziņojumus "Atbalstāms" \u003d\u003e FALSE , // paziņojumi nav noraidāmi "atlaist_msg" \u003d\u003e "Es tiešām, tiešām ir nepieciešams instalēt šos spraudņus, labi?", // Šis ziņojums būs izeja augšpusē nag "is_automatic" \u003d\u003e True, // automātiski Aktivizējiet spraudņus pēc uzstādīšanas "Ziņojums" \u003d\u003e "", // ziņojums izejas tieši pirms spraudņu tabulas" stīgas "\u003d\u003e masīvs (); // īsziņu virknes, ka TGM spraudņa aktivizēšana izmanto);?\u003e

    Secinājums

    Kā redzat, iesakām funkcionalitāti tēmas WordPress. Varbūt - jums vienkārši jādomā vispirms par lietotājiem, kuri var pārslēgties no viena temata uz citu. TGM spraudņa aktivizēšanas bibliotēka piedāvā patiešām gudru veidu.

    Ko jūs domājat par šo rīku? Vai jūs kādreiz esat to izmantojis, vai jūs plānojat to izmantot nākotnē? Dalieties savās domās!