Hirdetés aktiválja a PHP-t. Hogyan készítsünk saját regisztrációs oldalt a WordPress Multisite-ben

Lehetővé teszi, hogy egy Wordpress beállítást használjon több webhelyre egyszerre. Ugyanakkor minden webhely megkapja saját asztalait az adatbázisban egyedi előtaggal.

A regisztrált felhasználók adatai az összes hálózati oldalra közösen. Ez egy bizonyos plusz és egy nap regisztrálása több webhelyhez férhet hozzá. Ráadásul minden egyes webhelyen ugyanaz a számla különböző jogokkal rendelkezhet. Például egy webhelyen a felhasználó lehet a szerkesztő, és egy másik rendszergazda.

A szokásos telepítésben WordPress oldal Regisztráció, engedélyezés és jelszó visszaállítása Megjeleníti a WP-login.php fájlt.

  • wp-login.php - Engedélyezés
  • wp-login.php? Akció \u003d Regisztráció - Regisztráció
  • wp-login.php? Akció \u003d LostPassword - jelszó visszaállítása

A Multisite módban a WordPress kernel kezd viselkedni, némileg eltérő, és amikor átváltanak az WP-login.php link? Action \u003d Regisztráció kap átirányítást WP-Signup.php. Ez a hálózat regisztrációs oldala, amely alapértelmezett a WordPress-ben.

A rendes felhasználói fiókok regisztrálásán kívül új webhelyet hozhat létre, ha a SuperMinistrator lehetővé tette a hálózati beállítások (hálózati beállítások) lehetőséget.

A legtöbb témában a regisztrációs oldal nem tűnik nagyon jól. Számos témát használ a CSS-keretrendszerek, mint például a bootstrap, és saját specifikus osztályai az oldalak különböző elemeinek stilizálására, ezért nehéz írni egyetlen HTML-t, amely mindenki számára alkalmas.

De nem kell kétségbeesni, ha az oldal rendetlennek tűnik. A WP-SignUp.php fájl először egy nagyszerű dolog, amikor nincs idő, hogy dolgozzon ki a webhely minden részét - másként összpontosítson fontos oldalak és tartalom.

Amikor készen állsz, hogy készítsen oldal Regisztráció, WP-Signup.php lesz egy jó mintát, és egy példát, amelyben könnyű megérteni a spektrum funkciók WordPress rendelkezik feldolgozására és ellenőrzésére adatokat a felhasználók által beírt, és hozzon létre új fiókot.

Fő webhely hálózat

Alapértelmezés szerint a WordPress megnyitja a regisztrációs oldalt (wp-signup.php) a fő tartományban (weboldal) hálózaton. Mindazonáltal regisztrációs oldalakat hozhat létre minden hálózati webhelyen, még akkor is, ha van témájuk.

Figyelembe vesszük az esetet, ha az egyik témát minden hálózati oldalra használják, de mindegyikük regisztrációs oldal van. A helyszínek nyelven különböznek (angolul és oroszul), így a regisztrációs oldal megjelenik a "natív" nyelvi oldalon. Ha a webhelyek különböző témákat használnak, akkor minden attól függ, hogy mely témák, amelyek megfelelnek nekik ugyanazt az elrendezést (kitűnő helyzet, amely az összes témájának egyesítésére irányíthatja Önt), vagy érdemes az oldalakat egyedileg dolgozni.

Alternatíva a funkciók.php.

A fájlok sorrendje

A mu-pluginok tartalmazhatnak bármilyen számú fájlt és egy olyan struktúrát, amely logikusnak tűnik Önnek. Tartok egy ilyen hierarchiát:

| Mu-plugins | | Load.php | | Selena-hálózat | | | Regisztráció | | | | plugin.php | | | ... | | | Jetpack | | | | plugin.php.

A Load.php fájlban a fordítások és az összes szükséges "bővítmény" csatlakoztatva van:

// Transzferek Transzferek a MU-Plugins Load_Muplugin_TextDomain ("Selena_Network", "/ Selena-Network / Nyelvek /"); // Funkcionális a regisztrációs oldalra WPMU_PLUGIN_DIR-t igényel. "/sintena-network/signup/plugin.php"; // Egy másik plugin // wpmu_plugin_dir ...

A Selena-Network könyvtár belsejében a plug-in mappák tárolódnak. Mindegyiknek van saját plugin.php, amelyet a load.php-en csatlakoztatunk. Rugalmasságot és azonnali letiltást és bekapcsolást biztosít külön komponensek Vészhelyzet esetén a munka projekten.

Regisztrációs oldal

Miután megértettük, hogy hol és hogyan fogunk kódot írni, akkor a regisztrációs oldal létrehozásához megy.

Hozzon létre egy oldalt egy példányban.org/signup/ a szokásos felületen keresztül. A címként bármely URL-t használhat, amely alkalmasnak tűnik a projekthez.

Átirányítja a kívánt regisztrációs oldalt

A WordPress számára, hogy megtudja az új regisztrációs oldalunkat, és átirányítsa azt, amikor a "Regisztráció" linkre kattint, a WP_SIGNUP_LOCIATE szűrő használata. A WP-LOGINT.PHP belsejében található, és az, aki felelős az alapértelmezett wp-signup.php átirányításáért.

