AD Aktivujte PHP. Jak vytvořit vlastní registrační stránku v aplikaci WordPress Multisite

Umožňuje používat jeden wordpress nastavení pro více stránek současně. Zároveň každý web obdrží vlastní tabulky v databázi s jedinečnou předponou.

Tabulky s údaji registrovaných uživatelů společné pro všechny síťové stránky. Toto je určité plus a registrace jednoho dne můžete přistupovat k více stránkám. Kromě toho, na každém místě může mít stejný účet různá práva. Například na jednom místě může být uživatel editorem a na jiném správci.

V obvyklé instalaci WordPress Stránka Registrace, autorizace a heslo Reset zobrazuje soubor WP-login.php.

  • wP-login.php - autorizace
  • wP-login.php? Akce \u003d Registrace - Registrace
  • wp-login.php? Akce \u003d lostassword - reset hesla

V režimu multisite se wordpress jádro začne chovat poněkud odlišně a při přepnutí na odkaz wp-login.php? Akce \u003d Registr obdrží přesměrování na wp-signup.php. Toto je registrační stránka vaší sítě, která je výchozí v aplikaci WordPress.

Kromě registrace běžných uživatelských účtů můžete vytvořit novou stránku na něm, pokud superministrátor povolil takovou příležitost v síťových nastaveních (nastavení sítě).

Ve většině témat se registrační stránka nevypadá velmi dobře. Mnoho témat používá rámce CSS, jako je bootstrap, a jejich vlastní specifické třídy pro stylizaci různých prvků na stránkách, takže je těžké napsat jeden html, který bude vhodný pro každého.

Ale neměli byste zoufat, pokud stránka vypadá neuspořádaný. Soubor WP-Signup.php je skvělá věc zpočátku, když není čas pracovat na každé části webu - můžete se zaměřit na další více důležité strany a obsah.

Když budete připraveni udělat svůj strana Registrace, WP-Signup.php bude dobrý vzorek a příkladem, ve kterém je snadné pochopit spektrum funkcí, které WordPress zajišťuje zpracování a ověřování dat zadaných uživateli a vytvářet nové účty.

Hlavní internetová síť

Ve výchozím nastavení aplikace WordPress otevře registrační stránku (WP-Signup.php) v hlavní doméně (webové stránky) sítě. Nicméně můžete vytvářet registrační stránky pro každou síťovou stránku, i když mají témata.

Případ zvážíme, kdy je na všech síťových stránkách používáno jedno téma, ale na každém z nich je registrační stránka. Stránky se liší v jazyku (anglicky a ruštině), takže registrační stránka se zobrazí na adrese "nativní" jazyk. Pokud stránky používají různá témata, vše bude záviset na tom, která témata, která jim vyhovují stejným uspořádání (vynikající situace, která vás může tlačit na sjednocení všech svých témat) nebo stojí za to pracovat na stránkách individuálně.

Alternativa k funkcím.php.

Objednávka v souborech

Mu-pluginy mohou obsahovat libovolný počet souborů a strukturu, která se pro vás bude lišit. Držím se o takové hierarchii:

| MU-pluginy | | Load.php | | Selena-sítě | | Signup | | | | plugin.php | | | ... | | | Jetpack | | | | plugin.php.

V souboru LOAD.PHP jsou připojeny překlady a všechny potřebné "pluginy":

// Načítání přenosů pro MU-pluginy LOAD_MUPLUFIN_TEXTOMAIN ("SELENA_NETWORK", "/ SELENA-Síť / Jazyky /"); // Funkční pro registrační stránku vyžaduje wpmu_plugin_dir. "/seleena-network/sigund/plugin.php"; // Další plugin // vyžaduje wpmu_plugin_dir ...

Uvnitř adresáře Selena-Síť, jsou uloženy složky plug-in. Každý má svůj vlastní plugin.php, který se připojujeme na load.php. Poskytuje flexibilitu a schopnost okamžitě vypnout a zapnout oddělené komponenty Na pracovním projektu v případě nouze.

Registrační stránka

Po pochopení s tím, kde a jak budeme psát kód, můžete jít na vytvoření registrační stránky.

Vytvořit stránku s příkladem.org/signup/ přes obvyklé rozhraní. Jako adresu můžete použít libovolnou adresu URL, která se bude zdát vhodná pro váš projekt.

Přesměrování na požadovanou registrační stránku

Pro aplikaci WordPress dozvědět se o naší nové registrační stránce a provedl přesměrování na něm, když kliknete na odkaz "Registrace", použije se filtr WP_SignUp_Location. Lze jej nalézt uvnitř WP-login.php a je to on, kdo je zodpovědný za přesměrování na výchozí WP-Signup.php.

