AD Aktivirajte PHP. Kako kreirati vlastitu stranicu za registraciju u Wordpress Multisite

Omogućuje vam da koristite jednu WordPress postavku za više web lokacija istovremeno. Istovremeno, svaka stranica prima svoje tablice u bazi podataka s jedinstvenim prefiksom.

Stolovi s podacima registriranih korisnika uobičajenih za sve mrežne stranice. Ovo je izvjesni plus i registrovan jedan dan možete pristupiti više web lokacija. Štaviše, na svakoj lokaciji isti račun može imati različita prava. Na primjer, na jednom mjestu, korisnik može biti urednik, a na drugom administratoru.

U uobičajenoj instalaciji WordPress stranica Registracija, autorizacija i resetiranje lozinke prikazuje datoteku WP-Login.php.

  • wp-login.php - autorizacija
  • wp-login.php? Action \u003d Registracija - Registracija
  • wp-login.php? Action \u003d lostpassword - resetiranje lozinke

U višestrukoj režimu, Wordpress Kernel počinje da se ponaša nešto drugačije i prilikom prelaska na WP-Login.php link? Action \u003d Registrirat će preusmjeravanje na WP-Signtup.php. Ovo je stranica za registraciju vaše mreže, što je zadano u WordPress-u.

Pored registracije običnih korisničkih računa, na njemu možete stvoriti novu web mjesto ako je Superministrator omogućio takvu priliku u mrežnim postavkama (mrežne postavke).

U većini tema, stranica za registraciju ne izgleda baš dobro. Mnoge teme koriste CSS okviri, poput bootstrap-a i vlastitim specifičnim klasama za stiliziranje različitih elemenata na stranicama, tako da je teško napisati jedan HTML koji će biti pogodan za sve.

Ali ne biste trebali očajati ako stranica izgleda neuredno. WP-eggit.php datoteka je u početku sjajna stvar, kada nema vremena za vježbanje svakog dijela stranice - možete se fokusirati na drugo više važne stranice i sadržaj.

Kad budete spremni napraviti svoje stranica Registracija, wp-eggit.php će biti dobar uzorak i primjer u kojem je lako razumjeti spektar funkcija koje WordPress pruža za obradu i provjeru podataka koje su unijeli korisnici i stvaraju nove račune.

Mreža glavne web stranice

Prema zadanim postavkama, WordPress otvara stranicu za registraciju (WP-segnop.php) na mreži glavnu domenu (web stranica). Ipak, možete kreirati registracijske stranice za svaku mrežnu stranicu, čak i ako imaju teme.

Razmotrit ćemo slučaj kada se na svim mrežama koristi na svim mrežama, ali postoji stranica za registraciju na svakom od njih. Web stranice se razlikuju na jeziku (engleski i ruski), pa će se stranica za registraciju biti prikazana na "izvornom" jezičkom mjestu. Ako web lokacije koriste različite teme, sve će ovisiti o tome koje će im teme koje će im odgovarati istim rasporedom (odlična situacija koja vas može gurnuti da objedinimo sve njegove teme) ili je vrijedno raditi na stranicama pojedinačno.

Alternativa funkcijama.php.

Naručite u datotekama

Mu-dodaci mogu sadržavati bilo koji broj datoteka i strukturu koja će vam izgledati logična. Pridržavam se o takvoj hijerarhiji:

| Mu-dodaci | | Load.php | | Selena-mreža | | | Registracija | | | | plugin.php | | | ... | | | Jetpack | | | | plugin.php.

U datoteci, prijevodama, prevode, prevode i svi potrebni "dodaci" su povezani:

// učitavanje transfera za MU-Plugins load_muplugin_textdomain ("selena_network", "/ selena-mreža / jezici /"); // Funkcionalna za registracijsku stranicu zahtijevaju wpmu_plugin_dir. "/selena-network/signp/plugin.php"; // drugi dodatak // zahtijeva WPMU_Plugin_dir ...

Unutar direktorija selena-Mrežna mreža se pohranjuju priključne mape. Svaka ima svoj plugin.php, koji se povezujemo na opterećenje.php. Daje fleksibilnost i sposobnost da se odmah onemogući i uključi odvojene komponente Na radnom projektu u slučaju nužde.

Stranica za registraciju

Razumijevši se s gde i načinom napisat ćemo kod, možete ići na stvaranje stranice za registraciju.

Kreirajte stranicu sa primjerkom.org/signp/ kroz uobičajeno sučelje. Kao adresa možete koristiti bilo koji URL koji će se činiti prikladnim za vaš projekt.

Preusmjerite na željenu stranicu za registraciju

Za WordPress da biste saznali za našu novu stranicu za registraciju i napravili preusmjeravanje na njemu, kada kliknete na "Register" vezu, koristi WP_SiGNUP_Location filter. Može se naći unutar WP-Login.php i on je on odgovoran za preusmjeravanje na zadani wp-eggit.php.