"Regisztráció": ha (IS_Multisite ()) (WP_REDICT (APPLE_FILTERS ("WP_SIGNUP_LOCIATE", NETWORK_SITE_URL ("WP-signup.php"))); Kilépés; // ...

Az alapértelmezés szerint a regisztrációs oldal a hálózat fő területén nyílik meg. Ezért van itt a Network_Site_URL () itt.

Adja hozzá a szűrőkezelőt a MU-Plugins / Selena-Network / Signup / Plugin.phphez, amely az aktuális oldalon található regisztrációs oldal címét kapja:

Funkció Selena_Network_signup_Page ($ URL);) Add_Filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_Network - előtag, amit használni a nevét minden funkció benne Mu-plugins oldalamon a konfliktusok elkerülésére, ki kell cserélni a saját egyedi előtagot. A 99 szűrő hozzáadásának prioritása, mivel egyes bővítmények, például a BBPRESS és a BUDDYPYPRESS, felülírhatják ezt a címet saját (MU-pluginok betöltve, mint a hagyományos pluginok, lásd fent).

Kérjük, vegye figyelembe, hogy a Home_URL () használják, amely a Network_Site_URL () ellentétben az aktuális webhely címét adja meg, és nem a fő hálózati oldalt.

Wp-signup.php funkciók

A WP-Signup.php fájl tartalmazza nagyszámú funkciók és kód. A kép egészének megtekintéséhez használhatja az összecsukható kódot. Általános szabályként angolul "kód összecsukása".

A fájl kezdetén 1-től 80-ig a vonal (a 4.1.1-es verzióban) különböző ellenőrzéseket készítenek és adják ki a "Start" oldalt a Get_Header () segítségével.

Ezután sok módszert hirdetnek, és mielőtt elkezdünk dolgozni velük, érdemes megérteni, hogy mi teszi az egyes funkciókat. Belül, közülük sokan gyakran használnak más funkciókat a WPMU_ előtaggal, mindegyikük a WP-Tartomány / MS-FUNCESS.PHP fájlban van bejelentve. Ez a rész nehéz megérteni anélkül, hogy meglátná a kódot. Az alapvető funkciók közül az alábbiakban, ha nehézségei vannak.

  • wpmu_signup_stylesheet () - További CSS kimenete a regisztrációs oldalon.
  • show_blog_form () - mezők a webhely regisztrációhoz (cím, név láthatóság a keresőmotorokhoz).
  • validate_blog_form () - A beírt webhely címe és nevei a wpmu_validate_blog_signup () használatával.
  • show_user_form () - mezők a felhasználó regisztrálásához (bejelentkezési és e-mail cím).
  • validate_user_form () - A bejelentkezés és a címek ellenőrzése. Mail wpmu_validate_user_signup ().
  • signup_another_blog () - Az új webhelyek regisztrálásának mezők a show_blog_form () használatával, akik már regisztráltak a webhelyen.
  • validate_another_blog_signup () - Ellenőrzi a webhelycímet és a nevet a Validate_blog_form () segítségével.
  • a Signup_User () a fő funkció a regisztrációs oldal kiadásához.
  • validate_user_signup () - Ellenőrzi a bejelentkezési és e-mail címet. Mail validate_user_form ().
  • signup_blog () - mezők a webhely címének, nevének és láthatóságának megadásához (második regisztrációs lépés) a show_blog_form () használatával.
  • validate_blog_signup () - Ellenőrzi a bejelentkezést, az e-mail címet. Mail, cím és webhelynév.

A WP-Signup.php fájl (a 4.1.1-es verzió 646-as varrásából), a regisztrációs oldal fő logikája, amely a fenti módszereket használja. A kód ezen részét nem nyújtják be a funkcióhoz. A végén, Get_Footer () hívják.

Másolja a funkcionális wp-signup.php fájlt

Ezután a WP-Signup.php mu-plug-ins-ben történő másolására vonatkozó eljárást le kell írni, és a villát. Úgy tűnik, nem megfelelő módon. Ehelyett, akkor írja meg a funkciókat a semmiből, hogy ellenőrizze és kimeneti űrlapok osztályok, nem a hagyományos funkciókat. Véleményem szerint a WP-Signup.php már rendelkezik minden szükséges logikával az oldalunkra, csak a kisebb változtatások végrehajtása.

A WordPress frissítése során a WP-SignUp.php időről időre változik, de ez nem jelenti azt, hogy minden egyes kiadásnak szinkronizálnia kell a "FORC" -t. A WP-Signup.php belsejében lévő funkciók alapvetően csak a HTML kimenet, az adatellenőrzés, a fiókok létrehozása és a webhelyek létrehozása az MS-Funcsék.php-ben bejelentett WPMU_ előtaggal rendelkezik.

Olyan funkciót hozunk létre, amely megjeleníti a regisztrációs űrlapot az oldalon. Ehhez másolja WP-Signup.php WordPress gyökeret Mu-plugings / Selena-Network / feliratkozást /. Csatlakoztassa a MU-Pugins / Selena-Network / Signup / Plugin.php-be.

WPMU_PLUGIN_DIR-t igényel. "/sintena-network/signup/wp-signup.php";

Törölje az összes szükséges és szükségtelen ellenőrzéseket a másolt fájl kezdetétől. A 4.1.1-es verzióban ez az egész kód 1-80 sor.

Most készen állunk arra, hogy létrehozzuk a fő funkciót a regisztrációs űrlap megjelenítéséhez. Ehhez minden logika a 646-os vonalról és a fájl végéig át fogjuk kerülni a Selena_Network_signup_main nevű függvényre. A végén törölsz két szükségtelen lezárást

(722 és 723 vonalak), valamint a hívás get_footer ().

Az újonnan létrehozott Selena_Network_signup_main () a kezdetektől fogva kijelentjük, hogy az Active_Signup globális változója, hogy minden más módszer ebből a fájlhasználatból. És adja hozzá az előzetesen_signup_form eseményhívást, amelyet a fájl kezdetétől töröltünk.

