AD aktivujte PHP. Ako vytvoriť svoju vlastnú registračnú stránku v programe WordPress Multisite

Umožňuje používať jedno nastavenie WordPress pre viacero lokalít v rovnakom čase. Každá lokalita zároveň prijíma svoje vlastné tabuľky v databáze s jedinečnou predponou.

Tabuľky s údajmi registrovaných užívateľov spoločných pre všetky sieťové stránky. Toto je určité plus a registrácia jedného dňa môžete pristupovať k viacerým stránkam. Na každom mieste môže mať rovnaký účet rôzne práva. Napríklad, na jednej stránke, môže byť užívateľ editor a na inom správcom.

V obvyklej inštalácii Stránka WordPress Registrácia, autorizácia a resetovanie hesla zobrazuje súbor WP-LOGIN.PHP.

  • wp-login.php - autorizácia
  • wp-login.php? Akcia \u003d register - registrácia
  • wP-LOGIN.PHP? ACTION \u003d LOSTSPERSWORD - reset hesla

V režime Multisite sa program WordPress spustí správať sa trochu inak a pri prechode na WP-Login.php Link? Action \u003d Register dostane presmerovanie na WP-SignUp.php. Toto je registračná stránka vašej siete, ktorá je predvolená v WordPress.

Okrem registrácie bežných používateľských kont, môžete na ňu vytvoriť novú stránku, ak superministrátor umožnil takúto príležitosť v nastaveniach siete (sieťové nastavenia).

Vo väčšine tém, registračná stránka nevyzerá veľmi dobre. Mnohé témy používajú CSS rámce, ako napríklad bootstrap, a ich vlastné špecifické triedy pre štylizáciu rôznych prvkov na stránkach, takže je ťažké napísať jeden HTML, ktorý bude vhodný pre každého.

Ale nemali by ste zúfalstvo, ak stránka vyzerá neupravená. Súbor WP-SIGNUP.PHP je najprv veľká vec, keď nie je čas na vypracovanie každej časti stránky - môžete sa zamerať na ďalšie viac dôležité stránky a obsah.

Keď budete pripravení, aby sa vaše strana Registrácia, WP-SignUp.php bude dobrou vzorkou a príkladom, v ktorom je ľahké pochopiť spektrum funkcií, ktoré WordPress poskytuje spracovanie a overovanie údajov zadané používateľmi a vytvárať nové účty.

Hlavná sieť webových stránok

V predvolenom nastavení, WordPress otvorí registračnú stránku (WP-SIGNUP.PHP) na sieti hlavnej domény (webová stránka). Avšak, môžete vytvoriť registračné stránky pre každú sieťovú stránku, aj keď majú témy.

Puzdro uvažujeme, keď sa na všetkých sieťových stránkach používa jedna téma, ale na každom z nich je registračná stránka. Stránky sa líšia jazykom (angličtina a ruština), takže registračná stránka sa zobrazí na "natívnom" jazykovej stránke. Ak stránky používajú rôzne témy, všetko bude závisieť od toho, ktoré témy, ktoré im budú vyhovovať rovnaké usporiadanie (vynikajúca situácia, ktorá vás môže posunúť, aby ste zjednotili všetky svoje témy), alebo stojí za to vypracovať stránky individuálne.

Alternatíva k funkciám.php.

Objednávka v súboroch

MU-plugins môžu obsahovať ľubovoľný počet súborov a štruktúru, ktorá sa pre vás zdajú logicky. Dodržiavam o takejto hierarchii:

| Mu-plugins | LOAD.PHP | | Selena-Network | | | Registrácia | | | plugin.php | | | ... | | | Jetpack | | | | plugin.php.

V súbore load.php, preklady a všetky potrebné "pluginy" sú pripojené:

// Vkladanie transferov pre MU-plugins Load_muplugin_TextoxtDDDomain ("Selena_NETWORK", "/ Selena-Network / Jazyky /"); // Funkčné pre registračnú stránku vyžadujú WPMU_PLUGIN_DIR. "/seena-network/signup/plugin.php"; // Ďalší plugin // vyžadujú wpmu_plugin_dir ...

Vo vnútri adresára Selena-Sieť sa uložia zásuvné priečinky. Každý má svoj vlastný plugin.php, ktorý sa pripájame na load.php. Poskytuje flexibilitu a schopnosť okamžite vypnúť a zapnúť samostatné komponenty O pracovnom projekte v prípade núdze.

Registračná stránka

Po pochopení, kde a ako napíšeme kód, môžete prejsť na vytvorenie registračnej stránky.

Vytvorte stránku s príkladom.org/signup/ cez obvyklé rozhranie. Ako adresa môžete použiť akúkoľvek adresu URL, ktorá sa zobrazí vhodná pre váš projekt.

Presmerovanie na požadovanú registračnú stránku

Pre WordPress sa dozviete o našej novej registračnej stránke a urobili presmerovanie na ňom, keď kliknete na odkaz "Register", použije sa filter wp_signup_location. To možno nájsť vo vnútri WP-LOGIN.PHP a to je on, kto je zodpovedný za presmerovanie na predvolenom wp-signup.php.