Slučaj "Registracija": IF (IS_MULTISITE ()) (WP_Redirect (nju_filters ("wp_signUp_location", mrežnog_site_url ("wp-eggit.php")); izlaz; // ...

Kako se sjećate, prema zadanim postavkama, stranica za registraciju otvara se na glavnom domenu mreže. Zbog toga se ovdje koristi mrežnim_ite_url ().

Dodajte svoj rukovatelj filtera na Mu-Plugins / Selena-Network / Registracija / Plugin.php, koji će vam dati adresu stranice za registraciju na trenutnom mjestu:

Funkcija selena_network_signUp_page ($ URL);) add_filter ("wp_signUp_location", "selena_network_signp_page", 99);

selena_network - prefiks, koji koristim na imenima svih funkcija unutar Mu-dodataka na mojoj web lokaciji kako bi se izbjegli sukob, treba zamijeniti vlastitim jedinstvenim prefiksom. Prioritet dodavanja filtra 99, jer neki dodaci, poput BBpressa i Buddypress-a, mogu prepisati ovu adresu sami (Mu-dodaci su učitani ranije od uobičajenih dodataka, pogledajte gore).

Imajte na umu da se koristi home_url (), koji, za razliku od mreže_site_url (), daje adresu trenutne web lokacije, a ne glavne mrežne stranice.

Wp-eggit.php funkcionalnost

Datoteka WP-eggit.php sadrži veliki broj Funkcije i kod. Da biste videli sliku u cjelini, možete koristiti sklopljeni kod. U pravilu, na engleskom jeziku se naziva "sklopiva".

Na samom početku datoteke od 1 do 80, linija (u verziji 4.1.1), razne provjere izrađuju se i izlažu "Start" stranice pomoću Get_herder ().

Zatim se deklariraju mnoge metode i prije nego što počnemo s njima raditi s njima, vrijedno je razumjeti ono što čini svaku funkciju. Unutra su mnoge od njih često koriste ostale funkcije s prefiksom WPMU_, svi su proglašeni u WP-Functions.php datoteci. Ovaj je odjeljak teško razumjeti bez viđenja koda sami. Ispod malog opisa osnovnih funkcija u slučaju da imate poteškoće.

  • wpmu_signUp_stylesheet () - izlaz dodatnih CSS na stranici za registraciju.
  • show_blog_form () - polja za registraciju web lokacije (adresa, vidljivost imena za pretraživače).
  • validate_blog_form () - Provjera unesene adrese i imena web mjesta pomoću WPMU_Validate_blog_signUp ().
  • show_user_form () - polja za registraciju korisnika (adresa za prijavu i e-poštu).
  • validate_user_form () - Provjera unesenog i adrese prijave. Pošta sa WPMU_Validate_User_SiGNUP ().
  • prijava_another_blog () - polja za registraciju novih web lokacija pomoću show_blog_form () za korisnike koji su već registrirani na web mjestu.
  • validate_another_blog_sign () - provjerava adresu web lokacije i ime pomoću validate_blog_form ().
  • registracija_user () je glavna funkcija za izlaganje polja za registraciju.
  • validate_user_signUp () - provjerava adresu za prijavu i e-poštu. Pošta sa validate_user_form ().
  • registracija_blog () - polja za unošenje adrese, ime i vidljivosti stranice (drugi korak registracije) pomoću show_blog_form ().
  • validate_blog_signUp () - provjerava prijavu, adresu e-pošte. Pošta, adresa i naziv stranice.

Na samom dnu datoteke WP-eggit.php (od 646 šivanja u verziji 4.1.1), glavna logika stranice za registraciju koja koristi gore navedene metode. Ovaj dio Kodeksa nije dostavljen na funkciju. Na kraju se naziva get_footer ().

Kopirajte funkcionalni WP-Section.php

Dalje, opisat će se postupak kopiranja WP-eggit.php u MU-Plug-ins-ins-ins i unošenje promjena viličara. Možda se čini na pravi način. Umjesto toga, vaše funkcije možete napisati iz nule za provjeru i izlazni obrasci pomoću klasa, a ne konvencionalnih funkcija. Po mom mišljenju, WP-Seconp.php već ima svu potrebnu logiku za našu stranicu, ostaje samo za izradu manjih promjena.

Kada ažurirate WordPress, WP-Regipp.php se povremeno mijenja, ali to ne znači da će sa svako izdanm morati sinkronizirati njen "forc". Funkcije unutar WP-egital.php su u osnovi angažovani samo HTML izlazom, ček za podatke, kreiranje računa i web lokacija bave se WPMU_ prefiksom, proglašenim u MS-Functions.php.

Stvorit ćemo funkciju koja će prikazati registracijski obrazac na stranici. Da biste to učinili, kopirajte wp-eggitp.php iz WordPress korijena u Mu-dodacima / selena-mrežom / prijava /. Povežite ga unutar Mu-Pugins / Selena-Network / Registracija / Plugin.php).

Zahtijevaju wpmu_plugin_dir. "/selena-network/signp/wp-signp.php";

Izbrišite sve potrebne i nepotrebne provjere od samog početka kopirane datoteke. U verziji 4.1.1, ovo je cijeli kod od 1 do 80 linija.

Sada smo spremni stvoriti glavnu funkciju za prikaz registracijskog obrasca. Da biste to učinili, sva logika iz linije 646 i do samog kraja datoteke bit ćemo premješteni na funkciju koja se zove Selena_network_signUp_main. Na samom kraju izbrišete dva nepotrebna zatvaranja

(redovi 722 i 723), kao i poziv get_footer ().

U novostvorenom selena_network_signUP_MAIN () na samom početku proglasit ćemo globalnu varijablu Active_Sign da su sve ostale metode iz ove upotrebe datoteka. I dodajte poziv prije_signf_form_ff, koji smo izbrisali od početka datoteke.

