Güçlü bir WordPress Multisite kayıt sayfası nasıl oluşturulur. WordPress Temaları için TGM Eklenti Etkinleştirme Kitaplıkları Etkinleştirme php'yi etkinleştir

Bir saatte birkaç site için bir WordPress kurulumu kazanmanızı sağlar. Bu dış görünüm ile site, veritabanındaki güç tablolarını benzersiz bir önekle kaldıracaktır.

Muhabirlerin kayıt verileri ve bölgedeki tüm siteler için kayıtlar içeren tablolar. Bu kalıcı bir artıdır ve bir kez kaydolarak bir dizi siteye erişebilirsiniz. Ayrıca, cilt bölgesinde bir ve aynı eğik kayıt farklı haklara sahip olabilir. Örneğin, bir sitede muhabir editör, başka bir sitede yönetici olabilir.

İlk olarak gömülü WordPress kayıt tarafı için, wp-login.php dosyasını görüntülemek için yetkilendirme ve şifre bırakma.

  • wp-login.php - yetkilendirme
  • wp-login.php?action=register - kayıt
  • wp-login.php?action=lostpassword - Kayıp Parola

Multisite modunda, WordPress çekirdeği farklı davranmaya başlayacak ve wp-login.php?action=register'a gittiğinizde wp-signup.php'ye yönlendirilecektir. Şirketinizin kayıt sayfası, promosyonlar için olduğu gibi WordPress ile.

Ağ ayarlarında (Ağ Yöneticisi → Ayarlar → Ağ Ayarları) bu olasılığı açarak üzerinde bir süper yönetici gibi yeni bir site oluşturmak mümkündür.

Üçüncü taraf kaydı iyi görünmüyor. Bootstrap gibi CSS çerçeveleri kullanılarak tasarlanmış pek çok tema ve yanlarda farklı öğeleri biçimlendirmek için özel sınıflar vardır, bu nedenle herkes için aynı olan tek bir HTML yazmak önemlidir.

Ancak taraf neokhaynno'ya benziyormuş gibi vіdchai'ye düşmek kolay değil. wp-signup.php dosyası, sitenin dış görünümü üzerinde çalışmak için zamanınız yoksa - diğerlerine odaklanabilirsiniz. önemli taraflar o içerik.

Kendi kayıt sayfanızı oluşturmaya hazırsanız, wp-signup.php harika bir araç ve koristuvach'lar tarafından girilen verileri işlemek ve yeniden yazmak ve yeni bulut kayıtları oluşturmak için WordPress gibi çok çeşitli işlevlere kolayca erişmek için bir araç olacaktır.

merezhі'nın ana sitesi

WordPress promosyonu için, işletmenin ana etki alanında (web sitesi) bir kayıt sayfası (wp-signup.php) oluşturursunuz. Tim daha az değil, merezhі'nın cilt sitesi için kayıt sayfaları oluşturabilirsiniz, böylece böyle kokabilirsiniz.

Ağın tüm sitelerinde bir tema varsa, ancak bunların dış görünümünde bir kayıt sayfası varsa, aradaki farka bakarız. Siteler benim (İngilizce ve Rusça) ile ayrılır, bu nedenle kayıt tarafı sitemde "yerli" olarak gösterilecektir. Siteler farklı konularla ayırt edilse bile, her şey aynı düzene sahip olacak (durum farklıdır, çünkü tüm konularınızı birleştirmenize yardımcı olabiliriz) veya hikayeyi değiştirebilirsiniz.

function.php alternatifi

Dosya sırası

MU eklentileri, uygun gördüğünüz gibi aynı yapıdaki herhangi bir sayıda dosyayı değiştirebilir. Yaklaşık olarak aşağıdaki hiyerarşiyi bitireceğim:

| mu eklentileri | | yük.php | | selena ağı | | | kaydol | | | | eklenti.php | | | ... | | | jet çantası | | | | eklenti.php

load.php dosyasında çeviriler ve gerekli tüm "eklentiler" bulunur:

// MU eklentileri için çeviriler yükleniyor load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Kayıt tarafı için işlevsellik WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/plugin.php"; // Bir eklenti daha // WPMU_PLUGIN_DIR gerektirir ...

Selena-network dizinlerinin ortasında eklenti klasörleri kaydedilir. Cildin kendi plugin.php'si var, bu yüzden onu load.php'ye bağlayabiliriz. Tse, acil durumlarda çalışan bir projeye diğer bileşenleri kolayca dahil etme ve dahil etme esnekliği ve yeteneği sağlar.

Kayıt sayfası

Kodun nasıl yazılacağını ve nasıl yazılacağını çözdükten sonra, kayıt tarafının oluşturulmasına devam edebilirsiniz.

Özel bir arayüz üzerinden example.org/signup/ adresi için bir taraf oluşturalım. Adres olarak, bunun bir URL adresi olup olmadığını bükebilirsiniz, böylece projeniz için uygundur.

Gerekli kayıt sayfasına yönlendirin

WordPress'in yeni kayıt sayfamızdan haberdar olması için kendisini ona yönlendirerek “Register” mesajına tıkladığınızda wp_signup_location filtresi kontrol edilir. Bunu wp-login.php'nin ortasında bulabilir ve kısaltması için wp-signup.php'ye de yönlendirebilirsiniz.

Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); çıkış; // ...

Hatırladığınız gibi, kilidin arkasında, sınırın ana etki alanında kayıt tarafı görüntülenir. Bu network_site_url() kazanır.

Mu-plugins/selena-network/signup/plugin.php dosyasındaki filtreye imzanızı ekleyin; bu, akış sitesinde kayıt yapan tarafın adresini verecektir:

fonksiyon selena_network_signup_page($url) ( home_url("kaydolma"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network - sitemdeki MU eklentilerinin ortasındaki tüm işlevlerin adlarında benzersiz collies'e kullandığım ve ardından kendi benzersiz önekinizle değiştirdiğim bir önek. Bir filtre eklemenin önceliği 99'dur, böylece bbPress ve BuddyPress gibi diğer eklentiler dosyadaki bu adresin üzerine yazabilir (MU eklentileri daha önce alınır, daha düşük ad eklentileri, div. daha yüksek).

home_url()'nin neyi kazandığına dikkat edin, network_site_url()'de olduğu gibi, merezhі'nın ana sitesini değil, akış sitesinin adresini görürsünüz.

İşlevsellik wp-signup.php

wp-signup.php dosyası çok fazla işlevsellik ve kod gerektirir. Resmi bir bütün olarak boyamak için kodu hızlıca yazabilirsiniz. Kural olarak, İngilizce'de buna kod katlama denir.

Dosyanın en üstünde 1'den 80 satıra kadar (sürüm 4.1.1'de), farklı yeniden kontroller yapılır ve get_header() yardımı için "başlangıç" tarafı gösterilir.

Sessiz yöntemler verdik ve önlerinde, onlarla çalışabilmemiz için cilt fonksiyonunu iyileştirmek için varto rose. Zenginliklerin ortasında, genellikle wpmu_ önekine sahip diğer işlevler öne çıkar, tüm pis koku wp-includes/ms-functions.php dosyasında seslendirilir. Tsey razdіl anlamak önemlidir, kodu bağımsız olarak bachachi etmeyin. Aşağıda sizin için ana işlevlerin bir açıklaması bulunmaktadır, böylece zorlukları suçlayabilirsiniz.

  • wpmu_signup_stylesheet() - kayıt tarafında ek CSS gösteriliyor.
  • show_blog_form() - site kaydı için alanlar (adresler, dürtme sistemleri için adlandırma görünürlüğü).
  • validate_blog_form() - wpmu_validate_blog_signup() yardımı için girilen site adresinin ve adının doğrulanması.
  • show_user_form() - bir muhabiri kaydetmek için alanlar (oturum açma ve e-posta adresi).
  • validate_user_form() - girilen oturum açma ve e-posta adresinin doğrulanması. yardım için wpmu_validate_user_signup() isteyin.
  • signup_another_blog() — sitede zaten kayıtlı olan kayıtlar için yardım show_blog_form() için yeni siteleri kaydetme alanları.
  • validate_another_blog_signup() - ek validate_blog_form() için site adresini ve adını kontrol edin.
  • signup_user() - kayıt tarafının alanlarını görüntülemenin ana işlevi.
  • validate_user_signup() - oturum açma ve e-posta adresini yeniden kontrol edin. Yardım için validate_user_form()'a bakın.
  • signup_blog() - show_blog_form() yardımı için adresin girilmesi, sitenin görünürlüğünün adlandırılması (başka bir kayıt kaydı) alanları.
  • validate_blog_signup() - oturum açmayı, e-posta adresini kontrol edin. Adrese gönder, siteye isim vereyim.

wp-signup.php dosyasının en altında (4.1.1 sürümünde satır 646), yukarıda açıklanan tüm yöntemler gibi kayıt defteri çalışmasının ana mantığı bulunur. Kodun bu kısmı işlevden sorumlu değildir. Örneğin, get_footer() çağrılır.

Kopyalama işlevi wp-signup.php

Ardından, wp-signup.php dosyasını MU eklentisine kopyalama ve çatalda değişiklik yapma prosedürü açıklanacaktır. Mozhlivo, tse mozhe zdatisya doğru yol değil. Birincil işlevler yerine, temsili sınıf formlarını yeniden kontrol etmek ve görüntülemek için kendi işlevlerinizi sıfırdan yazmanız mümkündür. Bence wp-signup.php zaten bizim tarafımız için gerekli tüm mantığa sahip, küçük değişiklikler yapmak kalıyor.

WordPress güncellenirken bazen wp-signup.php de değiştirilir, ancak bu, bir dış görünüm sürümü sırasında “çatalınızı” senkronize edebileceğiniz anlamına gelmez. wp-signup.php'nin ortasındaki işlevler, esasen HTML oluşturma, veri yeniden yazma, bulut kaydı oluşturma ile ilgilenir ve siteler, ms-functions.php içinde seslendirilen wpmu_ önekine sahip yöntemlerle işlenir.

Yan tarafta bir kayıt formu oluşturuyormuş gibi fonksiyonların oluşturulmasına özen gösterelim. Kimler için wp-signup.php dosyasını WordPress kökünden mu-plugings/selena-network/signup/ adresinden kopyalayın. mu-plugins/selena-network/signup/plugin.php'nin ortasında yogayı etkinleştirin).

WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/wp-signup.php";

Görünüşe göre, kopyalanan dosyanın en başından itibaren, gerekli olmayan tüm yeniden doğrulama tüketimi gereklidir. Sürüm 4.1.1, 1'den 80'e kadar olan tüm kodlara sahiptir.

Artık kayıt formunu görüntülemek için ana işlevi oluşturmaya hazırız. Bunun için 646 yüklemenin tüm mantığı ve dosyanın sonuna kadar selena_network_signup_main adlı bir fonksiyona aktarılır. Örneğin, iki eğri görebilirsiniz

(Satır 722 ve 723) ve ayrıca get_footer() wiki.

Aynı zamanda, selena_network_signup_main() öğesinin koçanın kendisi üzerinde oluşturulması, aktif_signup öğesini global olarak açıkça değiştirecek, böylece dosyanın diğer tüm yöntemleri yazılacaktır. І dodamo wiki Before_signup_form altına tıklayın, dosyanın en başından beri gördüm.

fonksiyon selena_network_signup_main() ( global $active_signup; do_action("before_signup_form"); // ... )

Artık gerekli olduğu tüm alanlarda düzeni değiştirmeye gerek yok ve kayıt sayfası hazır.

Visnovok kayıt formu

Burada en az iki seçenek var. Daha manuel yol— Bir kısa kod oluşturun ve bunu harika bir düzenleyici aracılığıyla yandan genişletin.

// Kısa kod oluştur network_signup add_shortcode("network_signup", "selena_network_signup_main");

Diğer bir seçenek de, alt temalar klasöründe bir page-signup.php sayfa şablonu oluşturmaktır. "Kaydolma" kelimesinin değiştirilmesi, benzersiz bir kimlik, bir el sıkışma ile değiştirilebilir. Şablonun ortasına gerekli düzeni ekleyin ve gerekli alan için bir selena_network_signup_main() çağrısı oluşturun.

Sonuç olarak, kayıt sayfam daha zengin ve temiz görünmeye başladı.

Aktivasyon sayfası

WordPress kısayolları için, Multisite'daki kayıt sürecini iki adımda genişletmek akıllıcadır - sitedeki formu doldurmak ve istek için gittiğinizde eğik kaydı etkinleştirmek, adresine göndermek. elektronik levha. Bundan sonra, ön bölümde oluşturulan formu doldururken, WordPress, eğik girişi etkinleştirmek için küçük bir talimat ve talimatlarla sayfayı zorlar.

Aktivasyon tarafını görmek için wp-activate.php dosyasını görebilir, WordPress'in kök dizininde kontrol edebilirsiniz. wp-activate.php de tekrar değiştirilebilir. İşlem, wp-signup.php için zaten yaptığımıza benzer.

Standart bir arayüz üzerinden example.org/activate/ tarafını oluşturalım. Adres olarak, URL olsun, size uygun olacak şekilde karıştırın.

wp-activate.php dosyasını MU eklentinize kopyalayın ve mu-plugins/selena-network/signup/plugin.php dizinine ekleyin.

WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/wp-activate.php";

Orta kısım wp-signup.php yerine o kadar zengin değil. Dosya vikonu є tek işlem - oblіkovy kaydını etkinleştirme, böylece doğru anahtar kaldırılır ve af veya vikonannya işleminin başarısı hakkında bildirimler görüntülenir.

Görünüşe göre tüm gerekli olmayanlar ve gereksinimler - WordPress 4.1.1'deki 1'den 69'a kadar olan satırlar. Örneğin, bir get_footer() araması yapalım. Geriye kalanlar selena_network_activate_main() işlevine taşınır.

WordPress (wp-load.php) devralınmasından önce WP_INSTALLING sabitinin neden burada iftira edildiğini merak edin. WordPress'in barizliği eklentileri karıştırmaz.

Kayıt geri alınır alınmaz, gerekli olduğu yerde, oradaki düzeni düzeltmek için bırakılır. Ayrıca gösterilecek metni de değiştirebilirsiniz (eğer seçerseniz, kurulumların hiçbirinde kilitlemek için MU-eklentilerinizin metin alanını tüm işlev-çevirilerine eklemeyi unutmayın).

Bitmiş işlev, alt tema için bir kısa kod veya özel bir şablon aracılığıyla oluşturma tarafının arkasında gösterilebilir.

Doğru mesajlarla aktivasyon sayfaları

Aktivasyon sayfası kullanıma hazır, ancak WordPress bunu bilmiyor ve daha önce olduğu gibi, wp-activate.php adresine göndererek aktivasyon listesini güçlendirdi. wp-signup.php görünümünde adresi değiştirmenize izin veren bir filtre yoktur. Doğru mesajlarla bir süper güç gibi kendi işlevinizi yazmanız gerekiyor.

Doldurma anında, WordPress kaydının yanındaki formun bu kadar güçlü olması wpmu_signup_ seçeneğine tıklayın. kullanıcı() veya wpmu_signup_ Blog() nadasa kayıt türü. Hatalı işlevler, wp_signups tablosunda, ortasında eğik kaydın etkinleştirme anahtarı olan gerekli alanı doldurarak yeni bir kayıt oluşturur.

Bundan sonra, işleve geçin, wpmu_signup_ öğesini çağırın kullanıcı _notification() veya wpmu_signup_ Blog _bildirim(). Saldırgan işlevlerin benzer işlevleri olabilir - etkinleştirme gücüne sahip sayfayı oluşturun ve zorlayın, ancak farklı argümanları da kabul edin. Her iki є filtrede de alttan taşma için.

Eğer (! application_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) false döndürür;

Oluşturulan bloglar için herkese açık gönderileri etkinleştirmek için:

if (! application_filters("wpmu_signup_blog_notification", $domain, $path, $title, $user, $user_email, $key, $meta)) ( false return; )

Ortasına wp_mail() kullanarak listeler ekleyebileceğiniz kendi ayrıntılarınızı yazmanız gerekmez ve örneğin dil false olarak ayarlanmalıdır, böylece WordPress ikisi için etkinleştirme sayfasını düzenlemez - sizinkilerden biri, aksi takdirde - wp-activate.php'deki mesajlarla kilitleme sayfası.

fonksiyon selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Sayfanın başlığını, metnini ve başlıklarını oluşturma // ... // Sayfayı düzenlemek veya güçlendirmek için bir Cron işi eklemek sayfa wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers);// WordPress'in ikili aktivasyon sayfasını düzenlememesi için false olmalıdır return false; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup

Yaprakları SMTP sunucusu üzerinden güçlendirirseniz, aksi takdirde kayıt sayısı zaten çoktur, yaprakların üstesinden gelmemek için onlarla ilgilenmelisiniz mittevo. WordPress Cron ile ilgili yardım için bir Cron işi ekleyebilirsiniz.

wp-signup.php ve wp-activate.php'ye erişimi engelliyoruz

Kayıt ve aktivasyon gücünü oluşturduktan sonra, "orijinalleri" kapatmanız gerekebilir. Örneğin, üçüncü taraf kaydında olduğu gibi ek alanlar vardır, bu yüzden hatırlamanız gerekir. Ayrıca, birçok WordPress sitesi spam kayıtlarına tabidir.

Apache'den 404'ü farklı bir şekilde vermesini isteyerek iki problemi bir problemle çözebilirsiniz. Bunun için yapılandırma dosyasına veya .htaccess'e birkaç ek RewriteRule eklemek daha iyidir.

RewriteEngine On RewriteBase / # Normal mısraların bilgisi asla kazanılmayacak :) RewriteRule END WordPress

Visnovok

İnternette WordPress ile ilgili diğer sorunlar için bu kişisel olmayan bir çözümdür. Örneğin, kayıt taraflarının oluşturulması ve aktivasyon için orijinal wp-signup.php ve wp-activate.php dosyasının yeniden yazılması gerekir. Neden sıkı çalışmıyorsunuz, çünkü WordPress'i güncellediğinizde, dosyalardan önce yaptığınız tüm değişiklikleri harcayacaksınız ve yardım için çekirdeğin bütünlüğünü değiştiremeyeceksiniz.

Rozrobtsі herhangi bir ek olduğunda, bunlar veya kararlar bunlara üç saat harcamalıdır, schob razrobatis z tim, WordPress'te scho. Bunun için kişisel olmayan kahverengi enstrümanlar var.

not

Yeni işe alım görevlilerine otomatik olarak farklı roller atamak için Multisite User Management eklentisini seçebilirsiniz.

Beslenme ile ilgili herhangi bir sorunuz varsa veya makaleyi okuduktan sonra kayıt sayfaları ve aktivasyon oluşturmakta zorlanıyorsanız, lütfen yorum ve yorum bırakın.

27.03.2015 27.03.2015

WordPress perakendecisi. Her şeyde düzeni sevmek ve yeni araçları anlamak. Symfony bileşenlerinin mimarisinden esinlenilmiştir.

  • Bugün, örneğin internette tanıtılan popüler CMS Joomla'nın kritik 1 günlük akıllılığının sömürüsüne bakıyoruz. Rakamlarla tutarsızlıkların farkında olun CVE-2016-8869, CVE-2016-8870і CVE-2016-9081. Üçü de küçük bir kod parçası gibidir, tıpkı beş yıl önce olduğu gibi, çerçeve zamanının derinliklerinde çalışmaya zorlandı, böylece özgürleşebilir ve onunla birlikte kaos, kötü siteler ve onun olmadığı gözyaşları getirebiliriz. Joomla'nın hatası. Yalnızca monitörlerin ışığında gözleri kırmızı, klavyeleri ekmek çığlıklarıyla dolu olan en parlak ve en merhametli perakendeciler, kirli, azgın olduklarına dair bir viklik atabilir ve başlarını düzeltmelerin kurbanına koyabilirdi.

    UYARI

    Tüm bilgiler sadece bilginiz için verilmiştir. Ne yazı işleri ofisi ne de yazar, bu makalenin materyalleri tarafından zaptedilmiş olup olmayacağımdan sorumlu değildir.

    neden her şey başladı

    6 Haziran 2016 Stack Exchange'de bir konu oluşturan Demis Palma, anladığım şekilde: neden Joomla sürüm 3.6'da aynı isimli register() ile iki kayıt yöntemi kullanıyor? Birincisi UsersControllerRegistration denetleyicisinde, diğeri ise UsersControllerUser'da. Demis, UsersControllerUser::register() yönteminin burada neden galip geldiğini bilmek istiyor, aksi takdirde bu daha çok eski mantığın dışında bırakılan evrimsel bir anakronizmdir. Bu yöntemin olağan tezahürleri kazanmadığı gerçeği göz önüne alındığında, oluşturulan istekten yardım çağrıları olabilir. Scho otrimav'da geliştirici, itoctopus'ta değil, aynı zamanda podtvervіv: sorun gerçek değil. І Joomla bayilerine bir mesaj göndererek.

    Dalі podії en görünür sırada geliştirildi. 18 Temmuz'da Joomla perakendecileri, o sırada bir PoC atan ve coristuvach'ın kaydedilmesine izin veren Demis'in raporunu kabul edecek. Vіn web sitesinde bir not yayınladı, de zagal rozpovіv sorun ve ilk sürücünün düşüncesi hakkında. dışarı çıkmak için hangi gün Yeni sürüm Joomla 3.6.3, yak hala çelişkili kodun intikamını alıyor.

    Bundan sonra, Davide Tampellini, ben sadece bir koristuvach değil, aynı zamanda bir yönetici olana kadar hatayı kaldıracak. Bir sonraki Joomla güvenlik ekibinin 21'inde yeni bir vaka geliyor. Yenisinin zaten ayrıcalıkların tanıtımına gitmesi gerekiyor. Aynı gün, Joomla sitesinde, çekirdekteki kritik çakışmayı giderecek 3.6.3 seri numaralı taslak sürümle 25 Temmuz'da ikinci gün yayınlanacak olanlar hakkında bir duyuru var. sistemin.

    Joomla Güvenlik Saldırısı Ekibinin bilmesi gereken 25 gün sorunu bırak, Demis shmatok kodunun tezahürlerini yaratırken. 21. yıldönümünde göze çarpmayan bir adla bir taahhütte bulunmak için resmi Joomla deposunun merkez ofisine gidelim. Uğursuz bir hatayı düzelten 3.6.4 Kararlı Sürümü Hazırlayın.

    Rozrobniklerin aracısına ilk ateşin açılmasından sonra, bireylerin sayısal istilası bağlanır - çekişmeyi tersine çevirmeye ve birleşmeye hazırlanmaya başlar.

    27 Haziran 2009 Harry Roberts, Xiphos Research deposuna, düşman bir CMS'den bir sunucudaki PHP dosyasını ele geçirebilecek bir istismara katkıda bulunuyor.

    Detaylar

    Pekala, tarihle bitti, hadi en önemli şeye geçelim - tutarsızlık analizi. Joomla 3.6.3'ü kurduysam, tüm satır numaraları bu sürümle alakalı olacaktır. Ve dosyalara giden tüm yollar, sanki daha uzaktaymışsınız gibi, kurulu CMS'nin köküne göre gösterilir.

    Zavdyaki znahіdtsi Demis Palmi, iki yöntem olduğunu biliyoruz, sistemden yakі vykonuyut koristuvach kaydı. İlk CMS kazancı /components/com_users/controllers/registration.php:108 adresinde bulunur. Diğeri (tıklamamız gereken) /components/com_users/controllers/user.php:293 içinde yaşıyor. Yenisine daha yakından bakalım.

    286: /** 287: * Bir kullanıcıyı kaydetme yöntemi. 288: * 289: * @return boolean 290: * 291: * @1.6'dan beri 292: */ 293: public function register() 294: ( 295: JSession::checkToken("post") veya jexit(JText::_ ("JINVALID_TOKEN"));... 300: // data formunu alın.301: $data = $this->input->post->get("user", array(), "array"); . 315: $return = $model->validate($form, $data); 316: 317: // Hataları kontrol edin. / Kaydı tamamlayın 346: $return = $model->register($data);

    Burada ağustosböceklerinin sıralarını doldurdum. Çakışan yöntemin en son sürümünü Joomla deposundan kontrol edebilirsiniz.

    Bir coristuvach'ın ilk kaydı sırasında ne olduğunu anlayalım: veriler nasıl güçlendirilir ve koku nasıl kırılır. Ayarlarda kullanıcı kaydı etkinleştirilmişse, form http://joomla.local/index.php/component/users/?view=registration adresinde bulunabilir.


    Bir koristuvach kaydı için meşru talep, saldırgan bir ekran görüntüsü gibi görünüyordu.


    Koristuvachami ile çalışmak için com_users bileşeni eklenir. İsteğin görev parametresine saygı gösterin. Vіn $controller.$metodunu biçimlendirebilir. Dosya yapısına bir göz atalım.

    Papa komut dosyası adları kontrolörlerçağrılan denetleyicilerin adlarını verin. Böylece talebimiz bir kerede $controller = "registration" olarak dosya çağrılacak kayıt.php ve bu register() yöntemidir.

    Saygı, yemek: Kayıt formunu kodda farklı bir yere nasıl aktarabilirim? Ty, tek tek tahmin ediyor. Çakışan ve gerçek yöntemlerin adları zbіgayutsya'dır (kayıt), bu nedenle çağrılan denetleyicinin adını değiştirmemiz gerekir. Ve tutarsız bir denetleyiciyi nereden biliyoruz? Bu doğru, dosya kullanıcı.php. $controller = "user" çıkın. Her şeyi bir kerede seçiyoruz ve task=user.register alıyoruz. Şimdi kayıt talebi, ihtiyacımız olan yöntemle işlenecek.


    Öte yandan, yapmamız gereken verileri doğru formatta göndermek. Burada her şey basit. Meşru kayıt() bizim için kayıt için veri aktardığımız jform adlı bir diziyi kontrol eder - ad, oturum açma, şifre, posta (oturum açma ile div. ekran görüntüsü).

    • /components/com_users/controllers/registration.php: 124: // Kullanıcı verilerini alın. 125: $requestData = $bu->input->post->get("jform", dizi(), "dizi");

    Ek verilerimiz kullanıcı adları için diziden alınacaktır.

    • /components/com_users/controllers/user.php: 301: // Form verilerini alın. 302: $veri = $bu->input->post->get("kullanıcı", dizi(), "dizi");

    Bu nedenle, istekte jfrom olan tüm parametrelerin adlarını user olarak değiştiriyoruz.

    Üçüncü kroşemiz, yeni bir kayıt olmadan mümkün olmayacak olan geçerli bir CSRF jetonunun tanınmasıdır.

    • /components/com_users/controllers/user.php: 296: JSession::checkToken("post") veya jexit(JText::_("JINVALID_TOKEN"));

    Bir MD5 karmasına benziyor, ancak bunu örneğin /index.php/component/users/?view=login sitesindeki yetkilendirme formundan alabilirsiniz.


    Artık koristuvachiv oluşturabilirsiniz gerekli yöntem. Her şey yolunda gitmiş gibi, yemin ederim - çekişmeyi başarıyla kullandınız CVE-2016-8870"yeni coristuvach'ların tescili için izinlerin yeniden doğrulanması gününde".

    Eksen, UsersControllerRegistration denetleyicisinden gelen register() çalışan yönteminde yerinde görünmüyor:

    • /components/com_users/controllers/registration.php: 113: // Kayıt devre dışıysa - Oturum açma sayfasına yönlendirin. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) login", false)); 117: 118: false döndür; 119: )

    Ve böylece rahatsız edici olan için:

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

    Evet, hayır.

    Bir arkadaşı anlamak için, sorunu ciddiye alacağım, doğru oluşumları isteyeceğiz ve basitçe, sanki kodun farklı parsellerinde galip gelmişiz gibi. Coristuvach tarafından çalışma yöntemine verilen verilerin yeniden doğrulanmasına kefil olan shmatok ekseni:

    Sadece üyelere özel promosyon

    Seçenek 1. Sitedeki tüm materyalleri okumak için “siteye” gelin

    Belirlenen süredeki ortak girişime üyelik, özel memurun tasarruflarını artırmak için "Hacker"ın tüm malzemelerine erişmenizi sağlar. profesyonel derecelendirme Xakep Skoru!

    Standart wp-signup.php yerine multisite için yetkili bir kayıt sayfası oluşturuyoruz.

    Normal bir WordPress kurulumu için kayıt tarafı (yetkilendirme, şifre sıfırlama) wp-login.php dosyasını göstermelidir.

    • /wp-login.php - yetkilendirme
    • /wp-login.php?action=register - kayıt
    • /wp-login.php?action=lostpassword - Kayıp şifre

    Çoklu site için wp-login.php uygundur. Bu nedenle, WordPress çoklu sitesinde /wp-login.php?action=register'a gittiğinizde, /wp-signup.php tarafına yönlendirileceksiniz. Zengin konularda, taraf pek hoş görünmüyor, kontrol edebileceğim.

    merezhі'nın ana sitesi

    WordPress promosyonu için, işletmenin ana etki alanında (web sitesi) bir kayıt sayfası (wp-signup.php) oluşturursunuz. Prote, merezhi'nin cilt sitesi için bir kayıt sayfası oluşturabilirsin, böylece koku farklı olabilir. Aradaki farka bakarız, eğer Merezha'nın tüm sitelerinin kendi kişisel kayıt sayfası varsa, ancak aynı konu seçilmişse ve siteler artık benim değil. Kural olarak farklı konular var, daha fazla kod yazmak gerekiyor.

    fonksiyonlar.php?

    Ni. Im'ya dosyası, zdaєtsya, zgaduєtsya, WordPress hakkında bilgi verir. Bize göre, sitelerin bir baharatına sigorta kaydetme işlevselliğinin gelişmesiyle birlikte, bir site söz konusu olduğunda büyülenecekleri için MU eklentilerinde yogayı suçlamanın bir anlamı var.

    şarkı sözü girişi

    Warto, MU-eklentilerinin ikincil eklentiler için daha erken ve WordPress çekirdeği tamamen işgal edilmeden önce kullanıldığını belirtir, bu da PHP için ölümcül aflara yol açabilir. Benzer "erken" zavantazhennya'nın artıları olabilir. Diyelim ki, bunlar gibi olmanın ortasında, bazı eylemlere gidemiyorsunuz, bu yüzden function.php dosyasını bunlarla kaçırmayı deneyebilirsiniz. Bunun bir örneği, Jetpack'teki modüllerin etkinliğini kontrol edebileceğiniz yardım için jetpack_module_loaded_ Related-posts (ilgili gönderiler - modülün adı) biçimindeki Jetpack eklentisinden eylemler olabilir. Bu eylemden önce, eylemin zaten meşgul olduğu dosyalara "eklemek" imkansızdır - eklentiler daha önce işgal edilir. Kodun Eylem Referansı tarafında WordPress katılım siparişinin büyük resmine bakabilirsiniz.

    Dosya sırası

    MU eklentileri, size mantıklı göründüğü gibi, aynı yapıdaki herhangi bir sayıda dosyayı değiştirebilir. Yaklaşık olarak aşağıdaki hiyerarşiyi bitireceğim:

    |-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-kayıt |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    load.php dosyası, önlemimiz için gerekli tüm eklentileri içerir:

    // Tüm eklentiler için Çevirileri Yükle load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Ağ Kaydı WPMU_PLUGIN_DIR gerektirir. "/selena-network/signup/plugin.php"; // Diğer eklentiler // WPMU_PLUGIN_DIR gerektirir ...

    Selena-network klasörünün ortasında, eklenti klasörleri kaydedilir, kaplamanın kendi plugin.php dosyası vardır, bu yüzden onu load.php içine dahil ederiz. Bu, mozhlivіst shvidko vіdklyuchati olduğunu ve deakі konuşmasını içerdiğini gnuchkіst ver.

    Kayıt taraf adresleri

    Kayıt sayfasının adresini belirtmek için wp_signup_location filtresi seçilir. Bunu wp-login.php dosyasının ortasında bulabilir ve wp-signup.php'nin kendisine yönlendirebilirsiniz.

    Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))));

    Kayıt tarafının adresini akış sitesine girebilmeniz için işlevinizi mu-plugins/selena-network/signup/plugin.php dosyasına ekleyin:

    fonksiyon selena_network_signup_page ($url) ( home_url'ye dön () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_network - sitemdeki MU eklentilerinin ortasındaki tüm işlevlerin adlarında gizli anlaşmayı önlemek için kullandığım ve ardından kendi benzersiz önekinizle değiştirdiğim bir önek. Bir filtre eklemenin önceliği 99'dur, çünkü bbPress ve BuddyPress gibi diğer eklentiler bu adresi kendi kontrollerine yeniden yazabilir (MU-eklentileri daha önce alınır, daha düşük ad eklentileri ve daha fazlası). Aynı etki alanını kontrol etmemeniz için network_site_url() yerine home_url() öğesinin kazandığına saygı gösterin. Adres gibi, onu da URL'ye çevirebilirsiniz.

    yan kat

    Şimdi özel bir arayüz üzerinden site.com/signup/ adresiyle bir taraf oluşturalım ve ebeveynin çocuğunun bizimki için bir şablonu var. yeni taraf- sayfa-signup.php. Kayıt kelimesini benzersiz bir kimlikle değiştirebilirsiniz.

    Yeni şablonun içine, kayıt formunu görüntülemek için selena_network_signup_main() işlevini eklemeniz gerekir.

    Lütfen şablonlarla tüm sürecin dile bağlı olmadığını ve bunun yerine selena_network_signup_main() işlevini de çağıran kendi kısa kodunuzu oluşturabileceğinizi unutmayın.

    wp-signup.php ve wp-activate.php

    Şimdi bir kayıt formu oluşturuyormuşuz gibi fonksiyonların oluşturulmasına bir göz atalım. wp-signup.php ve wp-activate.php dosyalarını mu-plugings/selena-network/signup/ adresindeki WordPress kökünden kopyalayın (ve bunları mu-plugins/selena-network'ün ortasına eklemeyi unutmayın) /signup/plugin.php) . Dosyalarla daha fazla manipülasyon daha da tutarlıdır ve uzun süre açıklanabilir; Sadece kendim üzerinde çalışmam gerekenleri anlatacağım ve projemin harici dosyalarını yayınlayacağım:

    1. Dosyanın üst kısmında, tüm gereksinim, hızlı tıklama işlevleri ve işlevlerin arkasındaki diğer kodlara bakın.
    2. Adlara benzersiz önekler ekleyerek tüm işlevleri yeniden adlandırın.
    3. wp-signup.php kodunun alt kısmını selena_network_signup_main işlevine sarın ve koçana global $active_signup yazın; .
    4. Gerekli alanlarda düzeni vlasnu olarak değiştirin.

    wp-activate.php içinde, yaklaşık olarak aynısını eklemeniz gerekir:

    1. Tüm kodu işlevlerle görüntüleyin, düzeni diğer işlevin etrafına sarın.
    2. Gerekli olan alanlarda düzeni değiştirin.

    wp-activate.php dosyası, eğik kaydın aktivasyon tarafı için düşünülür. Üçüncü bir kayıt tarafı olarak, bunun için özel bir şablon oluşturmanız gerekir, wp-activate.php dosyasındaki aynı çağrı işlevini kullanın.

    Nadsilaemo yaprak aktivasyonu

    Kayıt ofisi, oblikovy kaydının etkinleştirilmesi talebiyle birlikte sayfanın alınmasını zorlar. ms-functions.php dosyasındaki wpmu_signup_user_notification() işlevi, cym zapping ile ilgilenir. Її işlevi, kendi işleviniz için atanabilir. Bunun nedeni, işlevi değiştirmek için gerekli olan yol, wp-activate.php'den eğik kaydın aktivasyonunu kontrol etmesidir. Bu işlevi "kapat", zaten yanlış olan ek wpmu_signup_user_notification filtresini kullanabilirsiniz (bu yüzden kapatmayın, etkinleştirme sayfası iki, tamam, gerçekten iki farklı sayfa düzenlenecektir).

    İşlev Armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // wpmu_signup_user_notification() işlev kodu wp_mail($user_email, wp_specialchars_decode($subject), ; return false; ) add_filter ("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Sonuç olarak, Selena konularındaki kayıt sayfası daha zengin ve düzenli görünmeye başladı.

    Visnovok

    İnternette, bunu kendiniz yapmanın pek de doğru olmayan başka bir yolu yoktur - Apache yönlendirmeleri, AJAX formları, bunlar olmadan uygulanamaz JavaScript vb. Her şey bana layık değildi, bu yüzden otorite sitesinde mümkün olduğunca doğru yapmaya çalıştım.

    Dosyaları dikkatli bir şekilde düzenlemenize ve tatillerde çok fazla ortalığı karıştırmamanıza saygı duyacağım, bu nedenle gelecekte, WordPress gibi wp-signup.php ve wp-activate.php dosyalarını değiştirmek, icabına bakmak daha kolay Kendinizi bir değişiklik için

    hayret etmeyi unutmayın çıkış kodu Diğer işlevlerin tüm açıklamaları daha sonra tartışılacaktır, bu şekilde kodun ortasında görünür.

    Bonus. Spam gönderenlere karşı savunucu

    WordPress'teki en iyi siteleri bulun, genellikle çok sayıda spam kaydı alır. Filtreleme botları için, genellikle oluşturmaya çalışmaktan daha çok benzeyen sayısız kelime yazabilirsiniz. parça zeka🙂 Çoklu site zamanında, /wp-signup.php ve /wp-acitvate.php 404'ü görmek istediğimde böyle bir yönlendirmenin yardımı için Apache'ye özel bir yönlendirme de ekledim (uzman değilim) Apache'yi kurarken, kurallarım doğru olmayabilir).

    RewriteBase'de RewriteEngine / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Wordpress görünüm kurallarının kilitlenmesi gerekmez :) # ... # END WordPress

    PS Üçüncü şahıs konuşmalarının eylemlerini mümkün olduğunca ayrıntılı olarak açıklamaya çalışıyorum, başlasaydım, bir saat boyunca çok fazla konuşma anlatacak ve açıklayacak kimse yoktu. Bu nedenle, yeni bir şey geliştirmek ve bilginizi genişletmek için diğer malzemeler üzerindeki benzer şekilde küçük tümevarımların geliştirilebileceğine saygı duyuyorum. RewriteRule girişleri etiketlendi düzenli virüs, kokular katlanabilir değildir, örneğin sembol bir sıranın koçanını ifade eder.

    Farklı durumlarda tek seferlik bir talepte bulunulabilir: dosyaya her iki taraftan da geçici erişim sağlamak veya kaydı onaylamak için. Nedense size tek kullanımlık URL'lerin nasıl oluşturulacağını gösterebiliriz.

    URL oluşturma

    Diyelim ki web sitemizde bir kimlik doğrulama sistemimiz var. Kayıttan sonra, muhabirden elektronik postayı doğrulama prosedüründen geçmesini rica ederiz. Benzer mesajların oluşturulması için hızlandırabiliriz özel parametre jeton. Böyle bir istek örneği:

    http://example.com/activate?token=ee97780...

    Burada veri tabanı olmadan yapamayız, o yüzden nedense tabloya bakalım.

    CREATE TABLE bekleyen_kullanıcılar (belirteç CHAR(40) NULL DEĞİL, kullanıcı adı VARCHAR(45) NULL DEĞİL, tstamp INTEGER UNSIGNED NULL DEĞİL, BİRİNCİL ANAHTAR(belirteç));

    Tablonun 3 alanı vardır: jeton, o saat im'ya koristuvacha. Belirteç oluşturmak için sha1 () işlevini sanki 40 karakterlik bir satırmış gibi hızlandırırız. tstamp alanı, terimin geçmiş olup olmadığını kontrol edebilmemiz için belirteç oluşturma saatini kaydedecektir.

    Bir belirteç oluşturmanın kişisel olmayan yolları vardır, ancak bazı yönlerden uniqid () ve sha1 () işlevleri tarafından hızlandırılır. Belirteç oluşturma yönteminden bağımsız olarak, değişiklik, oluşturulan hangi değerlerin farklı olacağı ve kopyaların görünümü minimumdur.

    $token = sha1(uniqid($kullanıcı adı, doğru));

    Bir parametre olarak, uniqid() işlevi bir satır alır ve çıktıda iletilen argümana ve geçerli saate dayalı benzersiz bir tanımlayıcı verir. Bu nedenle, başka bir argüman olarak, değerin benzersizliğini artırmak için birkaç ekstra karakter eklemek için tek bir sinyal verecek şekilde bir boole değeri elde etmek için bir işlev verilir. sha1 işlevi benzersiz bir tanımlayıcı alır ve bir karma oluşturur.

    İki işlev olduğundan, en azından bir url adresi oluşturmak için kullanılabilecek benzersiz bir belirteç. Şimdi yogayı üsse getirmemiz gerekiyor:

    $query = $db->prepare("INSERT INTO bekleyen_users (kullanıcı adı, belirteç, tstamp) DEĞERLER (?, ?, ?)"); $query->execute(array($username, $token, $_SERVER["REQUEST_TIME"])));

    Böylece ne tür bir koristuvach'ın etkinleştirilmesi gerektiğini biliyorduk, tabloya koristuvach'ın girişini yazıyoruz. Gerçek bir siteye daha çok uyarlanmış bir uygulamada, koristuvach'ın kimliğini alabilirsiniz.

    Şimdi, gerekli tüm bilgilere sahip olabilirsek, bir timchas url adresi oluşturabiliriz:

    $url = "http://example.com/activate.php?token=$token";

    $mesaj =<<

    gözden geçirme

    Şimdi yeniden doğrulamaya ihtiyacımız olan bir komut dosyasına ihtiyacımız var. Büyümek için ihtiyacımız olan her şey, url adresinden belirteci ve tabandan belirteci almamız gerekiyor. Böyleyse ve yaşam saati geçmiyorsa, her şey yolunda demektir.

    // belirteci al if (isset($_GET["token"]) && preg_match("/^(40)$/i", $_GET["token"])) ( $token = $_GET["token" ] ; ) else ( throw new Exception("token is not valid."); ) // belirteci yeniden doğrulayın $query = $db->prepare("SEÇ kullanıcı adı, tstamp FROMpend_users WHERE belirteci = ?"); $sorgu->execute(dizi($token)); $satır = $sorgu->getir(PDO::FETCH_ASSOC); $query->closeCursor(); if ($satır) ( özüt($satır); ) else ( throw new Exception("belirteç geçerli değil."); ) // coristuvach hesabını etkinleştirme // ... // belirteci taban $'dan görüntüleme sorgu = $db- >prepare("pending_users FROM FROM kullanıcı adı = ? AND belirteç = ? AND tstamp = ?",); $query->execute(array($username, $token, $tstamp));

    Jetonların yeniden doğrulanmasını aktarmamız da gerekiyor, hayatlarının saati geçti.

    // Saniye cinsinden 1 gün = 60 saniye * 60 kez * 24 yıl $delta = 86400; // revalidation if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) ( throw new Exception("token'ın ömrü geçti."); ) // coristuvach gözlemlenebilir kaydı etkinleştiriliyor // ...

    Bu sırada iki revizyonumuz olacak: biri jetonun geçerliliği için, diğeri ise saniyenin saati için.

    pod çantası

    Bu yöntem sadece aktivasyon için durdurulamaz bulut kayıtları koristuvachіv ve diğer ihtiyaçlar için: örneğin, herhangi bir kaynak chi hizmetine bir kerelik saatlik erişim için.

    O zamana kadar, daha önce hiç görmediğiniz belirteçler gibi bir komut dosyası oluşturabilirsiniz. Danca komut dosyası, thоgo cron için zasosuvati dışında kendi başına çalıştırılabilir.