Prípad "Register": IF (IS_MULTISITE ()) (WP_REDIREIR (APPTION_FILTERS ("WP_SIGNUP_LOCATION", NEWERTH_SITE_URL ("WP-SIGNUP.PHP")); EXIT; // ...

Ako si spomínate predvoleným nastavením, registračná stránka sa otvorí na hlavnej doméne siete. To je dôvod, prečo sa tu používa network_site_url ().

Pridajte psovodiku filtra do MU-plugins / Selena-Network / Registrácia / plugin.php, ktorý bude daná adresa registračnej stránky na aktuálnej stránke:

Funkcia Selena_NETWORK_SIGNUP_PAGE ($ URL);) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_Network - predpona, ktorú používam v menách všetkých funkcií Vnútri mu-plugins na mojich stránkach, aby sa zabránilo konfliktom, by sa mali nahradiť vlastnou unikátnou predponou. Priorita pridávania filtra 99, pretože niektoré pluginy, ako napríklad BBPRESS a BLODDYPRESS, môžu túto adresu prepísať na vaše vlastné (mu-plugins sú načítané skôr ako konvenčné pluginy, pozri vyššie).

Upozorňujeme, že home_url () sa používa, ktorý, na rozdiel od siete_site_url (), poskytuje adresu aktuálnej stránky, a nie hlavnú sieťovú stránku.

Funkčnosť WP-SignUp.php

Súbor WP-SIGNUP.PHP obsahuje veľký počet Funkcie a kód. Ak chcete zobraziť obrázok ako celok, môžete použiť kód skladania. Spravidla v angličtine sa nazýva "Kód skladania".

Na samom začiatku súboru od 1 do 80, riadok (vo verzii 4.1.1), rôzne kontroly sú vyrobené a vydávajú stránku "Štart" pomocou get_header ().

Ďalej sú deklarované mnohé metódy a predtým, než s nimi začneme pracovať, stojí za to chápať, čo robí každú funkciu. Vnútri, mnohé z nich sú často používané iné funkcie s predponou WPMU_, všetky sú deklarované v WP-Conth / MS-Function.php súbor. Táto časť je ťažké pochopiť, bez toho, aby ste videli kód sami. Pod malým popisom základných funkcií v prípade, že máte problémy.

  • wPMU_SIGNUP_STYLESHEET () - Výstup ďalších CSS na registračnej stránke.
  • sHOW_BLOG_FORM () - Polia pre registráciu lokality (adresa, viditeľnosť názvov pre vyhľadávače).
  • aLLIMATE_BLOG_FORM () - Kontrola zadanej adresy a mien pomocou wpmu_Validate_blog_signup ().
  • sHOW_USER_FORM () - Polia pre registráciu užívateľa (prihlasovacia a e-mailová adresa).
  • aLLIMATE_USER_FORM () - Kontrola zadaného a adresy prihlásenia. Pošta s WPMU_VAIDATE_USER_SIGNUP ().
  • signUp_another_Blog () - Polia pre registráciu nových stránok pomocou Show_Blog_FORM () pre používateľov, ktorí sú už zaregistrovaní na stránke.
  • calitaTate_another_Blog_signup () - Kontroluje adresu a názov stránky pomocou aplikácie ALLATE_BLOG_FORM ().
  • signUp_user () je hlavnou funkciou na výstup poľa registračnej stránky.
  • oVERTATE_USER_SIGNUP () - Skontroluje prihlasovaciu a e-mailovú adresu. Mail s overidate_user_FORM ().
  • signUp_Blog () - Polia pre zadanie adresy, názvu a viditeľnosti stránky (druhý registračný krok) pomocou Show_blog_FORM ().
  • aLLIMATE_BLOG_SIGNUP () - Skontroluje prihlasovacie údaje, e-mailovú adresu. Mail, Adresa a názov stránky.

V samom konci súboru WP-SignUp.php (od 646 prešívania vo verzii 4.1.1), hlavná logika registračnej stránky, ktorá používa vyššie uvedené metódy. Táto časť kódu nie je predložená funkcii. Na konci sa nazýva Get_footer ().

Skopírujte funkčný wp-signup.php

Ďalej bude opísaný postup kopírovania WP-SignUp.php v MU-plug-Ins a vykoná zmeny vidlice. Môže to byť správnym spôsobom. Namiesto toho môžete napísať vaše funkcie od nuly na kontrolu a výstupných formulárov pomocou tried, nie bežných funkcií. Podľa môjho názoru má WP-SIGNUP.PHP už má všetku potrebnú logiku pre našu stránku, zostáva len na to, aby maloleté zmeny.

Pri aktualizácii WordPress, WP-SignUp.php sa z času na čas zmení, ale to neznamená, že pri každom vydaní bude musieť synchronizovať svoje "FORC". Funkcie vo vnútri WP-SIGNUP.PHP sú v podstate zapojení len výstupom HTML, kontrola údajov, vytváranie účtov a lokalít sa zaoberajú predponou WPMU_, vyhlásená v MS-Function.php.

Vytvoríme funkciu, ktorá zobrazí registračný formulár na stránke. Ak to chcete urobiť, skopírujte WP-SIGNUP.PHP z WordPress root v mu-zásuviek / selena-siete / registrácia /. Pripojte ho vo vnútri mu-pugins / selena-siete / registrácia / plugin.php).

Vyžadujú WPMU_PLUGIN_DIR. "/sena-network/signup/wp-signup.php";

Odstráňte všetky požiadavky a zbytočné kontroly od samého začiatku kopírovaného súboru. Vo verzii 4.1.1 je to celý kód od 1 do 80 riadkov.

Teraz sme pripravení vytvoriť hlavnú funkciu na zobrazenie registračného formulára. Ak to chcete urobiť, všetky logické z riadku 646 a na samom konci súboru budeme prenesené do funkcie s názvom selena_network_signup_main. Na samom konci vymažete dve zbytočné zatvorenie

(riadky 722 a 723), ako aj volanie get_footer ().

V novovytvorenom Selena_Network_signup_main () Na samom začiatku vyhlásime globálnu variabilnú Active_signup, že všetky ostatné metódy z tohto použitia súborov. A pridajte hovor EDVER_SIGNUP_FORT, ktorý sme odstránili zo začiatku súboru.