Funkcija selena_network_signUp_main () (globalna $ Active_SignUp; do_action ("pre_signp_form"); // ...)

Sada ostaje samo za promjenu izgleda na svim mjestima gdje je to neophodna, a stranica za registraciju je spremna.

Izlaz registracijskog obrasca

Ovdje postoje najmanje dvije mogućnosti. Prikladniji način za stvaranje kratkog koda i stavite ga na stranicu putem uobičajenog uređivača.

// Kreirajte Mrežni broj kôda dodatnih kôda ("Network_SiGNUP", "selena_network_signUp_main");

Druga opcija je kreiranje stranice za prijavu stranice u mapi kćeri. Umjesto riječi "Registracija" možete koristiti jedinstveni ID dodijeljen na stranici. Unutar predloška dodajte potreban izgled i napravite odabir Selena_network_signUp_main () na pravom mjestu.

Kao rezultat toga, moja je stranica za registraciju počela izgledati mnogo bolje i čistije.

Stranica za aktiviranje

Prema zadanim postavkama, WordPress konvencionalno dijeli proces registracije u multisite za dva koraka - popunjavanje obrasca na web mjestu i aktiviranju računa kada se veza šalje na prognanju elektronsko pismo. Nakon što ispunite obrazac kreiran u prethodnom odjeljku, WordPress šalje pismo s malom uputstvom i referencom za aktiviranje računa.

Za izlaz stranice za aktivaciju, odgovore se WP-ActiveT.php datoteka koja se navodi u WordPress root direktoriju. WP-Activate.php se takođe može u potpunosti promijeniti. Proces je sličan onome što smo već učinili za WP-eggit.php.

Napravite primjer.org/activate / stranicu putem normalnog sučelja. Kao adresa koristite bilo koji URL koji će vam se činiti prikladnim za vas.

Kopirajte datoteku WP-ActiveT.php na svoj Mu-dodaci i povežite ga na Mu-Pugins / Selena-Network / Registral / Plugin.php.

Zahtijevaju wpmu_plugin_dir. "/selena-network/signUp/wp-activate.php";

Unutra, ne toliko sadržaja, za razliku od wp-eggitp.php. Datoteka vrši jednu operaciju - aktivira račun ako se ispravan tipka dobije i prikazuje poruku o pogrešci ili uspješan rad.

Izbrišite sve nepotrebne provjere i zahtijevajte - od 1 do 69 linije u WordPress 4.1.1. Na samom kraju uklonite poziv get_footer (). Preostali sadržaj prenosom na funkciju Selena_network_activate_main ().

Zanimljivo je primijetiti da je WP_Instaling konstanta objavljena ovdje prije učitavanja WordPress-a (WP-opterećenje.php). Njegova prisutnost uzrokuje WordPress da ne učitaju dodatke.

Kao i u slučaju registracijske stranice, ostaje samo da popravi izgled tamo gdje je potrebno. Također možete promijeniti tekst prikazanih poruka (u ovom slučaju ne zaboravite dodati tekstualnu domenu svojih Mu-dodataka na sve funkcije prevoditelje, nije instaliran nigdje drugdje).

Gotova funkcija može se koristiti na unaprijed određenoj stranici kroz kratki kôd ili zaseban predložak u podružnici.

Aktivacijska slova sa odgovarajućim referencama

Stranica za aktiviranje je spremna za rad, ali WordPress ne zna za to i još uvijek će poslati slova aktivacije s obzirom na WP-Activate.php. Za razliku od wp-seignop.php Nema filtra koji bi omogućio promjenu adrese. Umjesto toga, morate napisati svoju značajku koja će poslati slova s \u200b\u200bispravnim vezama.

U vrijeme punjenja i slanja obrasca na stranici registracija WordPress Pozivi wpmu_signp_ korisnik.() ili wpmu_signp_ blog.() Ovisno o vrsti registracije. Obje funkcije stvaraju novi unos u tablici WP_SIGNUPS koji ispunjavaju ga potrebnim sadržajem, među kojima postoji ključ za aktiviranje računa.

Nakon, ovisno o funkciji, WPMU_SiGNUP_ se zove korisnik._Otifikacija () ili wpmu_signp_ blog._Otifikacija (). Obje funkcije imaju sličnu funkcionalnost - generiraju i pošalju pismu s referencom za aktiviranje, ali poduzimaju različite argumente. Na oba su filtri za "presretanje" događaja.

Ako (! Prijavi_Filters ("WPMU_SiGNUP_User_notification", $ korisnik, $ user_email, $ ključ, $ meta)) Povratak FALSE;

Da biste aktivirali račune sa stvaranjem blogova:

Ako (! Primjena_Filters ("WPMU_SiGNUP_BLOG_NOTIFIKACIJA", $ domena, $ staza, $ titles, $ korisnik, $ user_email, $ ključ, $ meta)) (Povratak False))

Ostaje samo da bi napisali vaše rukovodioce unutar kojih šaljete pisma putem WP_Maila (), a na samom kraju nužno dajte lažno tako da WordPress ne šalje aktiviranje dva puta - jedno, drugo - slovo prema zadanim postavkama WP-Activate.php.