Funkció Selena_Network_signUp_main () (Global $ Active_signup; do_action ("előzmények_signup_form"); // ...)

Most már csak az elrendezés megváltoztatása minden olyan helyen, ahol szükséges, és a regisztrációs oldal készen áll.

A regisztrációs űrlap kimenete

Itt legalább két lehetőség van. Egy kényelmesebb módja annak, hogy létrehozzunk egy rövid kódot, és helyezze az oldalra a szokásos szerkesztőn keresztül.

// Hálózat_signup add_shortcode shortcode ("Network_signup", "selena_network_signup_main" létrehozása);

A második lehetőség az oldalsó-signup.php oldal létrehozása a lány témájában. A "Regisztráció" szó helyett az oldalhoz rendelt egyedi azonosítót használhatja. A sablon belsejében adja hozzá a szükséges elrendezést, és készítsen egy Selena_Network_signup_main () lehetőséget a megfelelő helyen.

Ennek eredményeként a regisztrációs oldalam sokkal jobb és tisztább volt.

Aktiválási oldal

Alapértelmezés szerint a WordPress konvencionálisan két lépésben a regisztrációs folyamatot két lépésben osztja fel - kitölti a webhelyen lévő űrlapot és a fiók aktiválódását, amikor a linket a száműzött elektronikus levél. Miután kitöltötte az előző szakaszban létrehozott űrlapot, a WordPress egy kis utasítással és hivatkozással rendelkezik a fiók aktiválására.

Az aktiválási oldal kimenetére a WP-ACTIVATE.PHP fájl a WordPress root könyvtárban található. A WP-ACTIVATE.PHP is teljesen megváltozhat. A folyamat hasonló ahhoz, amit a WP-Signup.php számára már tettünk.

Hozza létre a példa.org/activate / oldalt a normál interfészen keresztül. Címként használja az Ön számára megfelelő URL-t.

Másolja a WP-activate.php fájlt a Mu-plugins és csatlakoztassa a MU-PUGINS / Selena-Network / Regisztráció / plugin.php.

WPMU_PLUGIN_DIR-t igényel. "/sintena-network/signup/wp-activate.php";

Belül, nem olyan sok tartalom, ellentétben WP-Signup.php. A fájl egyetlen műveletet hajt végre - aktiválja a fiókot, ha a megfelelő kulcsot kapja meg, és hibaüzenetet vagy sikeres működést jelenít meg.

Törölje az összes szükségtelen ellenőrzést, és szükség van - 1-től 69-ig a WordPress 4.1.1-ig. Végül távolítsa el a Get_Footer () hívást. A fennmaradó tartalmat a Selena_Network_Activate_main () funkcióra való átadással.

Érdekes észrevenni, hogy a WP_Installing konstans itt jelentkezett a WordPress (WP-LOAD.PHP) betöltése előtt. Jelenléte okozza a Wordpress-t, hogy ne töltsön be bővítményeket.

Mint a regisztrációs oldal esetében, csak az elrendezést kell javítani, ahol szükséges. Megváltoztathatja a megjelenített üzenetek szövegét is (ebben az esetben ne felejtsük el, hogy a mu-plugins szövegdomént adjunk hozzá minden funkció-fordítóhoz, amelyet máshol nem telepítenek).

A kész funkciót egy előre meghatározott oldalon lehet használni egy rövidzáró vagy egy különálló sablon egy leányvállalatban.

Aktiválási betűk megfelelő referenciákkal

Az aktiválási oldal készen áll a munkára, de a WordPress nem tud róla, és továbbra is aktiváló betűket küld a WP-Activate.php-re. A WP-Signup.phptól eltérően nincs szűrő, amely lehetővé tenné a cím megváltoztatását. Ehelyett meg kell írnia a funkcióját, amely helyes linkekkel küld.

Az oldal kitöltése és küldése az oldalon regisztráció WordPress Hívja a wpmu_signup_ felhasználó.() vagy wpmu_signup_ blog.() A regisztráció típusától függően. Mindkét funkció új bejegyzést hoz létre a WP_SIGNUPS táblázatban, amely kitölti azt a szükséges tartalmakkal, amelyek között van egy fiók aktiválási kulcs.

Miután a funkciótól függően a wpmu_signup_ nevezik felhasználó._Notification () vagy wpmu_signup_ blog._Értesítés (). Mindkét funkció hasonló funkcionalitással rendelkezik - létrehoz egy levelet egy aktiválási referenciával, de különböző érveket készít. Mindkettőben vannak szűrők az események "lehallgatásához".

If (! Apply_filters ( "wpmu_signup_user_notification", $ user, $ user_email, $ key, $ META)) return false;

A blog létrehozása fiókok aktiválása:

Ha ("wpmu_signup_blog_notification", $ domain, $ path, $ cím, $ felhasználó, $ user_email, $ kulcs, $ usera), $ billentyű, $ Meta)) (Return False;)

Csak akkor is meg kell írnia a rakodókat, amelyeken belül leveleket küld a WP_MAIL (), és a végén, ami szükségszerűen hamis, így a WordPress nem küld egy aktiváló levelet kétszer - az egyik a tiéd, egy másik betű alapértelmezés szerint Wp-activate.php.