Případ "Registrovat": IF (IS_MULTISITE ()) (WP_ROLIRECT (WP_REDIRECT (Použít_filters ("wp_signup_location", network_site_URL ("wp-signup.php")); výstup; // ...

Jak si pamatujete, ve výchozím nastavení se registrační stránka otevře v hlavní doméně sítě. To je důvod, proč se zde používá síť_site_url ().

Přidejte obslužný program filtru na MU-pluginy / Selena-Síť / Signup / Plugin.php, který bude mít adresu registrační stránky na aktuální stránce:

Funkce selena_network_signup_page ($ url);) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_Network - předpona, kterou používám v názvech všech funkcí uvnitř MU-pluginů na mých stránkách, aby se zabránilo konfliktům, by mělo být nahrazeno vlastními jedinečnou předponou. Prioritou přidávání filtru 99, protože některé pluginy, jako je BBSPRESS a Buddypress, mohou přepsat tuto adresu na vlastní (pluginy MU se načtou dříve než běžné pluginy, viz výše).

Upozorňujeme, že home_URL () se používá, což, na rozdíl od sítě NATICK_SITE_URL (), poskytuje adresu aktuálního webu a nikoli hlavní síťové stránky.

Funkce WP-Signup.php

Soubor WP-Signup.php obsahuje velký počet Funkce a kód. Chcete-li zobrazit obrázek jako celek, můžete použít skládací kód. Zpravidla v angličtině se nazývá "Skládání kódů".

Na samém začátku souboru od 1 do 80 se řádek (ve verzi 4.1.1) provádějí různé kontroly a výstupy stránky "Start" pomocí Get_Header ().

Dále je deklarováno mnoho metod a dříve, než s nimi začneme pracovat, stojí za pochopení toho, co činí každou funkci. Uvnitř, mnoho z nich jsou často používány další funkce s předponou WPMU_, všechny jsou uvedeny v souboru WP Zahrnuje / MS-Functions.php. Tato sekce je těžké pochopit, aniž by viděl kód sami. Pod malým popisem základních funkcí v případě, že máte potíže.

  • wpmu_signup_stylesheet () - Výstup dalších CSS na registrační stránce.
  • show_blog_form () - pole pro registraci webu (adresa, viditelnost názvu pro vyhledávače).
  • validate_blog_form () - Kontrola zadané adresy stránek a názvů pomocí wpmu_validate_blog_signup ().
  • show_user_form () - pole pro registraci uživatele (přihlašovací a e-mailová adresa).
  • validate_user_form () - Kontrola zadaných přihlášení a adres. Pošta s wpmu_validate_user_signup ().
  • signup_another_blog () - Pole pro registraci nových stránek pomocí Show_blog_Form () pro uživatele, kteří jsou již zaregistrováni na webu.
  • validate_another_blog_signup () - Zkontroluje adresu a název stránky pomocí ověřování_blog_form ().
  • signup_User () je hlavní funkce pro výstup pole registrace.
  • validate_user_signup () - Zkontroluje přihlašovací a e-mailovou adresu. Pošta s validate_user_form ().
  • signUp_blog () - Pole pro zadání adresy, názvu a viditelnosti webu (druhý krok registrace) pomocí Show_blog_Form ().
  • validate_blog_signup () - Zkontroluje přihlašovací údaje, e-mailovou adresu. Mail, adresa a název stránky.

Na samém dně souboru WP-Signup.php (od 646 šití ve verzi 4.1.1) hlavní logikou registrační stránky, která používá výše uvedené metody. Tato část kódu není předložena funkce. Na konci se nazývá Get_Footer ().

Zkopírujte funkční WP-Signup.php

Dále bude popsán postup pro kopírování WP-Signup.php v zásuvných modulech MU-INS a provedení změn vidlice. Může se zdát správným způsobem. Místo toho můžete napsat své funkce od škrábanců ke kontrole a výstupu formulářů pomocí tříd, ne běžných funkcí. Podle mého názoru má WP-Signarup.php již nezbytnou logiku pro naši stránku, zůstává pouze pro drobné změny.

Při aktualizaci WordPress, WP-Signup.php se čas od času mění, ale to neznamená, že s každým vydáním bude muset synchronizovat jeho "forc". Funkce uvnitř WP-Signup.php jsou v podstatě zapojeny pouze výstupem HTML, kontrola dat, vytváření účtů a stránek se zapojují do předpony WPMU_, deklarované v MS-Functions.php.

Vytvoříme funkci, která zobrazí registrační formulář na stránce. Chcete-li to provést, zkopírujte WP-Signup.php z root wordpress v aplikaci MU-purpings / selena-sítě / registraci /. Připojte jej uvnitř Mu-Pugins / Selena-Síť / Signup / Plugin.php).

Vyžadovat WPmu_Plugin_dir. "/ SELEENA-NETWORK /SIGNUP/WP-SIGNUP.PHP";

Smazat vše vyžadovat a zbytečné kontroly od samého počátku kopírovaného souboru. Ve verzi 4.1.1 se jedná o celý kód od 1 do 80 řádků.

Nyní jsme připraveni vytvořit hlavní funkci pro zobrazení registračního formuláře. Chcete-li to provést, všechny logiky z řádku 646 a na samém konci souboru budeme převedeni do funkce s názvem selena_network_signup_main. Na samém konci smažete dva zbytečné uzavření

(řádky 722 a 723), stejně jako volání get_footer ().

V nově vytvořeném systému selena_network_signup_main () na samém začátku budeme deklarovat globální proměnnou Active_Signit, že všechny ostatní metody z tohoto použití. A přidejte volání události před_signup_formou, který jsme ze začátku souboru smazali.

Funkce selena_network_signup_main () (globální $ Active_SignUp; do_action ("před_signup_form"); // ...)

Nyní zůstane pouze změnit rozvržení na všech místech, kde je to nutné a registrační stránka je připravena.

Výstup registračního formuláře

Zde existují alespoň dvě možnosti. Výhodnější způsob, jak vytvořit šortku a umístit jej na stránku přes obvyklý editor.

// Vytvořit síťový křížový kód Network_Signit Add_ShortCode ("Network_Signup", "Selena_network_signup_main");

Druhou možností je vytvořit stránku Page-Signup.php na složce Dcera motivu. Namísto slova "Signup" můžete použít jedinečné ID přiřazené k stránce. Uvnitř šablony přidejte požadované rozvržení a proveďte výběr Selena_Network_Signup_main () na správném místě.

Výsledkem je, že moje registrační stránka začala vypadat mnohem lépe a čistší.

Aktivační stránka

Ve výchozím nastavení WordPress konvenčně rozděluje registrační proces v multisite pro dva kroky - vyplnění formuláře na webu a aktivaci účtu, když je odkaz odeslán do exilu elektronický dopis. Po vyplnění formuláře vytvořené v předchozí části, WordPress odešle dopis s malým instrukcí a odkazem na aktivaci účtu.

Pro výstup aktivační stránky je soubor WP-Activate.php zapověněn v adresáři root wordPress. WP-Activate.php lze také zcela změnit. Proces je podobný tomu, co jsme již udělali pro WP-Signup.php.

Vytvořit příklad příkladu.org/activate / stránku prostřednictvím normálního rozhraní. Jako adresu použijte libovolnou adresu URL, která se bude pro vás vhodná.

Zkopírujte soubor WP-Activate.php do zásuvných modulů MU-Plugins a připojte jej k MU-Pugins / Selena-Síze / SIGNUCS / PLUGIN.PHP.

Vyžadovat WPmu_Plugin_dir. "/selena-network/sigund/wp-activate.php";

Uvnitř, ne tolik obsahu, na rozdíl od WP-Signup.php. Soubor provádí jednu operaci - aktivuje účet, pokud je správný klíč získán a zobrazí chybovou zprávu nebo úspěšnou operaci.

Odstraňte všechny zbytečné kontroly a vyžadují - od 1 do 69 řádků v aplikaci WordPress 4.1.1. Na samém konci odstraňte volání get_footer (). Zbývající obsah převodem do funkce selena_network_activate_main ().

Je zajímavé si všimnout, že před načtením WordPress (WP-Load.php) byla oznámena konstanta WP_INSTRING. Jeho přítomnost způsobuje aplikaci WordPress ne načtou pluginy.

Stejně jako v případě registrační stránky zůstává pouze pro opravu uspořádání, kde je nutné. Můžete také změnit text zobrazených zpráv (v tomto případě nezapomeňte přidat textovou doménu MU-pluginů do všech funkčních překladatelů, není nainstalován nikde jinde).

Hotová funkce může být použita na předem určené stránce prostřednictvím šutoru nebo samostatné šablony v dceřiné společnosti.

Aktivační dopisy s řádnými odkazy

Aktivační stránka je připravena k práci, ale WordPress o tom neví a bude stále posílat aktivační dopisy s odkazem na WP-Activate.php. Na rozdíl od WP-Signup.php není žádný filtr, který by umožnil změnit adresu. Místo toho musíte napsat vaši funkci, která bude posílat písmena se správnými odkazy.

V době vyplnění a odeslání formuláře na stránce registrace WordPress. Volání wpmu_signUp_ uživatel.() nebo wpmu_signup_ blog.() V závislosti na typu registrace. Obě funkce vytvářejí novou položku v tabulce WP_SIGUPS, která ji vyplňuje potřebným obsahem, z nichž je aktivační klíč účtu.

Po v závislosti na funkci se nazývá wpmu_sigup_ uživatel._Notification () nebo wpmu_signup_ blog._Notifikace (). Obě funkce mají podobnou funkčnost - generují a odešlete dopis s odkazem na aktivaci, ale vezmi různé argumenty. V obou existují filtry pro "zachycení" událostí.

Jestliže (!! Použít_filters ("wpmu_signup_user_notification", $ uživatele, $ user_email, $ klíč, $ meta)) vrátit false;

Aktivace účtů s vytvořením blogu:

Pokud (!! Používejte_Pilters ("wpmu_signup_blog_notification", $ doména, $ cesta, $ title, $ user, $ user_email, $ klíč, $ meta)) (vrátit false;)

Zůstane pouze psát vaše obsluhy, ve které posíláte dopisy přes WP_Mail () a na samém konci nutně dávat nepravdivé, takže WordPress neposílá aktivační písmeno dvakrát - jeden z vašich, jiný - písmeno ve výchozím nastavení s odkazem na Wp-aktivovat.php.

Funkce SELENA_NETWWORK_WPMU_SIGNUP_USER_NOCIFIKACE ($ Uživatel, $ user_email, $ klíč, $ meta \u003d array ()) (// generovat záhlaví, záhlaví textu a dopisu // ... // odeslat dopis nebo přidat cron-úkol odeslat dopis Wp_mail ($ user_email, wp_specialchars_decode ($ téma), $ message, $ message_headers); // obnovit false tak, že wordpress neodesílá aktivační písmeno dvakrát vrátit hodnotu false;) add_filter ("wpmu_signup_uver_notification", "selena_network_uver_notification", "selena_network_wpmu_signup_user_notification", 10, 4) ;

Pokud posíláte dopisy přes SMTP server nebo počet registrací je velmi velký, měli byste přemýšlet o tom, že nebudete odesílat dopisy okamžitě. Místo toho můžete přidat Cron-úkoly pomocí aplikace Wordpress Cron.

Zavřít Přístup k WP-Signup.php a WP-Activate.php

Po vytvoření vlastních registračních a aktivačních stránek může být nutné zavřít "originály". Pokud jsou například další pole na registrační stránce, která musí být vyplněna. Také, mnoho wordpress weals je vystaven registrací spamu.

Řešení dvou problémů s jednou akcí lze požádat Apache, aby se dal 404 v případě pokusu o otevření těchto stránek. Chcete-li to provést, stačí zaregistrovat pár dalšího přepínače do konfiguračního souboru OR.htAccess.

RewriteEngine na rewriteBase / # Znalost pravidelných výrazů nebude nikdy zbytečné :) Rewriterule ^ WP-Signup \\ .php - Rewriterule ^ wp-aktivovat . # Ukončit wordpress.

Závěr

Pro tento a mnoho dalších "problémů" spojených s wordpress na internetu existuje mnoho řešení. Chcete-li vytvořit například registrační a aktivační stránky, některé jsou nabízeny pro přepisování původního WP-Signup.php a WP-Activate.php. To by nemělo být provedeno, protože v případě aktualizace aplikace WordPress ztratíte všechny změny provedené soubory a nemůžete, zkontrolovat integritu jádra pomocí.

Při vývoji jakéhokoliv doplnění by se témata nebo řešení měla být vynaložena nějaký čas, aby se vypořádala s tím, co se děje uvnitř WordPress. Existuje mnoho užitečných ladění nástroje pro to.

P.S.

Chcete-li automaticky přiřadit různá role, mohou uživatelé používat multisite uživatelské správy plugin.

Máte-li jakékoli dotazy nebo potíže při vytváření registračních a aktivačních stránek po přečtení článku, zanechte komentář a my odpovíme.

27.03.2015 27.03.2015

Wordpress Developer. Miluje pořádek ve všem a zabývá se novými nástroji. Inspirovaný architekturou složek symfony.

  • Vytvořte si vlastní registrační stránku pro multisite namísto standardního WP-Signup.php.

    V obyčejném instalace WordPress. Registrační stránka (autorizace, reset hesla) zobrazí soubor WP-login.php.

    • /wp-login.php - autorizace
    • /wp-login.php?action\u003dregister - registrace
    • /wp-login.php?action\u003dlostpassword - reset hesla

    Pro multisite v WP-login.php jsou samostatné podmínky. Takže, když kliknete na odkaz /wp-login.php?action\u003dregister na multisaite, wordpress provede přesměrování na stránku /wp-signup.php. V mnoha tématech, strana vypadá příliš atraktivní, takže si uděláme vlastní.

    Hlavní internetová síť

    Ve výchozím nastavení aplikace WordPress otevře registrační stránku (WP-Signup.php) v hlavní doméně (webové stránky) sítě. Můžete však vytvořit samostatnou registrační stránku pro každou síťovou stránku, i když mají různá témata. Budeme v úvahu případ, kdy na všech síťových stránkách mají vlastní registrační stránku, ale stejné téma se používá a lokality se liší pouze v jazyce. Pokud jsou použita různá témata, budete muset psát více kódu.

    funkce.php?

    Ne. Zdá se, že název tohoto souboru je uveden v jakémkoli článku o WordPress. V našem případě s přihlédnutím k tomu, že funkce registrace je navržena pro několik stránek, má smysl vzít ji do pluginů MU-pluginy, které jsou načteny při otevírání libovolného místa.

    Lyrický digresion.

    Stojí za zmínku, že pluginy Mu jsou načteny dříve než běžné zásuvné moduly a dokud není Wordpress jádro plně staženo, takže volání pro některé funkce může vést k chybám Fatabal v PHP. Podobné "brzy" stahování má své výhody. Řekněme uvnitř jakéhokoliv tématu nelze držet na nějakou akci, která je spuštěna před stažením souboru Function.php z tématu. Příkladem toho může sloužit jako Plugin JetPack_Module_loadle_loadle_loaded_related-příspěvek (příbuzné-příspěvky - název modulu), se kterým je možné sledovat aktivitu modulů v Jetpack. Není možné "spojovat se" z souboru tématu k této akci, protože akce již fungovala před načtením tématu - pluginy jsou načteny dříve. Můžete se podívat na společný obraz spouštěcího řádu WordPress na referenční stránce Akce v kódu.

    Objednávka v souborech

    MU-pluginy mohou obsahovat libovolný počet souborů a libovolný graf, který se vám bude zdát logický. Držím se o takové hierarchii:

    | -Mu-pluginy | - | load.php | - | - | Selena-sítě | - | - | - | - | - | - | - | - | - | - | - | - | - | - | -... | - | - | - | - | -jetpack | - | - | - | - | - | - | - | - | - | - | - |

    V souboru Load.php jsou všechny potřebné "pluginy" připojeny k naší síti:

    Zatížení trasláty pro všechny addony load_muplugin_texdomain ("selena_network", "/ selena-sítě / jazyky /"); // Signalizace sítě vyžadují wpmu_plugin_dir. "/seleena-network/sigund/plugin.php"; // Další pluginy // vyžadují wpmu_plugin_dir ...

    Uvnitř složky Selena-Síť, plug-in složky jsou uloženy, každý má svůj vlastní plugin.php, který se připojujeme na Load.php. Dává flexibilitu a schopnost rychle vypnout a zahrnovat některé věci.

    Adresa registrační stránky

    Chcete-li zadat adresu registrační stránky, použijte filtr WP_Signit_Location. Lze jej nalézt uvnitř souboru WP-login.php a je to on, kdo je zodpovědný za přesměrování na WP-Signup.php.

    Případ "Registrovat": IF (IS_MULTISITE ()) (wp_multisite (wp_redirect (Použít_filters ("wp_signup_location", network_site_URL ("wp-signup.php")); výstup;

    Přidejte svou funkci do MU-plugins / Selena-Síť / Signup / Plugin.php, která poskytne adresu registrační stránky na aktuální stránce:

    Funkce selena_network_signup_page ($ url) (vrátit home_url (). "/ Signup /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_Network - předpona, kterou používám v názvech všech funkcí uvnitř MU-pluginů na mých stránkách, aby se zabránilo konfliktům, by mělo být nahrazeno vlastními jedinečnou předponou. Prioritou přidávání filtru 99, protože některé pluginy, jako je BBSPRESS a Buddypress, mohou přepsat tuto adresu na vlastní (pluginy MU se načtou dříve než běžné pluginy, viz výše). Upozorňujeme, že Home_URL () se používá namísto sítě Network_Site_Url (), opustit návštěvník ve stejné doméně. Můžete použít libovolnou adresu URL jako adresu.

    Vytvoření stránky

    Nyní pojďme vytvořit stránku s webem.com/signup/ přes regálové rozhraní a v šabloně složky dceřiného předmětu pro naši novou stránku - page-signup.php. Místo slova "Signup" můžete použít jedinečné ID.

    Uvnitř nové šablony musíte zavolat funkci selena_network_signup_main (), která zobrazí registrační formulář.

    Stojí za zmínku, že celý proces s šablonami není vyžadován a místo toho můžete vytvořit vlastní šortku, která také volá funkce selena_network_signup_main ().

    wP-Signup.php a WP-Activate.php

    Nyní vytvoříme funkci, která zobrazí registrační formulář. Chcete-li to provést, zkopírujte soubory WP-Signup.php a WP-Activate.php z kořenového WordPress v aplikaci MU-pupctings / Selena-Síť / Signup / (a \u200b\u200bnezapomeňte je připojit uvnitř MU-plugins / selena-sítí / Signup / plugin.php). Další manipulace se soubory jsou nesmírně obtížné a dlouhé popisovat, takže přijít je učinit sami. Budu popisovat pouze to, co přesně je třeba udělat a publikovat zdrojové soubory vašeho projektu:

    1. Na začátku souboru smažte všechny požadovat, volání funkce a další kódové funkce.
    2. Přejmenujte všechny funkce přidáním jedinečných předpon do názvů.
    3. Spodní část kódu WP-Signup.php je zabaleno do funkce selena_network_signup_main a v jeho samém začátku napsat globální $ Active_Signap; .
    4. Nahraďte rozvržení na vlastní na správných místech.

    Uvnitř WP-Activate.php musíte udělat stejný:

    1. Odstranit všechny funkce kódu mimo funkce, rozložení rozložení do samostatné funkce.
    2. Změňte rozložení v místech, kde je nutné.

    Soubor WP-Activate.php je zodpovědný za stránku aktivace účtu. Stejně jako u registrace, musíte vytvořit samostatnou šablonu uvnitř, která volá funkce z souboru WP-Activate.php.

    Posíláme aktivační dopisy

    Registrační stránka odešle návštěvníkovi dopis s odkazem na aktivaci účtu. Ve výchozím nastavení se jedná o funkci WPMU_SIGUP_USER_USER_NOTIFIKACE () z souboru MS-Function.php. Jeho funkčnost lze vypůjčit svou funkci. Důvodem, proč chcete tuto funkci odmítnout, odešle odkaz na aktivaci účtu s WP-Activate.php. Tuto funkci můžete zakázat pomocí filtru WPMU_SIGUP_USER_NOTIFIFIKACE pohybem FALSE na něj (pokud to není, aktivační dopis bude zaslán dvakrát, v pořádku, ve skutečnosti dvě různá písmena).

    Funkce ARMYOFSELENAGOMEZ_WPMU_SIGUP_USER_NOTIFIKACE ($ User, $ User_mail, $ Key, $ Meta \u003d Array ()) (// ... // Kód z WPMU_SIGUP_USER_NOTIFIKACE () WP_SIGNUP_USER_NOTIFIKACE () WP_MAIL ($ user_email, WP_SPECIALCH_DECODE ($ Subjektu), $ Message, $ message_headers ); Vrátit false;) add_filter ("wpmu_signup_user_notification", "armyofsignup_useragomez_wpmu_signup_user_notifikace", 10, 4);

    Výsledkem je, že registrační stránka v tématu Seleny začala vypadat mnohem čistší a opatrně.

    Závěr

    Internet má mnoho dalších ne správných způsobů, jak udělat totéž - Apache přesměrování, ajax-formy, které nebudou fungovat bez Java skriptu, atd. Opravdu jsem se mi moc nelíbí, takže jsem se snažil udělat to nejvíce správně Moje vlastní webové stránky.

    Všiml jsem si, že soubory EDIT by měly být schopny pečlivě a snažit se nepohybovat od zdroje na RANKSHESH, pokud WordPress mění soubory WP-Signarup.php a WP-Activate.php, byly snazší porovnávat je, aby našli změny .

    Nezapomeňte se podívat na zdrojový kód všech výše popsaných funkcí, aby se plně vypořádal s tím, a jak se to stane uvnitř kódu.

    Bonus. Ochrana proti spammerům

    Dokonce i nejmladší místa na WordPress často podléhají registraci spamu. Můžete napsat nekonečné podmínky pro filtrování robot, často více podobné pokusu o vytvoření umělé inteligence 🙂 v případě multisite mi pomohl pravidelný přesměrování v Apache, s nímž při otevírání /wp-signup.php a / WP- ACITVATE.PHP, požádal jsem o vydání 404 (nejsem odborník upravte Apache.Takže moje pravidla nemusí být velmi správná).

    RewriteEngine na rewriteBase / rewriterule ^ wp-signup ^php - rewriterule ^ wp-aktivovat

    P. S. Snažím se popsat nějaké věci třetích stran co nejvíce co nejvíce, protože když jsem začal, někdy to bylo nějakým způsobem říct a vysvětlit mnoho věcí. Také věřím, že podobné malé tipy na jiné materiály Někdo bude tlačen na studium něčeho nového a rozšiřování jejich oblasti znalostí. Pravidelné výrazy se používají v Reriterule Records, nejsou zcela složité, například symbol ^ znamená začátek řádku.

    Segal Budeme zvážit vykořisťování kritické 1 denní zranitelnosti v populární CMS Joomla, která na konci října zhoršila na internetu. Bude to o zranitelnostech s čísly CVE-2016-8869., CVE-2016-8870. a CVE-2016-9081.. Všechny tři se vyskytují z jednoho kusu kódu, který byl kdysi v hlubinách rámce, čekal na jejich vlastní hodiny, pak se uvolní a přinést s sebou chaos, hacknuty stránky a slzy v jakýchkoli nevinných uživatelích této Joomla. Pouze nejzávažnější a odvážní vývojáři, jejichž oči jsou červené od světla monitorů, a klávesnice jsou vytrženy chlebovým drobkům, byli schopni zpochybnit oteklé srdce a ukládat hlavu na oltáři oprav.

    Varování

    Všechny informace jsou poskytovány výhradně pro informační účely. Ani redakce ani autor nejsou odpovědní za případné škody způsobené materiály tohoto článku.

    Proč to všechno začalo

    6. října 2016, Damis Palma (Demis Palma) vytvořil téma na výměně zásobníku, která se zeptala: Proč ve skutečnosti v Joomla verze 3.6 Existují dvě metody registrace uživatele se stejným názvem registru ()? První je umístěn v řadiči uživatelůcontrolerregistration a druhý je v uživatelíchControlerUser. Damis chtěl vědět, zda je metoda uživatelůControlerLerUSER :: Register () používána někde, nebo je to jen evoluční anachronismus, který zůstane ze staré logiky. On byl rušen tím, že i když tato metoda není používána v žádné prezentaci, lze ji vyzvat pomocí formuláře žádosti. Jaká byla odpověď od developera pod přezdívkou Itoctopus, potvrzující: Problém opravdu existuje. A poslal zprávu o vývojářům Joomla.

    Dále události vyvinuly nejrychleji. Dne 18. října, vývojáři Joomla přijímají Damisovou zprávu, která tímto časem odráží POC, což vám umožní zaregistrovat uživatele. On publikoval poznámku na svých stránkách, kde obecně říkaly o problému a myšlenkách o tom. Ve stejný den vyjde nová verze Joomla 3.6.3, který stále obsahuje zranitelný kód.

    Po tom, David Tampellini (Davide Tampellini) točí chyba do stavu registrace není jednoduchý uživatel, ale administrátor. A 21. října dorazí bezpečnostní tým Joomla nový případ. Už mluví o zvyšování oprávnění. Ve stejný den se oznámení objeví na webových stránkách Joomla, která v úterý 25. října bude vydána další verze s pořadovým číslem 3.6.3, která opravuje kritickou chybu zabezpečení v jádru systému.

    25. října, Joomla Security Strike tým najde poslední problém, který kód zjištěn Damis. Pak na hlavní pobočce oficiálního repozitáře Joomla, potvrzení 21. října s nenápadným názvem připravit 3.6.4 Stabilní vydání, které opravuje špatně oslabenou chybu.

    Poté jsou četné zúčastněné jedinci připojeni k přenosu vývojářů k přenosu vývojářů - začnou podporovat zranitelnost a vařit pevnou.

    27. října, Harry Roberts výzkumník stanoví ready-made exploit v úložišti výzkumu XIPHOS, který může nahrát soubor PHP na server se zranitelným CMS.

    Podrobnosti

    No, s prehistorií, které je dokončeno, přejděte na nejzajímavější věc - rozpoznání zranitelnosti. Jako testovací verzi jsem nainstaloval Joomla 3.6.3, takže všechna čísla řádků budou pro tuto verzi relevantní. A všechny cesty do souborů, které uvidíte, budou označeny relativní k kořenem nainstalovaného CMS.

    Díky Najít Damis Palm víme, že existují dva metody, které provádějí registraci uživatele v systému. První je používán CMS a je v /components/com_users/controllers/comers/controlers/registration.php:108. Druhý (ten, který my a budeme muset zavolat), žije v / komponenty / COM_USERS / CONTROLSERS / User.php: 293. Podívejme se na to blíž.

    286: / ** 287: * Metoda zaregistrovat uživatele. 288: * 289: * @Return Boolean 290: * 291: * @Since 1.6 292: * / 293: Public Function Register () 294: (295: JSession :: CheckToken ("Post") nebo Jexit (JTEXT :: _ ("Jinvalid_Token")); .. 315: $ návrat \u003d $ Model-\u003e Ověřit ($ Formulář, $ data); 316: 317: // Zkontrolujte chyby. 318: Pokud ($ RETURN \u003d\u003d\u003d FALSE) 319: (... 345: / Dokončete registraci. 346: $ návrat \u003d $ Model-\u003e Registrace ($ data);

    Zde jsem zanechal jen zajímavé linky. Plná verze zranitelné metody lze zobrazit v úložišti Joomla.

    Získeme to, co se stane, když se pravidelná registrace uživatele: jaká data jsou odeslána a jak jsou zpracovány. Pokud je v nastavení povolena registrace uživatele, formulář naleznete na adrese http: //joomla.local/index.php/component/users/? Zobrazit \u003d registrace.


    Legitimní žádost o registraci uživatele vypadá jako následující screenshot.


    Komponenty COM_USERS odpovídá za práci s uživateli. Věnujte pozornost parametru úloh v dotazu. To má $ Controller. $ Metoda. Podívejme se na strukturu souborů.

    Jména skriptů ve složce regulátory. Vyhovuje názvům volaných regulátorů. Vzhledem k tomu, že v našem přání je nyní $ Controller \u003d "Registrace", soubor zavolá. registrace.php. a jeho registr ().

    Pozornost, otázka: Jak přenášet zpracování registrace v ohrožené oblasti v kódu? Pravděpodobně jste již hádali. Jména zranitelných a současných metod se shodují (registrovat), takže můžeme změnit název nazvané regulátoru. A kde je zranitelný regulátor? V souboru user.php.. Ukazuje se $ Controller \u003d "User". Shromažďujeme všechny dohromady a získáme úlohu \u003d User.Register. Nyní je žádost o registraci zpracovávána metodou, kterou potřebujeme.


    Druhá věc, kterou musíme udělat, je posílat data ve správném formátu. Všechno je tady jednoduché. Legitimní registr () čeká na řadu od nás volal JFform, ve kterém vysíláme data k registraci - jméno, přihlášení, heslo, poštu (viz Screenshot s dotazem).

    • /components/com_users/controlers/registration.php: 124: // Získejte uživatelská data. 125: $ requestdata \u003d $ Toto-\u003e vstup-\u003e Post-\u003e Získat ("Jform", Array (), "Array");

    Naše oddělení obdrží tato data z pole s názvem uživatele.

    • /components/com_users/controlers/user.php: 301: // Získejte data formuláře. 302: $ Data \u003d $ Toto-\u003e Vstup-\u003e Post-\u003e Získat ("User", Array (), "Array");

    Proto měníme názvy všech parametrů s JFromem na uživateli.

    Třetí naším krokem je najít CSRF platný token, protože bez ní nebude registrace.

    • /Components/com_users/controlers/user.php: 296: Jsession :: CheckToken ("post") nebo Jexit (Jinvalid_Token);

    Vypadá to jako hash md5, a můžete si ho vzít, například z autorizačního formuláře na stránkách /index.php/component/users/?view\u003dlogin.


    Nyní můžete uživatelé vytvářet prostřednictvím požadované metody. Pokud se všechno stalo, blahopřeji - právě jste pochopili zranitelnost CVE-2016-8870. "Chybějící ověření povolení k registraci nových uživatelů."

    Zde je způsob, jak to vypadá v "pracovní" metodě registru () z řadiče uživatelůControllerregistration:

    • /components/com_users/controlers/registration.php: 113: // Pokud je registrace zakázána - přesměrování na přihlašovací stránku. 114: If (Jcomponenthelper :: Getparams ("COM_USERS") -\u003e Získat ("AllowuserRegistration") \u003d\u003d 0) 115: (116: $ Toto-\u003e SetRedirect (Jroute :: _ ("index.php? Volba \u003d com_users & Zobrazit \u003d přihlášení ", false)); 117: 118: Vrátit FALSE; 119 :)

    A tak v ohrožení:

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

    Jo, v žádném případě.

    Chcete-li pochopit druhý, mnohem vážnějším problémem, zašleme žádost, kterou tvoří nás a následujte, jak se provádí na různých částech kódu. Zde je kus, který je zodpovědný za kontrolu dat odeslaných uživatelem v pracovní metodě:

    Pokračování dostupné pouze účastníkům

    Možnost 1. Zapojte se do komunity webu a přečtěte si všechny materiály na webu

    Členství ve Společenství během stanovené lhůty otevře přístup ke všem materiálům hackera, zvýší vaši osobní akumulativní slevu a akumuluje profesionální hodnocení XakeP skóre!

    Témata nejsou obvykle funkční, ale někdy my, vývojáři, musíte zavést některé možnosti v našem tématu, aby bylo o něco lepší a pohodlnější.

    V této příručce budeme zvažovat termín "území pluginů", stejně jako naučit se používat fantastický nástroj napsaný Thomas Griffin: TGM plugin Aktivační knihovna.

    Funkčnost tématu: Invaze na území pluginů

    Témata jsou určena ke změně návrhu webové stránky WordPress. V ideálním případě by mělo být tématem ovlivnit pouze vizuální aspekt. Nicméně, v našem "zlatém věku" Wordpress, plug-in vývojáři často zahrnují funkční funkce ve svých tématech, které vám umožní udržet konkurenceschopnost na trhu.

    Toto je invaze území pluginů. Můžeme představit "území pluginů" jako některé funkční části kódu. Jakýkoliv kód kódu Změna funkčnosti vašeho webu musí být reprezentován jako plugin, pokud zadaný kód není položen v jádru WordPress.

    Už jsem formuloval dříve v jednom z mých článků empirické pravidlo "teritoriální pluginy:

    Pokud se zvláštnost souvisí s vizuální reprezentací stránky, pak v tomto případě by měl být zahrnut do tématu; Pokud je spojena s funkčností, musí být reprezentován jako samostatný zásuvný modul.

    Docela jednoduché pravidlo. Lidé se stále snaží registrovat na úrovni funkčních fragmentů kódů ve svých tématech, ale katalogy témat (například Wordpress.org nebo ThouseForest) neberou témata, která napadají území pluginů. Návrh funkčnosti v tématech se tedy stal určitým problémem.

    Naštěstí existuje jednoduché řešení, které nechodí proti pravidlu "území pluginů".

    Úvod do knihovny aktivace pluginu TGM

    Nastavení aktivace pluginu TGM

    Věnujte pozornost funkci TGMPA () se dvěma parametry na samém konci kódu. Druhým parametrem je proměnná $ CONFIG, což je také pole, jako je pluginy $. Jak následuje z jeho názvu, můžete nakonfigurovat knihovnu aktivačního pluginu TGM pomocí tohoto masivu. Proměnná přijímá vlastní sadu možností:

    • iD (řetězec) je jedinečné ID pro aktivační knihovnu Plugin TGM ve vašem tématu. To je velmi důležité: Pokud jiné pluginy také používají aktivaci pluginu TGM, různé ID zabrání možným konfliktům.
    • default_Path (String) - výchozí absolutní cesta pro plug-iny ve vašem tématu. Při instalaci jej můžete použít název souboru ZIP jako hodnota zdrojové parametry pro plug-in.
    • menu (řetězec) - menu menu pro instalaci plug-ins.
    • hAS_NOTICES (BOOLEAN) - Pokud je uvedeno v pravdivé, bude vydána administrativní oznámení pro požadované / doporučené plug-iny.
    • odmítnutí (Boolean) - Pokud je uvedeno v platu, uživatel může "zavřít" oznámení.
    • demis_msg (řetězec) - Pokud je volba propouštění nastavena v hodnotě false, tato zpráva zobrazí výše uvedená oznámení správce.
    • iS_AUTOMATIC (Boolean) - Pokud je uvedeno v platu, budou pluginy aktivovány poté, co uživatel je nainstalován.
    • zpráva (řetězec) - Další HTML, zobrazeno před tabulkou plug-in.
    • strings (Array) - pole, které obsahuje zobrazené zprávy. Můžete je nastavit jako vysílací řádky. Podívejte se na soubor příkladu.php a zobrazte úplný seznam všech zpráv.
    "Mytheme-tgmpa", // vaše jedinečné tgmpa id "default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /", // výchozí absolutní cesta "menu" \u003d\u003e "Mytheme-install-povinné-pluginy", // menu Slug "has_notices" \u003d\u003e true, // zobrazit oznámení administrátora "odmítnout" \u003d\u003e false " , // Oznámení nejsou odmítnutelné "DISPRISS_MSG" \u003d\u003e "Opravdu, opravdu potřebuju, abyste nainstalovali tyto pluginy, v pořádku?", // Tato zpráva bude výstupem na vrcholu NAG "is_automatic" \u003d\u003e true, // automaticky Aktivujte pluginy po instalaci "Zpráva" \u003d\u003e "", // Zpráva na výstup přímo před tabulkou pluginů" Strings "\u003d\u003e Array (); // pole řetězců zpráv, které aplikace TGM plugin aktivace používá);\u003e

    Závěr

    Jak vidíte, navrhnout funkčnost témata WordPress. Možná - prostě musíte myslet především o uživatelích, kteří mohou přepnout z jednoho tématu do druhého. Aktivační knihovna TGM nabízí pro to opravdu chytrý způsob.

    Co si myslíte o tomto nástroji? Už jste někdy použil, plánujete ji používat v budoucnu? Sdílej svoje myšlenky!