Funkcija Selena_network_wpmu_signUp_user_notification ($ Korisnik, $ user_email, $ tipka, $ meta \u003d marta ()) (// generiranje zaglavlja, zaglavlja tekstualnih i slova // ... pošaljite slovo ili dodajte kron-zadatak za slanje slova Wp_mail ($ user_email, wp_specialchars_decode ($ predmeta), $ messux_anus_hersers); // oporaviti se lažno, tako da WordPress ne pošalje aktivano pismo dva puta vratite "," selena_network_wpmu_sign_user_notifikacija ", 10, 4) ;

Ako pošaljete pisma putem SMTP poslužitelja ili je broj registracija vrlo velik, trebali biste razmišljati o ne slanjem pisama odmah. Umjesto toga, možete dodati CRON-zadatke pomoću WordPress Cron-a.

Zatvori pristup wp-eggitp.php i wp-aktivate.php

Nakon što je stvorio vlastitu registracijsku i aktiviranje, možda će biti potrebno zatvoriti "originale". Na primjer, ako na stranici za registraciju postoje dodatna polja koja se moraju popuniti. Takođe, mnoge WordPress stranice izložene su registracijama neželjene pošte.

Riješite dva problema s jednom akcijom mogu se postaviti Apache da daju 404 u slučaju pokušaja otvaranja ovih stranica. Da biste to učinili, samo morate registrirati par dodatnih rekreulesa u vašu konfiguracijsku datoteku ili.htaccess.

RewriteEngine na rewritebase / # znanje o redovitim izrazima nikada neće biti suvišan :) Rewriteule ^ WP-eggit \\ .php - Rewriteule ^ wp-aktivirajte \\ .php - # započnite WordPress # pravila iz WordPress-a prema zadanim postavkama ne dirajte :) # .. . # Kraj Wordpress.

Zaključak

Za to i mnoge druge "probleme" povezane s WordPress-om na Internetu postoji mnogo rješenja. Na primjer, za kreiranje stranica za registraciju i aktivaciju, neki se nude da prepisuju originalni WP-Region.php i WP-Activate.php. To ne bi trebalo učiniti jer ćete u slučaju WordPress ažuriranja izgubiti sve promjene napravljene u datoteke, a ne možete, provjeriti integritet kernela koristeći.

Kada razvijate bilo koji dodatak, treba provesti teme ili rješenja za rješavanje onoga što se događa u WordPress-u. Postoji mnogo korisnih alata za uklanjanje pogrešaka za to.

P.S.

Da biste automatski dodijelili različite uloge, novi korisnici mogu koristiti višemisni dodatak za upravljanje korisnicima.

Ako imate bilo kakvih pitanja ili poteškoća tokom izrade registracijskih i aktivacijskih stranica nakon čitanja članka, ostavite komentar i mi ćemo odgovoriti.

27.03.2015 27.03.2015

WordPress Developer. Voli narudžbu u svemu i bavi se novim alatima. Inspirisan arhitekturom komponenti simfonija.

  • Kreirajte vlastitu stranicu za registraciju za Multisite umjesto Standard WP-Seconp.php.

    U običnom instalacija WordPress. Stranica za registraciju (autorizacija, resetiranje lozinke) Prikazuje datoteku WP-Login.php.

    • /wp-login.php - Autorizacija
    • /wp-login.php?action\u003dregister - Registracija
    • /wp-login.php?action\u003dlostpassword - resetiranje lozinke

    Za Multisite u WP-Login.php postoje zasebni uvjeti. Dakle, kada kliknete na linku /wp-login.php?action\u003dregister na Multisaite, WordPress će izvršiti preusmjeravanje na stranicu /wp-signp.php. U mnogim temama stranica izgleda nije baš atraktivno, pa ćemo napraviti svoj.

    Mreža glavne web stranice

    Prema zadanim postavkama, WordPress otvara stranicu za registraciju (WP-segnop.php) na mreži glavnu domenu (web stranica). Međutim, možete napraviti zasebnu stranicu za registraciju za svaku mrežnu stranicu, čak i ako imaju različite teme. Razmotrit ćemo slučaj kada na svim mrežnim mjestima imaju svoju stranicu za registraciju, ali se koristi i ista tema i nalazi se, a mjesta se razlikuju samo na jeziku. Ako se koriste različite teme, trebat ćete napisati više koda.

    funkcije.php?

    Ne. Čini se da se naziv ove datoteke spominju u bilo kojem članku o WordPress-u. U našem slučaju, uzimajući u obzir činjenicu da je funkcija registracije dizajnirana za nekoliko web lokacija, ima smisla odnijeti u mu-dodatke koji su učitan prilikom otvaranja bilo koje web lokacije.

    Lirska digresija

    Vrijedno je napomenuti da su Mu-dodaci učitani ranije od običnih dodataka i dok se The Wordpress kernel potpuno preuzme, tako da poziv za neke funkcije može dovesti do fatabalnih grešaka u PHP-u. Slično "rano" preuzimanje ima svoje prednosti. Recimo da u bilo kojoj temi ne može se pridržavati neke akcije koje se pokreću prije preuzimanja funkcija.php datoteke s teme. Primjer toga može poslužiti kao dodatak JetPack_module_load_related-Posts (povezane-postove - naziv modula) s kojim je moguće pratiti aktivnost modula u jetpack-u. Nemoguće je "kvačilo" iz teme teme u ovu akciju, jer je radnja već radila prije učitavanja tema - dodaci su raniji. Možete pogledati uobičajenu sliku WordPress-ovog narudžbe na stranici Akcijske referentne stranice u kodu.

    Naručite u datotekama

    Mu-dodaci mogu sadržavati bilo koji broj datoteka i bilo kojeg grafikona, koji će vam izgledati logično. Pridržavam se o takvoj hijerarhiji:

    | -Mu-dodaci | - | load.php | - | - | Selena-mreža | - | - | - | - - | - | - | - | - | - | - | -... | - | - | - | -Jetpack | - | - | - | - - -Plugin.php

    U datoteci opterećenja. Sve potrebne "dodatke" povezane su na našu mrežu:

    Učitavanje ležeći za sve dodatke Load_muplugin_textdomain ("selena_network", "/ selena-mreža / jezici /"); // Mrežna prijava zahtijevaju wpmu_plugin_dir. "/selena-network/signp/plugin.php"; // drugi dodaci // zahtijeva wpmu_plugin_dir ...

    Unutar mape Selena-Network mape se pohranjuju, a svaki ima svoj Plugin.php, koji se povezujemo na opterećenje.php. Daje fleksibilnost i sposobnost brzog onesposobljavanja i uključivanja nekih stvari.

    Adresa stranice za registraciju

    Da biste odredili adresu stranice za registraciju, koristite WP_SiGNUP_Location filter. Može se naći unutar datoteke WP-Login.php i on je on odgovoran za preusmjeravanje na wp-eggit.php.

    Case "Registriraj": IF (IS_Multisite ()) (WP_Redirect (nju_filters ("wp_signUp_location", mrežnog_site_url ("wp-eggit.php")); izlaz;

    Dodajte svoju funkciju u Mu-Plugins / Selena-Network / Registracija / Plugin.php, koji će dati adresu stranice za registraciju na trenutnom mjestu:

    Funkcija Selena_network_signUp_page ($ URL) (povratak home_url (). "/ Registracija /";) add_figlter ("WP_Sigrup_Location", "selena_network_signp_page", 99);

    selena_network - prefiks, koji koristim na imenima svih funkcija unutar Mu-dodataka na mojoj web lokaciji kako bi se izbjegli sukob, treba zamijeniti vlastitim jedinstvenim prefiksom. Prioritet dodavanja filtra 99, jer neki dodaci, poput BBpressa i Buddypress-a, mogu prepisati ovu adresu sami (Mu-dodaci su učitani ranije od uobičajenih dodataka, pogledajte gore). Imajte na umu da se koristi home_url (), umjesto network_site_url (), da posjetitelja ostavljaju na istoj domeni. Možete koristiti bilo koji URL kao adresu.

    Izrada stranice

    Sada kreiramo stranicu sa stranica.com/signUp/ kroz redovno sučelje, a u predlošci mape kćeri-tema za našu novu stranicu - stranica-eggicup.php. Umjesto riječi "Registracija" možete koristiti jedinstveni ID.

    Unutar novog predloška morate nazvati funkciju Selena_network_signUp_main (), koja će prikazati obrazac za registraciju.

    Vrijedno je napomenuti da cijeli proces sa predlošcima nije potreban i umjesto toga možete kreirati vlastiti broj kôd, koji će također nazvati funkciju Selena_network_signUp_main ().

    wp-eggitp.php i wp-aktivat.php

    Sada ćemo stvoriti funkciju koja će prikazati registracijski obrazac. Da biste to učinili, kopirajte datoteke wp-eggit.php i wp-aktivat.php iz korijenskog WordPress-a na Mu-dodacima / selena-mrežom / prijava / (i ne zaboravite da ih povežete unutar Mu-dodataka / selena-mreže / Prijava / plugin.php). Daljnje manipulacije sa datotekama su izuzetno teške i dugo za opisivanje, pa dođite da ih napravite sami. Opisut ću samo šta tačno treba učiniti i objaviti izvorne datoteke vašeg projekta:

    1. Na početku datoteke obrišite sve potrebne funkcije pozivanja i drugi kod vanjskih funkcija.
    2. Preimenujte sve funkcije dodavanjem jedinstvenih prefiksa na imena.
    3. Donji dio WP-eggit.php koda umotan je u funkciju selena_network_signUp_main i u samom početku piše globalni $ Active_SignUP; .
    4. Zamijenite izgled sami na pravim mjestima.

    Unutar wp-active.php morate učiniti s istom:

    1. Izbrišite sav kod vanjskih funkcija, zamotajte izgled u zasebnu funkciju.
    2. Promijenite izgled na mjestima gdje je potrebno.

    Datoteka WP-ActiveT.php odgovorna je za stranicu za aktiviranje računa. Kao i kod stranice za registraciju, morate stvoriti zasebnu predlošku unutar kojeg ćete nazvati funkcije iz datoteke WP-ActiveT.php.

    Šaljemo aktivacijska pisma

    Stranica za registraciju šalje pismo posjetitelju u odnosu na aktiviranje računa. Po defaultu je ovo WPMU_SiGNUP_USER_NOTIFICIFIKACIJA () iz datoteke MS-Functions.php. Njegova funkcionalnost može se posuditi za njegovu funkciju. Razlog zašto želite odbiti upotrebu ove funkcije - šalje referencu za aktiviranje računa sa WP-Activate.php. Možete onemogućiti ovu značajku pomoću WPMU_SiGNUP_User_notification filtra po premještanju lažnog na njemu (ako to ne treba učiniti, slovo za aktiviranje bit će poslano dva puta, u redu, u stvari, u stvari dva različita slova).

    Funkcionalna vojskaOfseLenagomez_wpmu_signUp_user_notification ($ Korisnik, $ user_mail, $ tipka, $ meta \u003d poriv ()) (// Funkcija wp_mail ($ user_emailchars_decode ($ tema), $ messers_herhers ); Povratak false;) add_filter ("WPMU_Sigrup_user_notification", "vojskaOfselegenagomez_wpmu_sigrup_user_notification", 10, 4);

    Kao rezultat toga, stranica za registraciju u temi Selene počela je izgledati mnogo čistije i oprezno.

    Zaključak

    Internet ima mnogo drugih ne baš ispravnih načina da naprave istu stvar - Apache preusmjerava, ajax-form koji neće raditi bez Java skripte itd. Nisam se jako svidjelo puno, pa sam to učinio najpravednije Moja vlastiti web stranica.

    Napominjem da bi datoteke za uređivanje trebale biti u mogućnosti pažljivo i pokušati se ne odmaknuti od izvora u Ranknesh, ako WordPress promijeni datoteke WP-eGctip.php i WP-ActiveT.php, one su bile lakše upoređivati \u200b\u200bkako bi ih pronašli promjene .

    Ne zaboravite pogledati izvorni kod svih gore opisanih funkcija kako biste u potpunosti bavili onome i kako se događa unutar koda.

    Bonus. Zaštita od neželjene pošte

    Čak su i najmlađa mjesta na WordPress-u često podliježu registraciji neželjene pošte. Možete napisati beskrajne uslove za filtriranje botova, često sličnije pokušaju stvaranja umjetne inteligencije 🙂 u slučaju multiseta, redovan preusmjeravanje u Apache mi je pomogao, s kojim se pri otvaranju /WP-SignUp.php i / wp- acitvate.php, zatražio sam da izvršim 404 (nisam stručnjak podesite ApacheDakle, moja pravila možda nisu baš tačna).

    RewriteEngine na rewritebase / rewriteule ^ wp-eccup \\ .php - Rewriteule ^ wp-aktivirajte \\ .php - # započnite WordPress # pravila iz WordPress-a prema zadanim postavkama ne dirajte :) # ... # kraj Wordpress

    P. S. Pokušavam opisati neke stvari treće strane kao detaljnije, jer kad sam započeo, ponekad je bilo nekako reći i objasniti mnoge stvari. Također vjerujem da će se slični mali savjeti o drugim materijalima biti gurnuti u proučavanje nečeg novog i širenja svog polja znanja. Redovni izrazi koriste se u repriteule zapisima, na primjer, nisu u potpunosti složeni, simbol ^ znači početak linije.

    Segal Mi ćemo razmotriti eksploataciju kritične 1dnevne ranjivosti u popularnim CMS Joomla, koji je na Internetu grmljajući na kraju oktobra. To će biti o ranjivosti sa brojevima CVE-2016-8869, CVE-2016-8870 i CVE-2016-9081. Sva tri pojavljuju se iz jednog koda, koji je jednom bio u dubini okvira, koji čekaju vlastitim satima, da se zatim oslobode i donesu s njim haos, hakiranim lokacijama i suzama u bilo kojeg nevinih korisnika ovog Joomla. Samo su najvažniji i hrabriji programeri čija su oči crvena iz svjetla monitora, a klavijature se oslanjuju sa krušnim mrvicama, mogli su osporiti natečenu gužvu i nametnuli je glavu na oltaru popravki.

    Upozorenje

    Sve se informacije pružaju isključivo u informativne svrhe. Ni urednici ni autor nisu odgovorni za svaku moguću štetu uzrokovanu materijalima ovog članka.

    Zašto je sve počelo

    6. oktobra 2016. godine, Damis Palma (Demis Palma) stvorila je temu na berzi stanja, koja se raspitala: Zašto, u stvari, u Joomla verziji 3.6 Postoje dvije metode za registraciju korisnika sa istim registracijama ()? Prvi se nalazi u korisničkom kontroleruRregistracije, a druga je u korisnicima usercontrolleruser. Damis je želio znati da li se Korisnikontrolleruser :: Registar () metoda negdje koristi ili je samo evolutivni anahronizam koji ostaje od stare logike. Poremećen je činjenicom da, čak i ako se ova metoda ne koristi u bilo kojoj prezentaciji, može se nazvati korištenjem formiranog zahtjeva. Kakav je bio odgovor iz programera pod nadimkom Itoctopusa, potvrdivši: problem zaista postoji. I poslao izvještaj programerima Joomla.

    Zatim su događaji razvili najbrži način. 18. oktobra, programeri Joomla prihvaćaju izvještaj Damisa, koji je do tada izdvojio POC, omogućujući vam da registrirate korisnika. Objavio je bilješku na svojoj web stranici, gdje je općenito rekao o problemu i razmišljanjima o ovome. Istog dana izlazi nova verzija Joomla 3.6.3, koja i dalje sadrži ranjivi kod.

    Nakon toga, David Tampellini (Davide Tampellini) vrti grešku u stanje registracije nije jednostavan korisnik, već administrator. I 21. oktobra, Joomla Sigurnosni tim stiže novi slučaj. Već govori o podizanju privilegija. Istog dana se najava pojavljuje na web stranici Joomla da će u utorak, 25. oktobra, biti objavljena druga verzija sa nizom broj 3.6.3, koja ispravlja kritičnu ranjivost u sustavu kernela.

    25. oktobra, Joomla Sigurnosni štrajk tima pronalazi posljednji problem koji je deo koda otkrio Damis. Zatim u glavnoj podružnici službenog skladišta Joomla, obaveza od 21. oktobra, sa neupadljivim imenom pripremaju 3.6.4 Stabilno izdanje, što popravlja zloupotrebu.

    Nakon toga, brojni zainteresovani pojedinci povezani su s prijenosom programera na prijenos programera - oni počinju promovirati ranjivost i kuhati krut.

    27. oktobra, Harry Roberts istraživač iznosi gotove eksploataciju u reprezitoriju XIPHOS istraživanja, koji može prenijeti PHP datoteku na server s ranjivim CMS-om.

    Detalji

    Pa, sa prapostorijom je gotov, idite na najzanimljiviju stvar - razlučivanje ranjivosti. Kao testna verzija instalirao sam Joomla 3.6.3, tako da će svi brojevi reda biti relevantni za ovu verziju. I sve puteve do datoteka koje ćete vidjeti sljedeće bit će navedene u odnosu na korijen instaliranog CMS-a.

    Zahvaljujući Damisu Palmi, znamo da postoje dvije metode koje obavljaju registraciju korisnika u sistemu. Prvi koristi CMS i nalazi se u / komponentri/com_users/controllers/comer/controllers/registration.php:108. Drugo (ona koju mi \u200b\u200bi moramo nazvati), živi u / komponente / com_users / kontroleri / user.php: 293. Pogledajmo ga bliže.

    286: / ** 287: * Metoda za registraciju korisnika. 288: * 289: * @return boolean 290: * 291: * @Since 1.6 292: * / 293: Registar javnog funkcije () 294: (295: JSESSION :: CheckToken ("post") ili Jexit (jtext :: _ ("Jinvalid_Token"); ... 300: // Dobijte podatke obrasca. 301: $ Data \u003d $ this-\u003e ulaz-\u003e Post-\u003e Get ("Korisnik", aray (), "Array");. .. 315: $ Povratak \u003d $ Model-\u003e Provjeri ($ obrazac, $ Podaci); 316: 317: // Provjerite greške. 318: Ako ($ povratak \u003d\u003d\u003d FALSE) 319: (... 345: /) Završite registraciju. 346: $ RETURN \u003d $ Model-\u003e Registrirajte se ($ Podaci);

    Ovdje sam ostavio samo zanimljive linije. Puna verzija ranjive metode može se pogledati u repozitoriju Joomla.

    Smislit ćemo to što se događa kada redovna registracija korisnika: koji su podaci šalju i kako se obrađuju. Ako je registracija korisnika omogućena u postavkama, obrazac se nalazi na http: //joomla.local/index.php/compont/user/? View \u003d Registracija.


    Legitimni zahtjev za registraciju korisnika izgleda kao sljedeći snimci zaslona.


    Komponente COM_USERS odgovorno je za rad sa korisnicima. Obratite pažnju na parametar zadataka u upitu. Ima $ kontroler. $ Metod. Pogledajmo strukturu datoteke.

    Nazivi skripti u mapi kontroleri. U skladu je s imenima pod nazivih kontrolera. Budući da je u našem zahtjevu sada $ kontroler \u003d "Registracija", datoteka će nazvati. registrovanje.php. i metoda registracije ().

    Pažnja, pitanje: Kako prenijeti registracijsku obradu u ranjivom području u kodu? Vjerovatno ste već nagađali. Imena ranjivih i sadašnjih metoda podudaraju se (registriraju se), tako da možemo samo promijeniti ime pozdravnog kontrolera. A gdje je ranjivi kontroler? Pravo u datoteku user.php.. Isključuje $ kontroler \u003d "korisnik". Svi zajedno sakupljamo i dobivamo zadatak \u003d user.register. Sada se zahtjev za registraciju obrađuje metodom koja nam je potrebna.


    Druga stvar koju trebamo učiniti je poslati podatke u pravi format. Ovdje je sve jednostavno. Legitimni registar () čeka niz od nas nazvan JForm, u kojem prenosimo podatke za registraciju - ime, prijavu, lozinku, poštu (vidi snimku zaslona sa upitom).

    • /components/com_users/conntrollers/registration.php: 124: // Nabavite korisničke podatke. 125: $ quantdata \u003d $ this-\u003e ulaz-\u003e post-\u003e get ("jform", niz (), "Array");

    Naše odjeljenje prima ove podatke iz niza nazvanog korisnika.

    • /components/com_users/conntrollers/user.php: 301: // Nabavite podatke obrasca. 302: $ Data \u003d $ this-\u003e ulaz-\u003e post-\u003e get ("korisnik", niz (), "Array");

    Stoga mijenjamo imena svih parametara sa JFrom na korisniku.

    Treći naš korak je pronaći CSRF važeći token, jer neće biti registracije bez njega.

    • /Components/com_users/conntrollers/user.php: 296: JSESSION :: CheckToken ("post") ili Jexit (Jinvalid_Token));

    Izgleda kao hash MD5, a na primjer, možete ga uzeti iz obrasca za autorizaciju na web mjestu /index.php/compont/users/?view\u003dlogin.


    Sada možete kreirati korisnike kroz željenu metodu. Da se sve dogodilo, čestitam - upravo ste razumjeli ranjivost CVE-2016-8870 "Nedostaje verifikacija dozvola za registraciju novih korisnika."

    Evo kako to izgleda u "radnom" načinu registra () iz korisničkog kontrolera registracije:

    • /components/com_users/conntrollers/registration.php: 113: // Ako je registracija onemogućena - preusmjerite na stranicu za prijavu. 114: IF (jcomponenthelper :: getparams ("com_users") -\u003e get ("dozvoleRregistracija") \u003d\u003d 0) 115: (116: $ ovo-\u003e SETRereirect (jroute :: _ ("index.php" opcija \u003d com_user & View \u003d Prijava ", FALSE)); 117: 118: Povratak FALSE; 119 :)

    I tako u ranjivom:

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

    Da, ni na koji način.

    Da bismo razumjeli drugi, mnogo ozbiljniji problem, poslat ćemo zahtjev koji je formirao SAD i slijedimo kako se izvodi na različitim odjeljcima Kodeksa. Evo djela koji je odgovoran za provjeru podataka koje je korisnik poslao u načinu rada:

    Nastavak dostupan samo učesnicima

    Opcija 1. Pridružite se zajednici web lokacije da biste pročitali sve materijale na web mjestu

    Članstvo u zajednici tokom navedenog razdoblja otvorit će vam pristup svim materijalima hakera, povećat će vaš lični akumulativni popust i nakupljat će profesionalnu ocjenu rezultata stručne xakep!

    Teme obično nisu funkcionalne, ali ponekad mi, programeri, morate uvesti neke mogućnosti u našu temu kako biste je učinili malo boljim i praktičnijim.

    U ovom vodiču razmotrit ćemo izraz "teritorija dodataka", kao i naučiti kako koristiti fantastičan alat koji je napisao THMAS Griffin: TGM dodatak za aktiviranje biblioteke za aktiviranje.

    Funkcionalnost teme: invazija na teritoriju dodataka

    Teme su dizajnirane da promijene dizajn WordPress web stranice. U idealnom slučaju, tema bi trebala utjecati na samo vizuelni aspekt. Međutim, u našoj "Zlatnoj dobi" WordPress, Plug-in programeri često uključuju funkcionalne funkcije u svojim temama koje vam omogućavaju održavanje konkurentnosti na tržištu.

    Ovo je invazija na teritoriju dodataka. Možemo predstaviti "teritorij dodataka" kao neke funkcionalne dijelove koda. Svaki kodni isječak mijenja funkcionalnost vaše web stranice mora biti predstavljena kao dodatak ako navedeni kod nije položen u Wordpress kernelu.

    Već sam formulisao ranije u jednom od mojih članaka empirijsko pravilo "teritorni dodaci:

    Ako je osobitost povezana sa vizuelnim predstavljanjem web mjesta, tada bi se u ovom slučaju trebala biti uključena u temu; Ako je povezan s funkcionalnošću, tada se mora predstavljati kao zaseban dodatak.

    Prilično jednostavno pravilo. Ljudi se još uvijek pokušavaju registrirati na nivou funkcionalnih fragmenata koda u svojim temama, ali katalozi tema (poput Wordpress.org ili TemeFOREST) \u200b\u200bne uzimaju teme koje upadaju u teritoriju dodataka. Dakle, prijedlog funkcionalnosti u temama postao je određeni problem.

    Srećom, postoji jednostavno rješenje koje ne ide protiv pravila "teritorije dodataka".

    Uvod u biblioteku aktiviranja TGM dodatka

    Podešavanje aktivacije TGM dodatka

    Obratite pažnju na TGMPA () funkciju s dva parametra na samom kraju koda. Drugi parametar je $ config varijabla, koja je ujedno i niz, poput $ dodataka. Slijedi iz njenog imena, možete konfigurirati biblioteku aktivacije TGM dodatka pomoću ovog masiva. Varijabla prihvaća svoj skup opcija:

    • iD (string) Jedinstveni je ID za TGM biblioteku za aktiviranje dodataka u vašoj temi. Ovo je vrlo važno: Ako drugi dodaci koriste i aktiviranje TGM dodatka, različiti ID-ovi će spriječiti moguće sukobe.
    • default_path (string) - zadana apsolutna staza za dodatke u vašoj temi. Kada ga instalirate, možete koristiti naziv ZIP datoteke kao vrijednost izvorne parametra za vaš dodatak.
    • meni (string) - meni menija za instalaciju dodataka.
    • has_notices (boolean) - ako se na tačno navedenim, administrativne obavijesti bit će izdate za potrebne / preporučene dodatke.
    • odbaciv (Boolean) - ako je naveden u istini, korisnik može "zatvoriti" obavijesti.
    • odbaci_msg (string) - ako je opcija odbacivanja postavljena u lažnoj, ova poruka bit će prikazano iznad obavijesti administratora.
    • iS_Automatic (Boolean) - Ako je naveden u istini, dodaci će se aktivirati nakon što se korisnik pristane da ih instalira.
    • poruka (string) - dodatni HTML, prikazan ispred tabele utikača.
    • Žice (niz) - niz koji uključuje prikazane poruke. Možete ih postaviti kao emitovane linije. Pogledajte aplikaciju.php datoteku da biste vidjeli potpunu listu svih poruka.
    "MyTheme-TGMPA", // vaš jedinstveni TGMPA ID "Default_Path" \u003d\u003e get_stylesheet_directory (). "/ lib / dodaci /", // zadana apsolutna staza "meni" \u003d\u003e "MyTheme-install-waphinds-dodaci", // meni Slug "has_notices" \u003d\u003e istina, // Prikaži obavijesti o administraciji "Otpuštaju" \u003d\u003e lažno , // Obavijesti nisu odbaciva "DISKISS_MSG" \u003d\u003e "Zaista mi trebate instalirati ove dodatke, u redu?", // Ova će se pojaviti na vrhu NaG-a "IS_AUTOMATIC" \u003d\u003e True, // automatski Aktivirajte dodatke nakon instalacije "poruka" \u003d\u003e "", // poruka za izlaz neposredno prije dodataka tablice" žici "\u003d\u003e niz (); // niz nizova poruke koje koristi aktiviranje TGM dodatka koristi);

    Zaključak

    Kao što vidite, predložite funkcionalnost u teme Wordpress. Možda - jednostavno morate prvo razmisliti o korisnicima koji mogu prebaciti sa jedne teme u drugu. Biblioteka za aktiviranje TGM dodataka nudi stvarno pametan način za to.

    Što mislite o ovom alatu? Jeste li ikad koristili, planirate ga koristiti u budućnosti? Podijelite svoje misli!