Funkció Selena_Network_wpmu_signup_user_notification ($ felhasználó, $ user_email, $ billentyű, $ Meta \u003d Array ()) (// Generál egy fejlécet, szöveget és betű fejléceket // ... // küldjön egy levelet, vagy adjon hozzá egy Cron-feladatot, hogy küldjön egy levelet Wp_mail ($ user_email, wp_specialchars_decode ($ Tárgy), $ üzenet, $ üzenet, $ Message_Headers); // FALSE visszanyerése, hogy a WordPress nem küld aktiválási levelet kétszerese hamis;) Add_Filter ("wpmu_signup_uver_notifikáció", "Selena_network_wpmu_signup_user_notifikáció", 10, 4) ;

Ha leveleket küld az SMTP-kiszolgálón keresztül, vagy a regisztrációszám nagyon nagy, akkor azt kell gondolnia, hogy azonnal nem küldi a leveleket. Ehelyett hozzáadhat Cron-feladatokat WordPress Cron használatával.

A WP-Signup.php és a WP-Activate.php közelében található

Miután létrehozta saját regisztrációs és aktiváló oldalait, szükség lehet az "Eredeti adatok" lezárására. Például, ha további mezők vannak a regisztrációs oldalon, amelyet be kell tölteni. Továbbá sok WordPress webhelyet a spam regisztrációknak kell kitéve.

Két probléma megoldása egy műveletsel megkérdezhető az Apache-nak, hogy 404-et adjon meg, ha megpróbálja megnyitni ezeket az oldalakat. Ehhez csak regisztrálnia kell egy pár további újratervezést, amely a konfigurációs fájljához vagy.htaccess fájlhoz kell regisztrálnia.

RewritEngine on Rewritebase / # A rendszeres kifejezések ismerete soha nem lesz felesleges :) Rewriterule ^ wp-signup \\ .php - Rewriteule ^ WP-aktiválás \\ .php - # Begin Wordpress # Szabályok a WordPress alapértelmezés szerint NE érintse meg :) . # Vége WordPress.

Következtetés

Ehhez és sok más "probléma" társított WordPress az interneten sok megoldás létezik. Például, hogy hozzon létre regisztráció és aktiválás oldalain néhány kínálnak átírni az eredeti WP-SignUp.php és WP-activate.php. Ezt nem úgy kell elvégezni, mert abban az esetben a WordPress frissítés, akkor elveszíti minden változás történt a fájlok, és nem tudja, ellenőrizze a integritását a kernel segítségével.

Ha bármilyen addíciót fejleszt, a témákat vagy megoldásokat egy kis időt kell fordítani, hogy megbirkózzon a WordPress belsejében. Számos hasznos hibakeresítő eszköz van erre.

P.S.

A különböző szerepek automatikus hozzárendelése érdekében az új felhasználók a multisite felhasználói menedzsment bővítményt használhatják.

Ha bármilyen kérdése vagy nehézsége van a regisztrációs és aktiválási oldalak létrehozása során a cikk elolvasása után, hagyjon megjegyzést, és válaszolunk.

27.03.2015 27.03.2015

WordPress fejlesztő. Mindent szeret, és új eszközökkel foglalkozik. A Symfony Components architektúrája ihlette.

  • Hozzon létre saját regisztrációs oldalt a szabványos WP-Signup.php helyett a multisite helyett.

    Rendes telepítés WordPress A regisztrációs oldal (engedélyezés, jelszó-visszaállítás) Megjeleníti a WP-login.php fájlt.

    • /wp-login.php - Engedélyezés
    • /wp-login.php?action\u003dregister - regisztráció
    • /wp-login.php?action\u003dlostpassword - jelszó visszaállítása

    A WP-login.php multisite esetében külön feltételek vannak. Tehát, ha rákattint a linkre /wp-login.php?action\u003drististerre a multisaitra, a WordPress átirányítja a /wp-signup.php oldalt. Számos témában az oldal nem néz ki nagyon vonzónak, így a sajátunkat meg fogjuk csinálni.

    Fő webhely hálózat

    Alapértelmezés szerint a WordPress megnyitja a regisztrációs oldalt (wp-signup.php) a fő tartományban (weboldal) hálózaton. Mindazonáltal külön regisztrációs oldalt készíthet minden hálózati oldalra, még akkor is, ha különböző témái vannak. Figyelembe vesszük az esetet, amikor minden hálózati webhelyen saját regisztrációs oldal van, de ugyanazt a témát használják, és a webhelyek csak a nyelven különböznek. Ha különböző témákat használnak, akkor több kódot kell írnia.

    funkciók.php?

    Nem. A fájl neve úgy tűnik, hogy a WordPress bármely cikkében szerepel. A mi esetünkben figyelembe véve azt a tényt, hogy a regisztrációs funkcionalitást több helyszínre tervezték, érdemes megragadni a helyszínen betöltő mu-pluginokba.

    Lírai digression

    Érdemes megjegyezni, hogy a mu-pluginok korábban vannak betöltve, mint a szokásos plug-inek, és amíg a WordPress rendszermag teljesen letöltött, így a funkciók hívása fatabál hibáihoz vezethet a PHP-ben. Hasonló "korai" letöltés előnye van. Mondjuk be, hogy bármilyen téma nem lehet ragaszkodni néhány olyan művelethez, amelyet a funkciók.php fájl letöltése a témáról. Ennek egyik példája Jetpack_Module_loaded_related-Posts pluginként szolgálhat (kapcsolódó hozzászólások - a modul neve), amellyel lehet követni a modulok aktivitását a Jetpackban. Lehetetlen "tengelykapcsoló" a témakörről erre a műveletre, mert a művelet már dolgozott a téma betöltése előtt - a bővítmények korábban betöltődnek. Megnézheti a WordPress Boot Order közös képét a Code Action Reference oldalon.

    A fájlok sorrendje

    A MU-Plugins tartalmazhat bármilyen számú fájlt és bármilyen diagramot, amely logikusnak tűnik Önnek. Tartok egy ilyen hierarchiát:

    | -Mu-plugins | - | load.php | - | - | Selena-Network | - | - | - | - - - - - | - | - | - | - |-pugin.php | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | -... | - | - | - | - | -Jetpack | - | - | - | - | - -plugin.php

    A Load.php fájlban az összes szükséges "bővítmény" csatlakozik a hálózatunkhoz:

    Terhelés trasalates minden addons load_muplugin_textdomain ("Selena_network", "/ Selena-Network / Nyelvek /"); // A hálózati regisztráció WPMU_PLUGIN_DIR-t igényel. "/sintena-network/signup/plugin.php"; // másik plugins // wpmu_plugin_dir ...

    A Selena-Network mappa belsejében a plug-in mappák tárolódnak, mindegyiknek van saját plugin.php, amelyet a LOAD.PHP-en csatlakoztatunk. Ez rugalmasságot biztosít, és képes gyorsan letiltani és néhány dolgot tartalmazni.

    A regisztrációs oldal címe

    A regisztrációs oldal címének megadásához használja a wp_signup_location szűrőt. A WP-login.php fájlon belül megtalálható, és aki felelős a WP-Signup.php átirányításáért.

    "Regisztráció": ha (IS_Multisite ()) (wp_redirect (Apply_filsers ("wp_signup_location", network_site_url ("wp-signup.php")); kilépés;

    Adja hozzá funkcióját a MU-Plugins / Selena-Network / Signup / Plugin.php-ben, amely megadja a regisztrációs oldal címét az aktuális webhelyen:

    Funkció Selena_Network_signUp_Page ($ URL) (RETURN HOME_URL (). "/ Regisztráció /";) Add_Filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_Network - előtag, amelyet a mu-pluginok belsejében lévő összes funkció nevében használok a konfliktusok elkerülése érdekében, ki kell cserélni saját egyedi előtaggal. A 99 szűrő hozzáadásának prioritása, mivel egyes bővítmények, például a BBPRESS és a BUDDYPYPRESS, felülírhatják ezt a címet saját (MU-pluginok betöltve, mint a hagyományos pluginok, lásd fent). Felhívjuk figyelmét, hogy home_url () használják, ahelyett Network_site_URL (), hogy hagyja el a látogató az ugyanazon a területen. Használhat bármilyen URL-címet címként.

    Oldal létrehozása

    Most hozzunk létre egy oldalt a Site.com/signup/ rendszeres felületen keresztül, és a lánya-alany mappa sablonja az új oldal - oldal-signup.php. A "Regisztráció" szó helyett egyedi azonosítót használhat.

    Az új sablon belsejében meg kell hívnia a Selena_Network_signup_main () funkciót, amely megjeleníti a regisztrációs űrlapot.

    Érdemes megjegyezni, hogy az egész folyamat sablonokkal nem szükséges, és helyette létrehozhatja saját rövid kódját, amely a Selena_Network_signup_main () funkciót is hívja.

    wp-signup.php és wp-activate.php

    Most létrehozunk egy olyan funkciót, amely megjeleníti a regisztrációs űrlapot. Ehhez másolja a wp-signup.php és a wp-activate.php fájlt a gyökér wordpress-ről a mu-dugarak / Selena-Network / Regisztráció / (és ne felejtse el csatlakoztatni őket a mu-plugins / Selena-Network / Signup / plugin.php). A fájlokkal való további manipuláció rendkívül nehéz és hosszú, hogy leírja, így jöjjön el magad. Csak azt írom le, hogy pontosan mit kell tenni, és közzéteszi a projekt forrásfájljait:

    1. A fájl elején törölje az összes szükséges, hívó funkciókat és más kódot külső funkciókat.
    2. Átnevezzük az összes funkciót az egyedi előtagok hozzáadásával a nevekhez.
    3. A WP-SignUp.php kód alsó része a Selena_Network_signup_main funkcióba kerül, és az elején a Global $ Active_signup írása; .
    4. Cserélje ki az elrendezést a megfelelő helyeken.

    A WP-ACTIVATE.PHP-ben meg kell tennie ugyanezt:

    1. Törölje az összes kód külső funkcióját, az elrendezést egy különálló funkcióba csomagolja.
    2. Módosítsa az elrendezést olyan helyeken, ahol szükséges.

    A WP-ACTIVATE.PHP fájl felelős a fiók aktiválási oldaláért. A regisztrációs oldalhoz hasonlóan létre kell hoznia egy külön sablont, amelyen belül egy funkciót hívhat a WP-ACTIVATE.PHP fájlból.

    Az aktiváló betűket elküldjük

    A regisztrációs oldal egy levelet küld a látogatónak a fiók aktiválásával kapcsolatban. Alapértelmezés szerint ez a wpmu_signup_user_notification () funkció az MS-FUNCTIOW.PHP fájlból. Funkciója kölcsönözhető a funkcióhoz. Az ok, amiért meg akarja tagadni ezt a funkciót - fiók aktiválási referenciát küld a WP-ACTIVATE.PHP-vel. Ezt a funkciót a WPMU_SignUp_user_notification szűrő segítségével letilthatja a FALSE-ot (ha ez nem tegye meg, az aktiváló betű kétszer kerül elküldésre, az oké, valójában két különböző betű).

    Funkció ArmyOfselenaGomez_wpmu_signup_user_notification ($ felhasználó, $ user_mail, $ billentyű, $ meta \u003d tömb ()) (// ... // kód a wpmu_signup_user_notification () funkcióból WP_Mail ($ user_email, wp_specialchars_decode ($ Tárgy), $ üzenet, $ Message_Hearers ); return false;) Add_Filter ( "wpmu_signup_user_notification", "armyofselegenagomez_wpmu_signup_user_notification", 10, 4);

    Ennek eredményeképpen a Selena témájában szereplő regisztrációs oldal sok tisztább és óvatos volt.

    Következtetés

    Az interneten sok más, nem nagyon helyes módja annak, hogy ugyanazt a dolgot - az Apache átirányítások, az Ajax-formák, amelyek nem fognak Java szkript nélkül működni, stb. Nem igazán tetszett nagyon, ezért megpróbáltam leginkább megcsinálni Saját honlapom.

    Megjegyzem, hogy a szerkesztési fájloknak óvatosan kell tudniuk, és próbáld meg, hogy ne mozduljanak el a forrástól a Rankneshig, ha a WordPress módosítja a WP-Signup.php és WP-Activate.php fájlokat, könnyebben összehasonlították őket a változások megtalálásához .

    Ne felejtsd el megnézni a fent leírt funkciók forráskódját annak érdekében, hogy teljes mértékben foglalkozzanak azzal, amit a kód belsejében találnak.

    Bónusz. A spammerek elleni védelem

    Még a WordPress legfiatalabb helyszínei gyakran spam regisztrációnak vannak kitéve. Végtelen feltételeket írhatsz a botok szűrésére, gyakran hasonlít a mesterséges intelligencia létrehozására irányuló kísérlethez 🙂 Multisite esetében, az Apache rendszeres átirányítása segített nekem, amelynek megnyitása /wp-signup.php és / wp- acitvate.php, kértem, hogy 404-et adjak ki (nem vagyok szakértő Állítsa be az Apache-tTehát a szabályom nem lehet nagyon helyes).

    RewritEngine on Rewritebase / Rewriterule ^ WP-Signup \\ .php - RewriteLE ^ WP-Activate \\ .php - # Begin WordPress # Szabályok a WordPress alapértelmezés szerint nem érinti :) # ... # Vége WordPress

    P. S. Megpróbálok egy harmadik féltől származó dolgokat leírni, amennyire csak lehetséges, mert amikor elkezdtem, néha valahogy megmondani és megmagyarázni sok dolgot. Azt is hiszem, hogy hasonló kis tippeket más anyagokon valaki meg fogja nyomni valami új tanulmányozását és bővítve a tudás területét. Rendszeres kifejezéseket használnak a rereriterulák rekordjaiban, ezek nem teljesen összetettek, például a szimbólum ^ a vonal kezdetét jelenti.

    Segal megvizsgáljuk a kritikus 1day sérülékenység kizsákmányolását a népszerű CMS Joomla-ban, amely október végén az interneten zuhant. A számokkal rendelkező sebezhetőségekről lesz CVE-2016-8869, CVE-2016-8870 és CVE-2016-9081. Mindhárom egy kódból fordul elő, amely egyszer volt a keret mélységében, várva a saját óráikat, hogy megszabaduljanak, és vigyázzanak vele a káosz, hackelt helyszíneket és könnyeket a Joomla bármely ártatlan felhasználójában. Csak a legbátrabb és merész fejlesztők, akiknek szeme vörös a fény a monitorok és a billentyűs tele vannak zsemlemorzsa, képesek voltak megtámadni a duzzadt elöntés és elő fejét oltárán javításokat.

    Figyelem

    Minden információ kizárólag tájékoztató jellegű. Sem a szerkesztők, sem a szerző nem felelős az e cikk szerinti anyagok által okozott esetleges kárért.

    Miért kezdődött el

    2016. október 6-án Damis Palma (Demis Palma) létrehozott egy témát a veremcsere, amely megkérdezte: miért, valójában a Joomla 3.6-os verziójában két módszer van a felhasználók regisztrálására ()? Az első a FelhasználókTrolerRegisztrációvezérlőn található, a második pedig a felhasználókTrolleruserben található. A Damis meg akarta tudni, hogy a felhasználókTrolleruser :: regiszter () módszert valahol használják, vagy csak egy evolúciós anakronizmus, amely a régi logikából marad. Megzavarta azt a tényt, hogy még akkor is, ha ezt a módszert nem használják bármely prezentációban, akkor egy kialakított kéréssel hívható. Mi volt a válasz a fejlesztőnek az Itoctopus beceneve alatt, megerősítve: A probléma valóban létezik. És jelentést küldött a Joomla fejlesztőknek.

    Ezután az események a leggyorsabb utat fejlesztették ki. Október 18-án, a Joomla fejlesztők fogadja Damis jelentést, amely abban az időben lecsapott POC, amely lehetővé teszi, hogy regisztrálja a felhasználó. Megjelent egy jegyzetet a webhelyén, ahol általánosságban elmondták a problémát és a gondolatokat. Ugyanazon a napon jön ki Új verzió Joomla 3.6.3, amely még mindig sebezhető kódot tartalmaz.

    Ezt követően David Tampellini (Davide Tampellini) pörög a hibát a regisztrációs állapotba, nem egyszerű felhasználó, de rendszergazda. És október 21-én a Joomla Security Team új esetet ér el. Már beszél a jogosultságok emeléséről. Ugyanezen a napon a bejelentés megjelenik a Joomla honlapján, hogy október 25-én, kedden, egy másik, a 3.6.3 szekvenciaszámmal rendelkező változat felszabadul, amely korrigálja a rendszermag kritikus sebezhetőségét.

    Október 25-én a Joomla Security Strike csapat megtalálja az utolsó problémát, hogy a Damis által felfedezett kód. Ezután a hivatalos Joomla Repository fő ágánál, október 21-én elkövetett kötelezettségvállalás, egy láthatatlan névvel, amely előkészíti a 3.6.4 stabil felszabadulást, amely javítja a rosszindulatú hibát.

    Ezt követően számos érdekelt személyek csatlakoznak az átviteli fejlesztők továbbítására fejlesztők - kezdenek elősegítése sérülékenység és főzzük szilárd.

    Október 27-én Harry Roberts kutatója készen áll az Xiphos Research Repository kész kihasználására, amely egy PHP fájlt feltölthet egy kiszolgáltatott CMS-vel.

    Részletek

    Nos, az előtörténettel befejeződött, menjen a legérdekesebb dologhoz - a sebezhetőség megkülönböztetése. Vizsgálati verzióként telepítettem a Joomla 3.6.3-ot, így minden sorszám releváns lesz erre a verzióra. És az összes olyan útvonal, amelyet a következő fájlokat látni fog, a telepített CMS gyökeréhez képest jelenik meg.

    Hála a lelet Damis Palm, tudjuk, hogy van két módszer, hogy hajtsa végre a felhasználói regisztráció a rendszerben. Az első által használt CMS és a /Components/com_users/controllers/comers/controllers/registration.php:108. A második (az egyik, hogy mi, és meg kell hívás), él / components / com_users / vezérlők / user.php: 293. Nézzük meg közelebb.

    286: / ** 287: * A felhasználó regisztrálása. 288: * 289: * @return Boolean 290: * 291: * @since 1.6 292: * / 293: Nyilvános funkciós regiszter () 294: (295: Jsession :: checkrtoken ("posta") vagy Jexit (jtext :: _ ("Jinvalid_token")); ... 300: // kapja meg az űrlapadatokat. 301: $ adatok \u003d $ this-\u003e input-\u003e post-\u003e get ("felhasználó", tömb (), "tömb"); .. 315 $ Return \u003d $ Model-\u003e érvényesítése ($ form, $ data); 316: 317: // Ellenőrizze a hibákat. 318: if ($ vissza \u003d\u003d\u003d false) 319 (... 345 / Végezze el a regisztrációt. 346: $ Return \u003d $ Model-\u003e Regisztráció ($ adatok);

    Itt csak érdekes vonalakat hagytam. A sérülékeny módszer teljes verziója megtekinthető a Joomla tárolóban.

    Meg fogjuk mutatni, hogy mi történik, ha rendszeres felhasználói regisztráció: milyen adatokat küldünk és hogyan feldolgozzák őket. Ha a felhasználói regisztráció engedélyezve van a beállításokban, az űrlap a http: //joomla.local/index.php/component/users/ webhelyen található. Nézet \u003d Regisztráció.


    A felhasználói regisztráció jogos kérelme a következő képernyőképnek tűnik.


    A COM_USERS alkatrészek felelősek a felhasználók munkájáért. Figyeljen a lekérdezés feladatparaméterére. $ Vezérlővel rendelkezik. $ Módszer. Nézzük meg a fájlstruktúrát.

    Script nevek a mappában vezérlők. Megfelel az úgynevezett vezérlők nevének. Mivel a kérésünk most $ Controller \u003d "Regisztráció", a fájl hívja. regisztráció.php. és regiszter () módszerét.

    Figyelem, kérdés: Hogyan kell továbbítani a regisztrációs feldolgozás egy sérülékeny területen a kódban? Valószínűleg már kitaláltál. A sérülékeny és jelenlegi módszerek neve egybeesik (regisztrálása), így csak megváltoztathatjuk a nevezett vezérlő nevét. És hol van a sérülékeny vezérlő? Jobbra a fájlban user.php.. Kiderül $ Controller \u003d "Felhasználó". Összegyűjtjük az összeset, és kapunk feladat \u003d user.register. Most a regisztrációs kérelmet a szükséges módszerrel dolgozzák fel.


    A második dolog, amit meg kell tennünk, hogy adatot küldjön a megfelelő formátumban. Minden itt egyszerű. A törvényes nyilvántartás () egy olyan tömböt vár, amelyet JF formátumnak nevezünk, amelyben adatokat továbbítunk regisztrálásra - név, bejelentkezés, jelszó, mail (lásd a képernyőképet lekérdezéssel).

    • /components/com_users/controllers/Registration.php: 124: // Get the felhasználói adatok. 125: $ RequestData \u003d $ This-\u003e Input-\u003e Post-\u003e get ("jform", tömb (), "tömb");

    A Ward kapja ezt az adatokat a felhasználó által megadott tömbből.

    • /components/com_users/controllers/user.php: 301: // kapja az űrlapadatokat. 302: $ adatok \u003d $ this-\u003e input-\u003e post-\u003e get ("felhasználó", tömb (), "tömb");

    Ezért megváltoztatjuk az összes paraméter nevét JFROM-val a felhasználónál.

    A harmadik lépésünk, hogy megtaláljuk a CSRF érvényes token, mivel nincs regisztráció nélkül.

    • /Components/com_users/controllers/user.php: 296: Jsession :: checkrtoken ("posta) vagy jexit (jinvalid_token));

    Úgy néz ki, mint egy hash MD5, és azt, például az engedélyezési űrlaptól a webhelyen /index.php/component/users/?view\u003dlogin oldalon.


    Most létrehozhat felhasználókat a kívánt módszeren keresztül. Ha minden történt, gratulálok - csak megértette a sebezhetőséget CVE-2016-8870 "Az új felhasználók regisztrációjának hiányzó ellenőrzése."

    Így néz ki, mint a "Munka" Regisztrációs módszer () a FelhasználókTrollerRegisztráció vezérlőjétől:

    • /components/com_users/controllers/Registration.php: 113: // Ha a regisztráció le van tiltva - A bejelentkezési oldal átirányítása. 114: Ha (JComponenthelper :: getParams ( "Com_users") -\u003e get ( "AllowUserRegistration") \u003d\u003d 0) 115: (116: $ this-\u003e setredirect (Jroute :: _ ( "index.php? Option \u003d COM_USERS & Nézet \u003d Bejelentkezés ", FALSE)); 117: 118: Visszatérés hamis; 119 :)

    És így sebezhető:

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

    Igen, semmilyen módon.

    Ahhoz, hogy megértsük a második, sokkal komolyabb problémát, elküldjük az általunk létrehozott kérést, és kövessük, hogyan történik a kód különböző részeiben. Itt van egy olyan darab, amely felelős a felhasználó által a munkamódszerben küldött adatok ellenőrzéséért:

    A folytatás csak a résztvevők számára elérhető

    1. lehetőség: Csatlakozzon az oldal közösséghez, hogy olvassa el az összes anyagot az oldalon

    A közösségben a közösségben a megadott időszak alatt megnyitja Önt a hacker összes anyagához való hozzáféréshez, növeli személyes felhalmozódó kedvezményét, és felhalmozódik egy professzionális Xakep pontszámot!

    A témák általában nem funkcionálisak, de néha mi, a fejlesztők, meg kell vizsgálnunk néhány lehetőséget a témánkban, hogy egy kicsit jobb és kényelmesebb legyen.

    Ebben az útmutatóban fogjuk vizsgálni az „területén plugins”, valamint megtanulják, hogyan kell használni egy fantasztikus eszköz írta Thomas Griffin: TGM Plugin aktiválás könyvtárban.

    A téma funkcionalitása: Invázió a pluginok területére

    A témák célja, hogy megváltoztassák a WordPress webhely tervezését. Ideális esetben a téma csak a vizuális szempontot érinti. Azonban a "Golden Age" WordPress, a plug-in fejlesztők gyakran olyan funkcionális funkciókat tartalmaznak témáiban, amelyek lehetővé teszik a versenyképesség fenntartását a piacon.

    Ez a pluginok területének inváziója. A kód egyes funkcionális részeként bemutathatjuk a "pluginok területét". Bármely kódrészlet, amely a webhely funkcionalitását megváltoztatja, pluginként kell ábrázolni, ha a megadott kódot nem helyezi el a WordPress rendszermagban.

    Már korábban már megfogalmaztam az egyik cikkemben egy empirikus szabályt "Területi bővítmények:

    Ha a sajátosság a webhely vizuális ábrázolásához kapcsolódik, akkor ebben az esetben fel kell venni a témát; Ha a funkcionalitáshoz kapcsolódik, akkor külön plug-in -ként kell ábrázolni.

    Elég egyszerű szabály. Az emberek még mindig megpróbálják regisztrálni a kódfunkcionális töredékek szintjén a témákban, de a témák (például wordpress.org vagy themeforest) katalógusai nem vesznek figyelembe a pluginok területét. Így a témákban szereplő funkcionalitás javaslata bizonyos problémává vált.

    Szerencsére van egy egyszerű megoldás, amely nem megy a "pluginok területének" szabálya ellen.

    Bevezetés a TGM plugin aktiválási könyvtárba

    A TGM plugin aktiválásának beállítása

    Figyeljen a TGMPA () függvényre két paraméterrel a kód végén. A második paraméter a $ config változó, amely szintén egy tömb, például $ plugins. A nevétől a következőképpen konfigurálhatja a TGM plugin aktiválási könyvtárat ennek a hegységből. A változó elfogadja saját lehetőségét:

    • az ID (string) egy egyedi azonosító a TGM plugin aktiválási könyvtárához a témában. Ez nagyon fontos: ha más bővítmények is használják a TGM plugin aktiválást, a különböző azonosítók megakadályozzák a lehetséges konfliktusokat.
    • default_Path (String) - alapértelmezett abszolút útvonal plug-inek a témában. A telepítésekor a ZIP fájl nevét használhatja a dugaszolás forrásparaméterértékévé.
    • menü (STRING) - MENU menü a plug-inek telepítéséhez.
    • hAS_NOTICES (logikai érték) - ha meghatározott Igaz, közigazgatási értesítést fognak kiadni a szükséges / ajánlott plug-inek.
    • elmondható (Boolean) - Ha igaz, a felhasználó "zárhat" értesítéseket.
    • elutasítás_msg (string) - Ha az elutasítható opció hamis, ez az üzenet az adminisztrátori értesítés felett lesz látható.
    • iS_Automatic (Boolean) - Ha valódi, a bővítmények aktiválódnak, miután a felhasználó vállalja, hogy telepíti őket.
    • Üzenet (string) - további HTML, a plug-in táblázat előtt.
    • strings (tömb) - egy tömb, amely tartalmazza az üzeneteket. Beállíthatja őket sugárzott vonalakként. Nézd meg az example.php fájlt az összes üzenet teljes listájának megtekintéséhez.
    "MyTheme-TGMPA", // Egyedi TGMPA ID "Default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /", // Alapértelmezett Absolute Path "Menü" \u003d\u003e "Mytheme-Instruction-Blugins", // MENU SLUG "HAS_NOTICES" \u003d\u003e TRUE, // Az adminisztrációs értesítések megjelenítése "Elutasítható" \u003d\u003e FALSE , // A közlemények nem elbocsátják a "elutasítás_msg" \u003d\u003e "Igazán, tényleg szükségem van arra, hogy telepítse ezeket a bővítményeket, oké?", // Ez az üzenet a NAG "IS_AUTOMATIC" \u003d\u003e TRUE, // Bluginok aktiválása a telepítés után "Üzenet" \u003d\u003e "", // üzenet a kimenethez közvetlenül a plugins táblázat" Strings "\u003d\u003e tömb (); // A TGM plugin aktiválási célú üzenetsorok tömbje);?\u003e

    Következtetés

    Amint láthatja, javasolja a funkcionalitást témák WordPress. Talán - először is meg kell gondolkodnod mindannyian olyan felhasználókról, akik az egyik témáról a másikra válthatnak. A TGM plugin aktiválási könyvtár valóban intelligens módja ennek.

    Mit gondolsz erről az eszközről? Voltál már valaha is, azt tervezed, hogy a jövőben használja? Oszd meg a gondolataidat!