Funkcia Selena_Network_signup_main () (Global $ Active_signup; Do_Action ("pred_signup_form"); // ...)

Teraz zostáva len zmeniť usporiadanie vo všetkých miestach, kde je to potrebné, a registračná stránka je pripravená.

Výstup registračného formulára

Tam sú aspoň dve možnosti. Vyspornejší spôsob vytvorenia krátkodobého kódu a umiestnite ho na stránku prostredníctvom obvyklého editora.

// Vytvorte STEFF_SIGNUP ADD_SHORTCODE Shortcode ("Sieťový_SIGNUP", "SELENA_NETWORK_SIGNUP_MAIN");

Druhou možnosťou je vytvoriť stránku stránky-signap.php v priečinku Dcéra Theme. Namiesto slova "Registrácia" môžete na stránku použiť jedinečné ID. Vo vnútri šablóny pridajte požadované rozloženie a vyberte Selena_NETWORK_SIGNUP_MAIN () na správnom mieste.

Výsledkom je, že moja registračná stránka začala vyzerať oveľa lepšie a čistič.

Aktivačná stránka

V predvolenom nastavení, WordPress konvenčne rozdeľuje proces registrácie v multisite pre dva kroky - vyplnenie formulára na stránke a aktivácii účtu, keď je odkaz odoslaný na exilované elektronický list. Po vyplnení formulára vytvoreného v predchádzajúcej časti sa WordPress posiela písmeno s malým inštrukciou a odkazom na aktiváciu účtu.

Pre výstup aktivačnej stránky je súbor wp-aktivovať.php zodpovedaný v adresári WordPress Root. WP-ACTIVATE.PHP možno úplne zmeniť. Proces je podobný tomu, čo sme už urobili pre WP-SignUp.php.

Vytvorte príklad.org/activate / Page cez normálne rozhranie. Ako adresa použite ľubovoľnú adresu URL, ktorá sa zobrazí vhodná pre vás.

Skopírujte súbor wp-aktivovať.php na svoje mu-plugins a pripojte ho k mu-pugins / selena-siete / registrácia / plugin.php.

Vyžadujú WPMU_PLUGIN_DIR. "/sena-network/signup/wp-activate.php";

Vnútri, nie toľko obsahu, na rozdiel od wp-signup.php. Súbor vykonáva jednu operáciu - aktivuje účet, ak sa získa správny kľúč a zobrazí chybové hlásenie alebo úspešnú prevádzku.

Vymažte všetky zbytočné kontroly a vyžadujú - od 1 do 69 riadkov v programe WordPress 4.1.1. Na samom konci odstráňte volanie get_footer (). Zostávajúci obsah prenesením do funkcie Selena_NETWORK_ACTIVATE_MAIN ().

Zaujímavé je všimnúť si, že konštanta WP_installing tu bola oznámená pred načítaním WordPress (WP-LOAD.PHP). Jeho prítomnosť spôsobuje, že WordPress nie načítať pluginy.

Rovnako ako v prípade registračnej stránky zostáva len na opravu usporiadania, kde je to potrebné. Môžete tiež zmeniť text zobrazených správ (v tomto prípade, nezabudnite pridať textovú doménu vašich pluginov na všetky funkcie prekladateľov, nie je nainštalovaný nikde inde).

Hotová funkcia môže byť použitá na vopred určenej stránke prostredníctvom krátkodobého kódu alebo samostatnej šablóny v dcérskej spoločnosti.

Aktivačné písmená s riadnymi odkazmi

Aktivačná stránka je pripravená na prácu, ale WordPress o tom nevie a bude pošle aktivačné písmená s odkazom na WP-ACTIVE.PHP. Na rozdiel od wp-signup.php nie je žiadny filter, ktorý by umožnil zmenu adresy. Namiesto toho potrebujete napísať svoju funkciu, ktorá pošle písmená s správnymi odkazmi.

V čase plnenia a odoslania formulára na stránke registrácia WordPress Hovory WPMU_SIGNUP_ používateľa.() alebo wpmu_signup_ blog.() V závislosti od typu registrácie. Obe funkcie vytvárajú nový záznam v tabuľke WP_SIGNUPS, ktorý ho vyplní potrebným obsahom, medzi ktorými existuje aktivačný kľúč účtu.

Po, v závislosti od funkcie sa volá WPMU_SIGNUP_ používateľa._NOTIFIKALIFIKÁCIA () ALEBO WPMU_SIGNUP_ blog._Notifikácia (). Obe funkcie majú podobnú funkcionalitu - vytvárajú a posielajú písmeno s aktivačným odkazom, ale užívajte rôzne argumenty. V oboch sú filtre pre "odpočúvanie" udalostí.

Ak (! Apply_Filters ("WPMU_SIGNUP_USER_NOTIFIKALIFIKÁCIE", $ user, $ user_email, $ kľúč, $ meta)) návrat false;

Aktivácia účtov s tvorbou blogu:

IF (! APTION_FILTERS ("WPMU_SIGNUP_BLOG_NOTIFIKÁCIE", $ Doména, $ PATH, $ TITUAL, $ User, $ Uster_email, $ Key, $ META)) (Return False;)

Zostáva len napísať vaše manipulátory, v ktorých posielate listy cez wp_mail (), a na samom konci nutne dať false, takže WordPress neodosiela aktivačný list dvakrát - jeden z vašich, ďalšie - písmeno štandardne s odkazom na odkaz WP-ACTIVE.PHP.

Funkcia Selena_Network_WPMU_SIGNUP_USER_NOTIFIKÁCIA ($ user, $ user_email, $ kľúč, $ meta \u003d pole ()) (// Generovať hlavičku, text a hlavičky listov // ... // Poslať list alebo pridajte úlohu CRON na odoslanie listu Wp_mail ($ user_email, wp_specialChars_decode ($ predmet), $ správa, $ message_headers); // obnoviť falošné, takže WordPress neodosiela aktivačný list dvakrát vráti false;) add_filter ("wpmu_signUp_uver_notifikácia", "selena_network_wpmu_signUp_user_NOTWORK_WPMU_SIGNUP_USER_NOTIFIKÁCIE", 10, 4) ; \\ T

Ak posielate listy prostredníctvom SMTP servera alebo počet registrácií je veľmi veľký, mali by ste premýšľať o tom, že neposielajte písmená okamžite. Namiesto toho môžete pridať úlohy cron pomocou WordPress Cron.

Zatvorte prístup k WP-SignUp.php a WP-ACTIVE.PHP

Po vytvorení vlastných registračných a aktivačných stránok môže byť potrebné zatvoriť "originály". Ak sa napríklad na stránke registrácie nachádzajú ďalšie polia, ktoré musia byť vyplnené. Aj mnohé stránky WordPress sú vystavené registrácii SPAM.

Riešiť dva problémy s jednou akciou, možno spýtať Apache, aby sa dosiahol 404 v prípade pokusu o otvorenie týchto stránok. Ak to chcete urobiť, stačí zaregistrovať pár dodatočných rewriterale do vášho konfiguračného súboru alebo.htaccess.

RewriteEngine na RewriteBase / # Znalosť regulárnych výrazov nikdy nebude zbytočná :) rewriterale ^ wp-sign-sigpup .php - rewriterule ^ wp-aktivácia .php - # začať WordPress # Pravidlá z WordPress Nedotýkajte sa :) # .. , # Koniec WordPress.

Záver

Pre toto a mnoho ďalších "problémov" súvisiacich s WordPress na internete existuje mnoho riešení. Ak chcete napríklad vytvoriť registračné a aktivačné stránky, niektoré sú ponúkané na prepísanie pôvodného WP-SignUp.php a WP-ACTIVE.PHP. To by sa nemalo robiť, pretože v prípade aktualizácie programu WordPress stratíte všetky zmeny vykonané na súbory, a nemôžete, skontrolovať integritu jadra pomocou.

Pri vývoji akéhokoľvek pridávania by sa témy alebo riešenia mali stráviť nejaký čas na riešenie toho, čo sa deje vo vnútri WordPress. Existuje mnoho užitočných nástrojov ladenia.

P.S.

Ak chcete automaticky priradiť rôzne úlohy, môžu nových používateľov používať multisite používateľský manažment.

Ak máte akékoľvek otázky alebo ťažkosti pri vytváraní registračných a aktivačných stránok po prečítaní článku, zanechajte komentár a odpovieme.

27.03.2015 27.03.2015

Vývojár WordPress. Miluje poriadok vo všetkom a zaoberá sa novými nástrojmi. Inšpirovaný architektúrou symfonických komponentov.

  • Vytvorte si vlastnú registračnú stránku pre multisite namiesto štandardného wp-signup.php.

    Obyčajný inštalácia WordPress. Registračná stránka (autorizácia, resetovanie hesla) zobrazuje súbor wp-login.php.

    • /wp-login.php - autorizácia
    • /wp-login.php?action\u003dregister - registrácia
    • /wp-login.php?action\u003dlostpassword - reset hesla

    Pre multisite vo WP-LOGIN.PHP sú samostatné podmienky. Takže, keď kliknete na odkaz /wp-login.php?action\u003dregister na multisaite, WordPress urobí presmerovanie na stránku /wp-signup.php. V mnohých témach, stránka vyzerá nie je veľmi atraktívne, takže budeme mať vlastné.

    Hlavná sieť webových stránok

    V predvolenom nastavení, WordPress otvorí registračnú stránku (WP-SIGNUP.PHP) na sieti hlavnej domény (webová stránka). Môžete však vytvoriť samostatnú registračnú stránku pre každú sieťovú stránku, aj keď majú rôzne témy. Budeme zvážiť prípad, keď na všetkých sieťových stránkach majú svoju vlastnú registračnú stránku, ale rovnaká téma sa používa a miesta sa líšia len v jazyku. Ak sa používajú rôzne témy, budete musieť napísať viac kódu.

    funkcie.php?

    Nie. Zdá sa, že názov tohto súboru je uvedený v ktoromkoľvek článku o WordPress. V našom prípade, berúc do úvahy skutočnosť, že registračná funkcia je určená pre niekoľko lokalít, má zmysel vziať ho do mu-plugins, ktoré sú načítané pri otváraní akéhokoľvek miesta.

    Lyritárová odbočka

    Stojí za zmienku, že mu-plugins sú načítané skôr ako obyčajné plug-iny a kým nebude program WordPress plne stiahnutý, takže hovor pre niektoré funkcie môže viesť k smrteľným chybám v PHP. Podobné "skoré" sťahovanie má svoje výhody. Povedzme, že vnútri akúkoľvek tému nemôže byť držať na nejakú akciu, ktorá sa spúšťa pred sťahovaním funkcií.php súbor z témy. Príkladom toho môže slúžiť ako plugin JETPACK_MODULE_LOADED_REPLEDOVANÝCH POSTUPOV (Súvisiace príspevky - názov modulu), s ktorým je možné sledovať aktivitu modulov v Jetpacku. Je nemožné "spojiť" z témového súboru k tejto akcii, pretože akcia už fungovala pred naložením témy - pluginy sú načítané skôr. Pozrite sa na spoločný obrázok WordPress Boot Order na akčnej referenčnej stránke v kóde.

    Objednávka v súboroch

    MU-plugins môžu obsahovať ľubovoľný počet súborov a akúkoľvek tabuľku, ktorá sa vám zdajú logické. Dodržiavam o takejto hierarchii:

    | -MU-plugins | - | load.php | - | - | Selena-Network | - | - | - | - | - | - | - | - | - | - | - | - | -... | - | - | - | -jetPack | - | - | - | - | - -Plugin.php

    V súbore load.php sú všetky potrebné "pluginy" pripojené k našej sieti:

    LOAD TRASALTY PRE VŠETKY DODORKY LOCK_MUPLUDUGIN_TEXTDDDDDDOAIN ("Selena_Network", "/ Selena-Network / Jazyky /"); // Sieťové registrovanie vyžadujú WPMU_PLUGIN_DIR. "/seena-network/signup/plugin.php"; // Ďalšie plugins // vyžadujú WPMU_PLUGIN_DIR ...

    Vo vnútri priečinka Selena-Network sa uložia plug-in priečinky, z ktorých každý má svoj vlastný plugin.php, ktorý sa pripájame na load.php. Poskytuje flexibilitu a schopnosť rýchlo zakázať a obsahovať niektoré veci.

    Adresa registračnej stránky

    Ak chcete zadať adresu registračnej stránky, použite filter wp_signup_location. To možno nájsť vo vnútri súboru WP-LOGIN.PHP a je to on, kto je zodpovedný za presmerovanie na WP-SignUp.php.

    Prípad "Register": IF (IS_MULTIZITE ()) (WP_REDIREIR (APPTION_FILTERS ("WP_SIGNUP_LOCATICH", NEWERTWER_SITE_URL ("WP-SIGNUP.PHP"));

    Pridajte svoju funkciu v MU-plugins / Selena-Network / Registrácia / plugin.php, ktorá poskytne adresu registračnej stránky na aktuálnej webovej stránke:

    Funkcia Selena_NETWORK_SIGNUP_PAGE ($ URL) (návrat home_url (). "/ Registrácia /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_Network - predpona, ktorú používam v menách všetkých funkcií Vnútri mu-plugins na mojich stránkach, aby sa zabránilo konfliktom, by sa mali nahradiť vlastnou unikátnou predponou. Priorita pridávania filtra 99, pretože niektoré pluginy, ako napríklad BBPRESS a BLODDYPRESS, môžu túto adresu prepísať na vaše vlastné (mu-plugins sú načítané skôr ako konvenčné pluginy, pozri vyššie). Upozorňujeme, že home_url () sa používa namiesto network_site_url (), opustiť návštevníka na tej istej doméne. Ako adresu môžete použiť akúkoľvek adresu URL.

    Vytvorenie stránky

    Teraz si vytvorte stránku s lokalitu s lokalitami.com/signup/ cez pravidelné rozhranie a v šablóne priečinka Dcéra-Predmet pre našu novú stránku - strana-signUp.php. Namiesto slova "Registrácia" môžete použiť jedinečné ID.

    Vo vnútri novej šablóny musíte volať funkciu Selena_NETWORK_SIGNUP_MAIN (), ktorá zobrazí registračný formulár.

    Stojí za zmienku, že celý proces so šablónmi sa nevyžaduje a namiesto toho môžete vytvoriť svoj vlastný krátkodobý kód, ktorý tiež zavolá funkciu selena_network_signup_main ().

    wP-SIGNUP.PHP a WP-ACTIVE.PHP

    Teraz vytvoríme funkciu, ktorá zobrazí registračný formulár. Ak to chcete urobiť, skopírujte súbory WP-SIGNUP.PHP a WP-ACTIVE.PHP z koreňového WordPress v mu-zásuviek / selena-siete / registrácia / (a \u200b\u200bnezabudnite ich pripojiť vnútri mu-plugins / selena-siete / Registrácia / plugin.php). Ďalšie manipulácie so súbormi sú mimoriadne ťažké a dlho popisujú, takže si ich urobia. Opíšem len to, čo presne je potrebné urobiť a publikovať zdrojové súbory vášho projektu:

    1. Na začiatku súboru vymažte všetky požadované, volajúce funkcie a iný kód mimo funkcií.
    2. Premenujte všetky funkcie pridaním jedinečných predpony na mená.
    3. Spodná časť kódu WP-SignUp.php je zabalená do funkcie Selena_NETWORK_SIGNUP_MAIN a vo svojom odvolanie písať globálne $ Active_signup; .
    4. Vymeňte rozloženie na správnych miestach.

    Vnútri WP-ACTIVE.PHP musíte urobiť to isté:

    1. Odstráňte všetky kódu Vonkajšie funkcie, zabaľte rozloženie do samostatnej funkcie.
    2. Zmeňte usporiadanie na miestach, kde je to potrebné.

    Súbor WP-ACTIVATE.PHP je zodpovedný za stránku aktivácie účtu. Podobne ako pri registračnej stránke musíte vytvoriť samostatnú šablónu vo vnútri, ktorú chcete volať funkciu z súboru WP-ACTIVATE.PHP.

    Posielame aktivačné listy

    Registračná stránka posiela návštevníkovi list s odkazom na aktiváciu účtu. V predvolenom nastavení je to funkcia WPMU_SIGNUP_USER_NOTIFIKÁCIE () z súboru MS-FACFFIC.PHP. Jeho funkčnosť je možné požičať svoju funkciu. Dôvod, prečo chcete túto funkciu odmietnu používať, pošle referenciu aktivácie účtu s WP-Activate.php. Túto funkciu môžete zakázať pomocou filtra WPMU_SIGNUP_USER_NOTIFIKALIFIKÁCIA PRIPRAVENÍM FALSE NA NIKDY (ak tomu tak nie je robiť, aktivačný list bude odoslaný dvakrát, v poriadku, v skutočnosti dve rôzne písmená).

    Funkcia ARMYOFSELENAGOMEZ_WPMU_SIGNUP_USER_NOTIFIKÁCIE ($ user, $ user_mail, $ kľúč, $ meta \u003d pole ()) (// ... // kód z WPMU_SIGNUP_USER_NOTIFIKÁCIE () Funkcia WP_MAIL ($ user_email, wp_specialChars_decode ($ predmet), $ správa, $ message_headers \\ t ); Návrat false;) add_filter ("WPMU_SIGNUP_USER_NOTIFIKÁCIA", "ARMYOFSEEGEENAGOMEZ_WPMU_SIGNUP_USER_NOTIFIKÁCIE", 10, 4);

    Výsledkom je, že registračná stránka v téme Selena začala vyzerať oveľa čistejšie a opatrne.

    Záver

    Internet má mnoho iných nie veľmi správnych spôsobov, ako urobiť to isté - Apache presmerovanie, Ajax-formy, ktoré nebudú fungovať bez Java Script, atď som sa naozaj nepáčilo, takže som sa snažil urobiť to najprísnejšie Moja vlastná webová stránka.

    Poznamenávam, že úpravy súbory by mali byť schopné starostlivo a pokúsiť sa nepresťahovať od zdroja do Ranknesh, ak WordPress zmenia súbory WP-SIGNUP.PHP a WP-ACTIVE.PHP súbory, boli jednoduchšie porovnávať ich nájsť zmeny .

    Nezabudnite sa pozrieť na zdrojový kód všetkých popísaných funkcií, aby ste sa mohli úplne vyrovnať s tým, čo a ako sa to stane vo vnútri kódu.

    Bonus. Ochrana pred spamermi

    Dokonca aj najmladšie stránky na WordPress sú často podliehajú registrácii spamu. Môžete písať nekonečné podmienky pre filtrovanie roboty, často podobné pokusu o vytvorenie umelej inteligencie 🙂 v prípade multisite, pravidelný presmerovanie v Apache mi pomohol, s ktorým pri otváraní /wp-signup.php a / wp- Acitvate.php, požiadal som o vydanie 404 (nie som expert nastavte Apache.takže moje pravidlá nemusia byť veľmi správne).

    RewriteEngine na rewriteBase / rewriteRule ^ wp-sign .php - rewriterale ^ wp-aktivovať \\ thp - # začať WordPress # Pravidlá z WordPress štandardne Nedotýkajte sa :) # ... # Koniec WordPress

    P. S. Snažím sa popísať niektoré veci tretích strán, čo je podrobne čo najviac, pretože keď som začal, niekedy to bolo nejako povedať a vysvetliť veľa vecí. Tiež sa domnievam, že podobné malé tipy na iných materiáloch, ktoré niekto bude posunutý na štúdium niečoho nového a rozširovania ich oblasti vedomostí. Pravidelné výrazy sa používajú v Records Records, nie sú úplne zložité, napríklad symbol ^ znamená začiatok riadku.

    SEGAL ZOBRAZUJEME PROSTREDNOSTI KROKOVANIE KRITICKEJ PODNIKUJÚCEJ NÁKLADNOSTI NA POPULDOVEJ CMS JOOMLA, Ktoré na konci októbra hromadlo na internete. Bude to o zraniteľnostiach s číslami CVE-2016-8869, CVE-2016-8870 a CVE-2016-9081. Všetky tri sa vyskytujú z jedného kusu kódu, ktorý bol raz v hĺbkach rámca, čakal na svoje vlastné hodiny, potom oslobodiť a priniesť s ním chaos, hacknuté miesta a slzy v akomkoľvek nevinných užívateľov tohto Joomla. Iba najčastejšie a odvážne vývojári, ktorých oči sú červené zo svetla monitorov, a klávesnice sú posiaty s omrvinkami chleba, boli schopní spochybniť opuchnutú skupinu a uložiť jej hlavu na oltárnych opravách.

    Pozor

    Všetky informácie sú poskytnuté výlučne na informačné účely. Ani redaktori, ani autor nie sú zodpovední za prípadnú škodu spôsobenú materiálmi tohto článku.

    Prečo to všetko začalo

    Dňa 6. októbra 2016, Damis Palma (Demis Palma) vytvorila tému o výmene stohu, ktorá sa pýtala: prečo v skutočnosti, v Joomla verzia 3.6 Existujú dve metódy registrácie používateľov s rovnakým registrom mena ()? Prvý sa nachádza v užívateľskej kontrolnej regulátore, a druhý je v užívateľochcontrolruser. Damis chcel vedieť, či sa používajú užívateľstvoControlruser :: Register () metóda sa používa niekde, alebo je to len evolučný anachronizmus, ktorý zostáva zo starej logiky. Bol narušený tým, že aj keď sa táto metóda nepoužíva v žiadnej prezentácii, môže byť nazývaný pomocou vytvorenej žiadosti. Aká bola odpoveď od vývojára pod prezývkou ITOctopus, potvrdzuje: tento problém skutočne existuje. A poslal správu pre vývojárov Joomla.

    Ďalej sa udalosti vyvinuli najrýchlejšie. Dňa 18. októbra vývojári Joomla akceptujú správu Damis, ktorá v tomto čase pripúšťajúc POC, ktorý vám umožní zaregistrovať používateľa. Publikoval poznámku na jeho stránke, kde vo všeobecnosti povedal o probléme a myšlienkach o tom. V ten istý deň vyjde nová verzia Joomla 3.6.3, ktorý stále obsahuje zraniteľný kód.

    Potom Dávid Tampllini (Davide Tampllini) spin točí chybu do stavu registrácie nie je jednoduchým používateľom, ale administrátorom. A 21. októbra príde nový bezpečnostný tím Joomla nový prípad. Už hovorí o zvýšení privilégií. V ten istý deň, oznámenie sa objaví na internetovej stránke Joomla, že v utorok 25. októbra, ďalšia verzia s poradovým číslom 3.6.3 bude uvoľnená, ktorá koriguje kritickú zraniteľnosť v systémovom jadre.

    Dňa 25. októbra, Joomla Security Strike Team nájde posledný problém, ktorý kúsok kódu objaveného Damis. Potom na hlavnej vetve oficiálneho archívu Joomla, sa zaväzuje 21. októbra, s nenápadným názvom pripravuje 3.6.4 Stabilné vydanie, ktoré opravuje nešťastnú chybu.

    Po tom, početné zainteresované osoby sú spojené s prenosom vývojárov do prenosu vývojárov - začnú podporovať zraniteľnosť a variť pevnú látku.

    Dňa 27. októbra, Harry Roberts Researcher vychádza z ready-vyrobeného využitia v repozitári Xiphos Research, ktorý môže nahrať súbor PHP na server s zraniteľným CMS.

    Podrobnosť

    No, s prehliadkou je dokončená, choďte na najzaujímavejšiu vec - rozlišovanie zraniteľnosti. Ako testovacia verzia som nainštaloval JOOMLA 3.6.3, takže všetky čísla riadkov budú relevantné pre túto verziu. A všetky cesty k súborom, ktoré uvidíte Ďalej, bude uvedený vzhľadom na koreň nainštalovaného CMS.

    Vďaka nájdeniu Damis Palm vieme, že existujú dve metódy, ktoré vykonávajú registráciu používateľa v systéme. Prvý je používaný CMS a je v /components/com_users/controllers/comers/controllers/registration.php:108. Druhá (tá, ktorú sme a budeme musieť volať), žije v / komponenty / com_users / radiče / user.php: 293. Pozrime sa na to bližšie.

    286: / ** 287: * Metóda na registráciu používateľa. 288: * 289: * @return Boolean 290: * 291: * @Since 1.6 292: * / 293: Verejná funkčná register () 294: (295: Jssion :: Kontrola kontrolného ("Post") alebo JEXIT (JText :: _ ("Jinvalid_token"); ... 300: // Získajte údaje formulára. 301: $ Data \u003d $ This-\u003e Input-\u003e Post-\u003e Získajte ("User", Array (), "Array");. .. 315: $ Return \u003d $ Model-\u003e Overovanie ($ form, $ dát); 316: 317: // Skontrolujte chyby. 318: Ak ($ Return \u003d\u003d\u003d False) 319: (... 345: / Dokončiť registráciu. 346: $ return \u003d $ model-\u003e register ($ dát);

    Tu som opustil len zaujímavé čiary. Plná verzia zraniteľného spôsobu je možné zobraziť v archíve Joomla.

    Urobíme to, čo sa stane, keď pravidelná registrácia používateľa: Aké údaje sú odoslané a ako sa spracúvajú. Ak je registrácia používateľa povolená v nastaveniach, formulár nájdete na adrese http: //joomla.local/index.php/component/users/? Zobraziť \u003d Registrácia.


    Legitímna požiadavka na registráciu používateľa vyzerá ako nasledujúci screenshot.


    Komponenty COM_USERS je zodpovedné za prácu s užívateľmi. Venujte pozornosť parametrom úloh v dotaze. Má $ Controller. Metóda $. Pozrime sa na štruktúru súborov.

    Názvy skriptov v priečinku regulátory. Spĺňa mená nazývaných regulátorov. Keďže v našej požiadavke je teraz $ Controller \u003d "Registrácia", súbor zavolá. registrácie.php. a jeho metóda registra ().

    Pozor, otázka: Ako prenášať registráciu spracovania v zraniteľnom území v kódexe? Pravdepodobne ste už uhádli. Názvy zraniteľných a súčasných metód sa zhodujú (registrovať), takže môžeme zmeniť názov nazývaného ovládača. A kde je zraniteľný regulátor? Priamo v súbore user.php.. Ukázalo sa, že $ Controller \u003d "User". Zbierame všetky spolu a získajte úlohu \u003d user.register. Teraz je žiadosť o registráciu spracovávať metódou, ktorú potrebujeme.


    Druhá vec, ktorú musíme urobiť, je odosielanie údajov v správnom formáte. Všetko je tu jednoduché. Legitímny register () čaká na pole z nás s názvom JFFFORM, v ktorom vysielame údaje na registráciu - meno, prihlásenie, heslo, pošta (pozri screenshot s dotazom).

    • /components/com_users/controllers/Registration.php: 124: // Získajte užívateľské údaje. 125: $ RequestData \u003d $ This-\u003e Input-\u003e Post-\u003e Získajte ("JFFFORT", ARRAY (), "ARRAY");

    Naše oddelenie prijíma tieto údaje z poľa menom používateľa.

    • /components/com_users/controllers/com_users/controllers/user.php: 301: // Získajte údaje formulára. 302: $ Data \u003d $ This-\u003e Input-\u003e Post-\u003e Získajte ("User", Array (), "Array");

    Preto zmeníme názvy všetkých parametrov s JFROM na užívateľovi.

    Tretím, naším krokom je nájsť CSRF platný token, pretože bez neho nebude registrácia.

    • / Components/com_users/controllers/user.php: 296: Jssion :: Kontrola kontrolného ("Post") alebo JEXIT (JINVALID_TOUND));

    Vyzerá to ako Hash MD5 a môžete si ho vziať napríklad z formulára autorizácie na stránke /index.php/componente/users/?View\u003dlogin.


    Teraz môžete vytvoriť používateľov prostredníctvom požadovanej metódy. Ak sa všetko stalo, blahoželám - práve ste pochopili zraniteľnosť CVE-2016-8870 "Chýbajúce overenie povolení na registráciu nových používateľov."

    Tu je to, ako to vyzerá v "Pracovnej" metóde registra () z užívateľov Controller ControllerRollerRegistration:

    • /components/com_users/controllers/Registration.php: 113: // Ak je registrácia zakázaná - presmerovanie na prihlasovaciu stránku. 114: IF (JCOMPONENTHELPER :: GETPARAMS ("COM_USERS") -\u003e Získajte ("OncildUserRegistration") \u003d\u003d 0) 115: (116: $ This-\u003e Nastaviť (JROUTE :: _ ("index.php? Option \u003d com_Users & Zobrazenie \u003d Prihlásenie ", FALSE)); 117: 118: Návrat FALSE; 119 :)

    A tak zraniteľným:

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

    Jo, v žiadnom prípade.

    Aby sme pochopili druhý, oveľa vážnejší problém, pošleme nám žiadosť tvorenú a sledujeme, ako sa vykonáva na rôznych častiach kódu. Tu je kus, ktorý je zodpovedný za kontrolu údajov odoslaných užívateľom v pracovnej metóde:

    Pokračovanie dostupné len účastníkom

    Možnosť 1. Pripojiť sa k komunite stránok, aby ste si prečítali všetky materiály na stránke

    Členstvo v komunite Počas určeného obdobia vám otvorí prístup ku všetkým materiálom hackerov, zvýši vašu osobnú akumulatívnu zľavu a bude hromadiť profesionálne hodnotenie Xakep skóre!

    Témy zvyčajne nie sú funkčné, ale niekedy sme, vývojári, musíte zaviesť niektoré možnosti v našej téme, aby to bolo o niečo lepšie a pohodlnejšie.

    V tejto príručke zvážime termín "územie pluginov", ako aj naučiť sa používať fantastický nástroj napísaný Thomas Griffin: TGM Plugin Activation Library.

    Funkčnosť témy: Invázia na územie pluginov

    Témy sú navrhnuté tak, aby zmenili návrh webovej stránky programu WordPress. Ideálne by mala téma ovplyvniť len vizuálny aspekt. Avšak, v našom "zlatom veku" WordPress, Vývojári Plug-In často zahŕňajú funkčné funkcie vo svojich témach, ktoré vám umožnia udržiavať konkurencieschopnosť na trhu.

    Toto je invázia územia pluginov. Môžeme prezentovať "územie pluginov" ako niektoré funkčné časti kódu. Akýkoľvek kódový úryvok, ktorý sa mení funkčnosť vašej stránky, musí byť reprezentovaný ako plugin, ak zadaný kód nie je položený v programe WordPress.

    Už som formuloval skôr v jednom z mojich článkov empirickým pravidlom "územné plugins:

    Ak je zvláštnosť súvisí s vizuálnou reprezentáciou stránky, potom by sa v tomto prípade mala zahrnúť do témy; Ak je spojená s funkčnosťou, potom musí byť reprezentovaný ako samostatný plug-in.

    Celkom jednoduché pravidlo. Ľudia sa stále snažia zaregistrovať v úrovni kódových funkčných fragmentov v ich témach, ale katalógy tém (napríklad WordPress.org alebo ThemeForest) neberú témy, ktoré napadnú územie pluginov. Návrh funkčnosti v témach sa teda stal určitým problémom.

    Našťastie existuje jednoduché riešenie, ktoré nejde proti pravidlu "územia pluginov".

    Úvod do knižnice aktivácie TGM Plugin

    Nastavenie aktivácie pluginov TGM

    Venujte pozornosť funkcii TGMPA () s dvoma parametrami na samom konci kódu. Druhým parametrom je premenná $ config, ktorá je tiež pole, ako $ plugins. Ako vyplýva z jeho mena, môžete nakonfigurovať knižnicu aktivácie TGM Plugin pomocou tohto masívu. Premenná prijíma vlastný súbor možností:

    • iD (String) je jedinečné ID pre TGM Plugin Activation Knižnica vo vašej téme. To je veľmi dôležité: Ak iné pluginy tiež používajú TGM plugin aktiváciu, rôzne ID budú zabrániť možným konfliktom.
    • default_path (String) - predvolená absolútna cesta pre plug-iny vo vašej téme. Keď ho nainštalujete, môžete použiť názov ZIP súboru ako hodnota zdroja parametra pre váš plug-in.
    • menu (string) - Menu MENU pre inštaláciu plug-in.
    • has_Notices (Boolean) - Ak sú uvedené v pravidlom, administratívne oznámenia budú vydané pre požadované / odporúčané plug-iny.
    • zamietnutie (Boolean) - Ak je to uvedené v TRUE, užívateľ môže "zatvoriť" upozornenia.
    • demiss_msg (reťazec) - ak je zamietnutá možnosť nastavená vo FALSE, táto správa sa zobrazí nad oznámením správcu.
    • is_Automatic (Boolean) - ak je špecifikovaný v True, pluginy budú aktivované potom, čo používateľ súhlasí s ich inštaláciou.
    • správa (reťazec) - Ďalšie HTML, zobrazené pred zásuvnou tabuľkou.
    • struny (pole) - pole, ktoré obsahuje zobrazené správy. Môžete ich nastaviť ako vysielacie linky. Pozrite sa na súboru príklad.php, aby ste videli úplný zoznam všetkých správ.
    "MYTHEEME-TGMPA", // Vaše jedinečné TGMPA ID "Default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /", // Predvolená absolútna cesta "MENU" \u003d\u003e "MyTheme-Install-Povinné pluginy", // MENU SLUG "HAS_NOTICES" \u003d\u003e TRUE, // Zobraziť oznámenia "Odmietnuté" \u003d\u003e FALSE , // Oznámenia nie sú prepúšťateľné "Demiss_MSG" \u003d\u003e "Naozaj, naozaj potrebujete nainštalovať tieto pluginy, v poriadku?", // Táto správa bude na výstupe v hornej časti NAG "Is_Automatic" \u003d\u003e TRUE, // Automaticky Aktivujte pluginy po inštalácii "Správa" \u003d\u003e "", // správa na výstup priamo pred tabuľkou pluginov" struny "\u003d\u003e pole (); // pole reťazcov správ, ktoré TGM plugin aktivácia používa);\u003e

    Záver

    Ako vidíte, navrhnite funkčnosť v témy WordPress. Možno - budete musieť najprv premýšľať o používateľov, ktorí môžu prepnúť z jednej témy na druhú. TGM Plugin Activation Knižnica ponúka naozaj inteligentný spôsob.

    Čo si myslíte o tomto nástroji? Použili ste to niekedy, plánujete ho používať v budúcnosti? Zdieľaj svoje myšlienky!