Ev Programlar PHP ve MySQL'de inanılmaz derecede basit bir kayıt sistemi oluşturuyoruz. PHP ve MySQL'de İnanılmaz Basit Bir Kayıt Sistemi Oluşturma PHP'de üye kaydından kaçınma

PHP ve MySQL'de inanılmaz derecede basit bir kayıt sistemi oluşturuyoruz. PHP ve MySQL'de İnanılmaz Basit Bir Kayıt Sistemi Oluşturma PHP'de üye kaydından kaçınma

Üyeliğe dayalı bir site oluşturmak ilk başta göz korkutucu bir görev gibi görünüyor. Bunu kendi başınıza yapmak istediyseniz ve PHP becerilerinizi kullanarak bunu nasıl bir araya getireceğinizi düşünmeye başladığınızda pes ettiyseniz, o zaman bu makale tam size göre. Şifreyle korunan güvenli bir üye alanına sahip, üyeliğe dayalı bir site oluşturmanın her aşamasında size yol göstereceğiz.

Tüm süreç iki büyük bölümden oluşur: kullanıcı kaydı ve kullanıcı kimlik doğrulaması. İlk bölümde kayıt formunun oluşturulmasını ve verilerin MySQL veritabanında saklanmasını ele alacağız. İkinci bölümde ise giriş formunu oluşturup, kullanıcıların güvenli alana giriş yapabilmesi için kullanacağız.

Kodu indirin

Kayıt/giriş sistemine ilişkin kaynak kodunun tamamını aşağıdaki bağlantıdan indirebilirsiniz:

Yapılandırma ve Yükleme
BeniOku dosyası ayrıntılı talimatlar içerir.

kaynak\include\membersite_config.php Dosyayı bir metin düzenleyicide açın ve yapılandırmayı güncelleyin. (Veritabanı girişi, web sitenizin adı, e-posta adresiniz vb.).

Dizin içeriğinin tamamını yükleyin. Formu göndererek Register.php dosyasını test edin.

Kayıt formu

Bir kullanıcı hesabı oluşturmak için kullanıcıdan minimum miktarda bilgi toplamamız gerekir. Adına, e-posta adresine ve istediği kullanıcı adı ve şifreye ihtiyacımız var. Elbette bu noktada daha fazla bilgi isteyebiliriz ancak uzun bir form her zaman tercih edilmeyen bir durumdur. O halde kendimizi sadece bu alanlarla sınırlayalım.

İşte kayıt formu:

Kayıt olmak

Yani isim, e-posta ve şifre için metin alanlarımız var. Daha iyi kullanılabilirlik için ifadesini kullandığımızı unutmayın.

Form doğrulama

Bu noktada bazı form doğrulama kodlarını uygulamaya koymak iyi bir fikirdir, böylece kullanıcı hesabını oluşturmak için gereken tüm verilere sahip olduğumuzdan emin oluruz. Adın, e-postanın ve şifrenin doldurulup doldurulmadığını ve e-postanın doğru formatta olup olmadığını kontrol etmemiz gerekiyor.

Form gönderiminin yönetilmesi

Şimdi gönderilen form verilerini işlememiz gerekiyor.

Sıra şu şekildedir (indirilen kaynaktaki fg_membersite.php dosyasına bakın):

function RegisterUser() ( if(!isset($_POST["gönderildi"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($ formvars); true değerini döndür; )

Öncelikle form gönderimini doğruluyoruz. Daha sonra form gönderim verilerini topluyor ve 'sterilize ediyoruz' (bunu her zaman e-posta göndermeden, veritabanına kaydetmeden vb. önce yapın). Form gönderimi daha sonra veritabanı tablosuna kaydedilir. Kullanıcıya onay isteyen bir e-posta göndeririz. Daha sonra yöneticiye bir kullanıcının kaydolduğunu bildiriyoruz.

Verileri veritabanına kaydetme

Artık tüm verileri topladığımıza göre, bunları veritabanına kaydetmemiz gerekiyor.
Form gönderimini veritabanına şu şekilde kaydediyoruz.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Veritabanı girişi başarısız oldu!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Bu e-posta zaten kayıtlı"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Bu KullanıcıAdı zaten kullanılıyor. Lütfen başka bir kullanıcı adı deneyin"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Veritabanına ekleme başarısız oldu!"); return false; ) return true; )

Membersite_config.php dosyasında Veritabanı oturum açma ayrıntılarını yapılandırdığınızı unutmayın. Çoğu durumda, veritabanı ana bilgisayarı olarak “localhost”u kullanabilirsiniz.
Giriş yaptıktan sonra tablonun var olduğundan emin oluyoruz.(Eğer yoksa script gerekli tabloyu oluşturacaktır).
Daha sonra kullanıcı adının ve e-postanın benzersiz olduğundan emin oluyoruz. Benzersiz değilse hatayı kullanıcıya geri döndürürüz.

Veritabanı tablo yapısı

Bu tablo yapısıdır. Fg_membersite.php dosyasındaki CreateTable() işlevi tabloyu oluşturur. İşte kod:

function CreateTable() ( $qry = "Tablo Oluştur $this->tabloadı (". "id_user INT NOT NULL AUTO_INCREMENT ," "name VARCHAR(128) NOT NULL ," "email VARCHAR(64) NOT NULL ," " "phone_number VARCHAR(16) NOT NULL ," "kullanıcı adı VARCHAR(16) NOT NULL ," "şifre VARCHAR(32) NOT NULL ," "confirmcode VARCHAR(32)" , "PRIMARY KEY (id_user)." ")"; if( !mysql_query($qry,$this->connection)) ( $this->HandleDBError("Tablo oluşturulurken hata oluştu \nquery\n $qry"); return false; ) return true; )

id_user alanı kullanıcının benzersiz kimliğini içerecektir ve aynı zamanda tablonun birincil anahtarıdır. Şifre alanı için 32 karaktere izin verdiğimize dikkat edin. Bunu yapıyoruz çünkü ek bir güvenlik önlemi olarak şifreyi MD5 kullanılarak şifrelenmiş olarak veritabanında saklayacağız. MD5 tek yönlü bir şifreleme yöntemi olduğundan, kullanıcının unutması durumunda şifreyi kurtaramayacağımızı lütfen unutmayın.

Kayıtların tabloya eklenmesi

Veritabanına veri eklemek için kullandığımız kod aşağıdadır. Tüm verilerimizi $formvars dizisinde bulunduracağız.

function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "insert into ".$this->tablename."(ad, e-posta, kullanıcı adı, şifre, onay kodu) değerler ("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["kullanıcı adı"]) . "", "" . md5($formvars["şifre"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Tabloya veri eklenirken hata\nquery:$insert_query"); return false; ) return true; )

Parolayı veritabanına eklemeden önce şifrelemek için PHP md5() işlevini kullandığımıza dikkat edin.
Ayrıca kullanıcının e-posta adresinden benzersiz onay kodunu oluşturuyoruz.

E-posta gönderme

Artık kayıt veritabanımızda olduğuna göre kullanıcıya bir onay e-postası göndereceğiz. Kullanıcının kayıt işlemini tamamlamak için onay e-postasındaki bir bağlantıya tıklaması gerekir.

function SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "".$this->sitename ile kaydınız; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email") ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Merhaba ".$formvars["name"]."\r\ n\r\n". "".$this->sitename." ile kaydınız için teşekkür ederiz.\r\n". "Kaydınızı onaylamak için lütfen aşağıdaki bağlantıya tıklayın.\r\n." "$confirm_url\r \n". "\r\n". "Saygılarımızla,\r\n". "Web Yöneticisi\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Kayıt onayı e-postası gönderilemedi."); return false; ) return true; )

Güncellemeler

9 Ocak 2012
Şifreyi Sıfırla/Şifreyi Değiştir özellikleri eklendi
Kod artık GitHub'da paylaşılıyor.

tekrar hoşgeldinizKullanıcıTamAdı(); ?>!

Lisans


Kod LGPL lisansı altında paylaşılmaktadır. Ticari veya ticari olmayan web sitelerinde serbestçe kullanabilirsiniz.

Alakalı Gönderi Yok.

Bu girdiye ilişkin yorumlar kapalı.

Geçtiğimiz birkaç yılda web hosting dramatik bir değişime uğradı. Web barındırma hizmetleri web sitelerinin performans şeklini değiştirdi. Çeşitli hizmet türleri vardır ancak bugün bayi barındırma sağlayıcıları için mevcut olan seçeneklerden bahsedeceğiz. Bunlar Linux Bayi Barındırma ve Windows Bayi Barındırmadır. İkisi arasındaki temel farkları anlamadan önce bayi hostingin ne olduğunu öğrenelim.

Bayi Barındırma

Basit bir ifadeyle, bayi barındırma, bir hesap sahibinin, üçüncü tarafların web sitelerine satış yapmak amacıyla ayrılmış sabit disk alanını ve tahsis edilen bant genişliğini kullanabileceği bir web barındırma biçimidir. Bazen bir satıcı, bir barındırma şirketinden (Linux veya Windows) özel bir sunucuyu kiralayıp üçüncü taraflara kiralayabilir.

Çoğu web sitesi kullanıcısı ya Linux ya da Windows kullanıyor. Bunun çalışma süresiyle ilgisi var. Her iki platform da web sitenizin %99 oranında yükselişte olmasını sağlar.

1. Özelleştirme

Linux Bayi Hosting Planı ile Windows tarafından sağlanan Hosting planı arasındaki temel farklardan biri özelleştirme ile ilgilidir. Her iki oynatıcıyı da çeşitli şekillerde deneyebilseniz de Linux, Windows'tan çok daha özelleştirilebilir. İkincisi, muadillerinden daha fazla özelliğe sahiptir ve bu nedenle birçok geliştirici ve yönetici Linux'u çok müşteri dostu bulmaktadır.

2. Başvurular

Farklı bayi barındırma hizmetlerinin farklı uygulamaları vardır. Linux ve Windows'un her ikisinin de kendi uygulama yelpazesi vardır, ancak sayı ve çok yönlülük söz konusu olduğunda Windows'un bir avantajı vardır. Bunun Linux'un açık kaynak doğasıyla ilgisi var. Herhangi bir geliştirici, uygulamasını Linux platformuna yükleyebilir ve bu, onu milyonlarca web sitesi sahibi için çekici bir barındırma sağlayıcısı haline getirir.

Ancak, web barındırma için Linux kullanıyorsanız ve aynı zamanda Windows işletim sistemini de kullanıyorsanız, bazı uygulamaların çalışmayabileceğini lütfen unutmayın.

3. Kararlılık

Her iki platform da kararlı olsa da Linux Bayi Barındırma ikisinden daha kararlıdır. Açık kaynaklı bir platform olduğundan birçok ortamda çalışabilir. Bu platform ara sıra değiştirilebilir ve geliştirilebilir.

4. .NET uyumluluğu

Linux'un Windows'tan her bakımdan üstün olduğu söylenemez. .NET uyumluluğu söz konusu olduğunda Windows dikkatleri üzerine çekiyor. Web uygulamaları Windows barındırma platformunda kolaylıkla geliştirilebilir.

5. Maliyet avantajları

Her iki barındırma platformu da uygun fiyatlıdır. Ancak nakit sıkıntısı çekiyorsanız Linux'u tercih etmelisiniz. Ücretsizdir ve bu nedenle dünya çapında pek çok geliştirici ve sistem yöneticisi tarafından tercih edilmektedir.

6. Kurulum kolaylığı

Windows'un kurulumu muadillerine göre daha kolaydır. Söylenen ve yapılan her şeye rağmen Windows, tüm bu yıllar boyunca kullanıcı dostu özelliğini hala koruyor.

7.Güvenlik

Windows'tan daha güvenli olduğu için Linux bayi barındırmayı tercih edin. Bu, özellikle E-ticaret işlerini yürüten kişiler için geçerlidir.

Çözüm

İkisi arasında seçim yapmakihtiyacınıza ve maliyet esnekliğine bağlı olacaktır. Her iki barındırma hizmetinin de benzersiz avantajları vardır. Windows'un kurulumu kolay olsa da Linux uygun maliyetli, güvenli ve çok yönlüdür.



Bu yılın Mart ayında, bir medya şirketinin bana ödeme yapmayı ve e-postalarıma cevap vermeyi reddetmesiyle çok kötü bir deneyim yaşadım. Bana hâlâ binlerce dolar borçlular ve içimdeki öfke duygusu her gün nüfuz ediyor. Görünen o ki yalnız değilim ve diğer yüzlerce web sitesi sahibi de aynı durumda. Dijital reklamcılıkla aynı seviyede.

Dürüst olmak gerekirse, bu blogu uzun süredir kullanıyorum ve geçmişte farklı reklam ağlarında gezindim. Beni engelleyen o şirketin reklam birimlerini kaldırdıktan sonra eski halime geri döndüm. Şunu da belirtmeliyim ki Google'ın AdSense ürününü hiçbir zaman pek sevmedim, çünkü görüntülü reklamların "varilinin dibi" gibi geliyor, kalite açısından değil, gelir açısından.

Anladığım kadarıyla sitenizde Google reklamlarının olmasını istiyorsunuz ama aynı zamanda diğer büyük şirketlerin ve ajansların da bunu yapmasını istiyorsunuz. Bu şekilde talebi ve geliri en üst düzeye çıkarırsınız.

Olumsuz deneyimimden sonra Newor Media adında bir şirketi tavsiye etmem gerekti. Ve dürüst olmak gerekirse, ilk başta satılmadım çünkü onlar hakkında fazla bilgi bulamadım. Diğer sitelerde birkaç iyi inceleme buldum ve orada biriyle konuştuktan sonra denemeye karar verdim. .SÜPER yararlı olduklarını söyleyeceğim. Şu ana kadar çalıştığım her ağ, yanıtlar ve ilerleme açısından bana oldukça kısa davrandı. Her soruyu yanıtladılar ve bu gerçekten cesaret verici bir süreçti.

Birkaç aydır reklamları yayınlıyorum ve kazancım diğer şirkette kazandığımla hemen hemen aynı seviyede. Bu yüzden diğerlerinden çok daha iyi olup olmadıklarını gerçekten söyleyemem ama nerede öne çıkıyorlar bu gerçekten vurgulamak istediğim bir nokta. Onlarla olan iletişim, şimdiye kadar çalıştığım hiçbir ağa benzemiyor. İşte onların gerçekten farklı olduğu bir durum:

Paypal ile ilk ödemeyi zamanında bana ilettiler. Ancak ABD'de olmadığım için (ve sanırım bu herkes için geçerli) Paypal'dan bir ücret kestim. Temsilcime bu konuda e-posta gönderdim ve gelecekte bundan kaçınmanın bir yolu olup olmadığını sordum.

Ücretten kaçamayacaklarını söylediler. ama TÜM ÜCRETLERİ GERİ ÖDEMEYECEKLERİNİ.... EN SON ÖDEME DAHİL! Sadece bu da değil, geri ödeme ödemesi 10 DAKİKA içinde alındı! Ne zaman "finans departmanına" iletilmeden böyle bir talepte bulunabildiniz ve asla yanıt alamadınız?

Sonuç olarak bu şirketi seviyorum. Başka bir yerde daha fazlasını kazanabilirim, pek emin değilim ama ömür boyu benimle birlikte olacak bir yayıncıları var. Çok büyük bir site değilim ve çok fazla gelir elde etmiyorum, ama kendimi bir Onlarla konuştuğumda çok önemli bir müşteriyim. Dolandırıcılık ve yanıt vermemeyle olgunlaşmış bir sektöre gerçekten yeni bir soluk geliyor.

Raspberry Pi Vakfı tarafından 2012 yılında oluşturulan mikro bilgisayarlar, küçük çocuklarda yaratıcılık düzeylerini harekete geçirmede oldukça başarılı oldu ve İngiltere merkezli bu şirket, pi-top ve Kano gibi kodlamayı öğrenme başlangıç ​​programları sunmaya başladı. Artık Pi elektroniklerini kullanan yeni bir girişim var ve cihaz, dokunmatik ekran, çoklu bağlantı noktaları, kontrol düğmeleri ve hoparlörler sunan el tipi bir konsol olan Pip olarak biliniyor. Cihazın arkasındaki fikir, genç bireylerin retro tarzdaki ama aynı zamanda web tabanlı bir platform aracılığıyla kod öğrenme deneyimi sunacak bir oyun cihazıyla etkileşime geçmesini sağlamaktır.

Pip'in sunduğu muhteşem yazılım platformu Python, HTML/CSS, JavaScript, Lua ve PHP'de kodlamaya başlama şansı sunacak. Cihaz, çocukların kodlamaya başlaması için adım adım eğitimler sunuyor ve hatta LED'lerin yanıp sönmesini bile sağlıyor. Pip hâlâ bir prototip olsa da, kesinlikle sektörde büyük bir hit olacak ve kodlamaya ilgi duyan çocukların ilgisini çekecek ve onlara genç yaşta kodlamaya başlamaları için gereken eğitim ve kaynakları sağlayacak.

Kodlamanın Geleceği

Kodlamanın harika bir geleceği var ve çocuklar kodlamayı bir kariyer olarak kullanmayacak olsalar bile, kodlamayı her zamankinden daha kolay hale getiren bu yeni cihazla kodlamayı öğrenmenin faydalarından yararlanabilirler. Pip ile en genç kodlama meraklıları bile farklı diller öğrenecek ve kendi kodlarını, kendi oyunlarını, kendi uygulamalarını ve daha fazlasını oluşturma yolunda ilerleyecek. Bu, elektronik çağın geleceğidir ve Pip, kodlamanın temel yapı taşlarında uzmanlaşmaya olanak sağlar.
Bilgisayar bilimi eğitimin önemli bir parçası haline geldi ve yeni Pip gibi cihazlarla çocuklar evde eğlenirken eğitimlerini geliştirmeye başlayabilirler. Kodlama, web siteleri veya yazılım oluşturmanın çok ötesine geçer. Bir şehirde güvenliği artırmak, tıp alanındaki araştırmalara yardımcı olmak ve çok daha fazlası için kullanılabilir. Artık yazılımın egemen olduğu bir dünyada yaşadığımız için kodlama geleceğidir ve bu becerileri kariyer olarak hiç kullanmasalar bile tüm çocukların en azından kodlamanın nasıl çalıştığına dair temel bir anlayışa sahip olmaları önemlidir. Gelecek açısından kodlama günlük yaşamın kritik bir bileşeni olacak. Bu dünyanın dili olacak ve bilgisayarları veya nasıl çalıştıklarını bilmemek, üstesinden gelinmesi cehalet kadar zor olan zorluklara yol açabilir.
Kodlama aynı zamanda oyun dünyasında, özellikle çevrimiçi kumarhanelere erişim de dahil olmak üzere çevrimiçi oyun söz konusu olduğunda büyük değişiklikler sağlayacaktır. Kodlamanın oyun dünyasını nasıl geliştirdiğini görmek için kodlamaya dayanan en yüksek puan alan birkaç casino sitesine göz atın. Hızlıca bir göz atın ve kodlamanın çevrimiçi ortamda gerçekçi ortamları nasıl sunabileceğini görün.

Pip Çocuklarla Nasıl Etkileşime Geçer?

Kodlamayı öğrenme fırsatı söz konusu olduğunda çocukların birçok seçeneği vardır. Satın alınabilecek çok sayıda cihaz ve donanım var, ancak Pip bu cihazlarla farklı bir yaklaşım benimsiyor. Cihazın taşınabilirliği ve dokunmatik ekranı, piyasadaki diğer kodlama cihazlarına göre avantaj sağlıyor. Pip, Raspberry Pi HAT sisteminin yanı sıra elektronik bileşenlerle de tam uyumlu olacak. Cihaz standart dilleri kullanır ve temel araçlara sahiptir ve yeni başlayan kodlayıcılar için mükemmel bir cihazdır. Amaç, fikir ile yaratım arasındaki engelleri kaldırmak ve araçları hemen kullanıma hazır hale getirmektir. Pip'in diğer büyük avantajlarından biri de SD kart kullanmasıdır, bu sayede monitör ve fareye bağlandığında masaüstü bilgisayar olarak da kullanılabilir.
Pip cihazı, çocuklara ve ilgilenen acemi kodlayıcılara, kodlamayı öğrenme ve pratik yapma konusunda yardımcı olacaktır. Sorunları çözmek için görev tamamlama ve düzeltmelerin bir kombinasyonunu sunan cihaz, kesinlikle genç neslin ilgisini çekecek. Cihaz daha sonra bu genç kodlayıcıların JavaScript ve HTML/CSS gibi farklı dillerde daha ileri düzeyde kodlamaya geçmelerine olanak tanır. Cihaz bir oyun konsolunu taklit ettiğinden çocukların dikkatini hemen çekecek ve onları küçük yaşta kodlamayla tanıştıracak. Ayrıca Pac-Man ve Minecraft gibi dikkati korumak için önceden yüklenmiş bazı oyunlarla birlikte gelir.

Gelecek Yenilikler

Gelecekteki yenilikler büyük ölçüde çocuğun mevcut kodlama becerisine ve süreci genel olarak anlamasına bağlıdır. Çocuklar, yeni Pip gibi cihazları kullanarak erken yaşta kodlamayı öğrendikçe, gelecekte harika şeyler yaratacak bilgi ve becerileri kazanacaklar. Bu, yeni oyunların, uygulamaların ve hatta tıbbi araştırma ve tedavilere yardımcı olmak üzere hayata geçirilebilecek fikirlerin tanıtımı olabilir. Sonsuz olasılıklar var. Geleceğimiz yazılım ve bilgisayarlar tarafından kontrol edileceğinden, genç yaşta başlamak en iyi yoldur, bu nedenle yeni Pip genç kalabalığa yöneliktir. Kodlama becerilerini öğretirken aynı zamanda oyun oynayabilecekleri bir konsol cihazı sunarak toplumun genç üyeleri, gelecekte tüm hayatlarımızı değiştirecek yazılımların yaratıcıları olma yolunda ilerliyor. Bu sadece bir başlangıç ​​ama dünyanın her yerindeki milyonlarca çocuğun öğrenmeye ve ustalaşmaya başladığı bir şey. Pip gibi cihazların kullanımıyla kodlamanın temelleri anlatılıyor ve çocuklar, yetişkinliğe girerken harika yollara gidebilecek farklı kodlama dillerini hızla öğrenecekler.

Yeni başlayanlar için bir eğitim! İnternette nereye giderseniz gidin, hemen hemen her yerde bulabileceğiniz bir temel şey vardır: kullanıcı kaydı. Kullanıcılarınızın ister güvenlik için ister yalnızca ek bir özellik için kaydolmasına ihtiyacınız olsun, bunu bu basit eğitimle yapmamak için hiçbir neden yok Bu eğitimde kullanıcı yönetiminin temellerini gözden geçireceğiz ve sonunda kendi web sitenize uygulayabileceğiniz basit bir Üye Alanı oluşturacağız.

Ekstra yardıma ihtiyacınız varsa veya bir kısayol istiyorsanız Envato Studio'daki PHP servis sağlayıcı çeşitlerine göz atın. Bu deneyimli geliştiriciler, hızlı bir hata düzeltmesinden tüm uygulamayı sıfırdan geliştirmeye kadar her konuda size yardımcı olabilir. Bu yüzden sadece sağlayıcılara göz atın, yorumları ve derecelendirmeleri okuyun ve sizin için doğru olanı seçin.

giriiş

Bu eğitimde, kullanıcılar arası özel mesajlaşma sistemiyle birlikte kullanıcı yönetim sistemi oluşturmanın her adımını inceleyeceğiz. Bunu, tüm kullanıcı bilgilerini depolamak için bir MySQL veritabanıyla PHP kullanarak yapacağız. Bu eğitim PHP'ye tamamen yeni başlayanlara yöneliktir, bu nedenle hiçbir ön bilgiye gerek yoktur - aslında deneyimli bir PHP kullanıcısıysanız biraz sıkılabilirsiniz!

Bu eğitimin amacı Oturumlara ve PHP'de Veritabanlarının kullanımına temel bir giriş yapmaktır. Her ne kadar bu eğitimin nihai sonucu size hemen yararlı görünmese de, bu eğitimden kazanacağınız beceriler, kendi üyelik sisteminizi oluşturmanıza olanak tanıyacaktır; kendi ihtiyaçlarınıza uygun.

Bu eğitime başlamadan önce aşağıdaki bilgilerin elinizde olduğundan emin olun:

  • Veritabanı Ana Bilgisayar Adı- bu, veritabanınızın barındırıldığı sunucudur; çoğu durumda bu yalnızca "localhost" olacaktır.
  • Veritabanı Adı, Veritabanı Kullanıcı Adı, Veritabanı Şifresi- Bu eğitime başlamadan önce, eğer yeteneğiniz varsa veya mevcut bir veritabanına bağlanmak için gerekli bilgiye sahipseniz, bir MySQL veritabanı oluşturmalısınız. Bu bilgiye eğitim boyunca ihtiyaç duyulacaktır.

Bu bilgiye sahip değilseniz barındırma sağlayıcınız bunu size sağlayabilmelidir.

Artık formaliteleri aradan çıkardığımıza göre, eğitime başlayalım!

Adım 1 - İlk Yapılandırma

Veritabanını ayarlama

Giriş bölümünde belirtildiği gibi, eğitimin bu noktasından sonra devam etmek için bir veritabanına ihtiyacınız vardır. Başlangıç ​​olarak bu veritabanında kullanıcı bilgilerimizi saklayacak bir tablo oluşturacağız.

İhtiyacımız olan tablo kullanıcı bilgilerimizi saklayacak; amaçlarımız doğrultusunda basit bir tablo kullanacağız, ancak ihtiyacınız varsa ekstra sütunlarda daha fazla bilgi depolamak kolay olacaktır. Sistemimizde aşağıdaki dört sütuna ihtiyacımız var:

  • Kullanıcı kimliği (Birincil anahtar)
  • Kullanıcı adı
  • Şifre
  • E-postaAdresi

Veritabanı açısından, bir Birincil anahtar satırı benzersiz şekilde tanımlayan alandır. Bu durumda UserID bizim Birincil Anahtarımız olacaktır. Bunun bir kullanıcı her kaydolduğunda artmasını istediğimizden, özel MySQL seçeneğini - auto_increment kullanacağız.

Tablomuzu oluşturmak için gereken SQL sorgusu aşağıda yer almaktadır ve genellikle phpMyAdmin'in "SQL" sekmesinde çalıştırılacaktır.

CREATE TABLE `users' (`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY, `Kullanıcı adı` VARCHAR(65) NOT NULL, `Password` VARCHAR(32) NOT NULL, `EmailAddress` VARCHAR(255) NOT NULL);

Temel Dosya Oluşturma

Projemizin oluşturulmasını kolaylaştırmak için oluşturduğumuz her dosyaya dahil edebileceğimiz bir temel dosya oluşturacağız. Bu dosya, yol boyunca bize yardımcı olacak belirli yapılandırma değişkenleriyle birlikte veritabanı bağlantı bilgilerini içerecektir.

Yeni bir dosya oluşturarak başlayın: base.php ve dosyaya aşağıdaki kodu girin:

Bu satırlardan birkaçına bir göz atalım mı? Burada kullandığımız ve henüz açıklamadığımız birkaç fonksiyon var, o yüzden hızlıca onlara bir göz atalım ve onları anlamlandıralım. PHP'nin temellerini zaten anlıyorsanız bu açıklamayı atlamak isteyebilirsiniz.

Oturum_başlangıcı();

Bu işlev yeni kullanıcı için bir oturum başlatır ve bu eğitimin ilerleyen kısımlarında, halihazırda oturum açmış olan kullanıcıları tanımamıza olanak sağlamak için bilgileri bu oturumda saklayacağız. Zaten bir oturum oluşturulmuşsa, bu işlev bunu tanıyacak ve bu oturumu bir sonraki sayfaya taşıyacaktır.

Mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Hatası: " . mysql_error()); mysql_select_db($dbname) veya die("MySQL Hatası: " . mysql_error());

Bu işlevlerin her biri ayrı fakat bağlantılı bir görevi yerine getirir. mysql_connect fonksiyonu yukarıda verdiğimiz bilgileri kullanarak scriptimizi veritabanı sunucusuna bağlar ve mysql_select_db fonksiyonu daha sonra script ile hangi veritabanının kullanılacağını seçer. İşlevlerden herhangi biri tamamlanmazsa, kalıp işlevi otomatik olarak devreye girecek ve betiğin işlenmesini durduracak; tüm kullanıcılara MySQL Hatası olduğu mesajını bırakacaktır.

Adım 2 - Ön Uca Geri Dönün

İlk Olarak Ne Yapmamız Gerekiyor?

Sayfamızdaki en önemli öğe PHP'nin ilk satırıdır; bu satır yukarıda oluşturduğumuz dosyayı (base.php) içerecek ve esasen mevcut dosyamızdaki o dosyadaki her şeye erişmemize izin verecek. Bunu aşağıdaki PHP kod satırıyla yapacağız. index.php adında bir dosya oluşturun ve bu kodu en üste yerleştirin.

HTML Sayfasına Başlayın

Ön uçumuz için yapacağımız ilk şey, kullanıcıların oturum açmak için ayrıntılarını girebilecekleri veya zaten bir sayfada oturum açmışlarsa, daha sonra ne yapmak istediklerini seçebilecekleri bir sayfa oluşturmaktır. Bu derste kullanıcıların HTML/CSS'nin nasıl çalıştığına dair temel bilgiye sahip olduklarını varsayıyorum ve bu nedenle bu kodu ayrıntılı olarak açıklamayacağım; şu anda bu öğelerin stili kaldırılacak, ancak bunu daha sonra CSS stil sayfamızı oluşturduğumuzda değiştirebileceğiz.

Az önce oluşturduğumuz dosyayı (index.php) kullanarak, daha önce oluşturduğumuz PHP satırının altına aşağıdaki HTML kodunu girin.

Onlara Ne Göstereceğiz?

Sayfanın geri kalanını yayınlamadan önce kendimize sormamız gereken birkaç soru var:

  1. Kullanıcı zaten oturum açmış mı?
  • Evet- onlara seçebilecekleri seçeneklerin olduğu bir sayfa göstermemiz gerekiyor.
  • HAYIR
  • Kullanıcı giriş bilgilerini zaten gönderdi mi?
    • Evet- ayrıntılarını kontrol etmemiz gerekiyor ve doğruysa siteye giriş yapacağız.
    • HAYIR- bir sonraki soruya geçiyoruz.
  • Yukarıdakilerin her ikisi de yanıtlandıysa HAYIR Artık kullanıcıya bir giriş formu görüntülememiz gerektiğini varsayalım.
  • Bu sorular aslında PHP kodumuza uygulayacağımız soruların aynısıdır. Bunu if ifadeleri şeklinde yapacağız. Yeni dosyalarınızın hiçbirine hiçbir şey girmeden önce kullanacağımız mantığa bir göz atalım.

    Kafa karıştırıcı görünüyor değil mi? Bunu daha küçük bölümlere ayırıp tek tek üzerinden geçelim.

    If(!empty($_SESSION["LoggedIn"]) && !empty($_SESSION["Kullanıcı adı"])) ( // kullanıcının ana sayfaya erişmesine izin ver )

    Bir kullanıcı web sitemize giriş yaptığında, bilgilerini bir oturumda saklayacağız - bundan sonra herhangi bir noktada bu bilgiye özel bir global PHP dizisinde - $_SESSION - erişebiliriz. Değişkenin boş olup olmadığını kontrol etmek için empty fonksiyonunu kullanıyoruz! onun önünde. Bu nedenle şunu söylüyoruz:

    $_SESSION["LoggedIn"] değişkeni boş değilse ve $_SESSION["Kullanıcı adı"] değişkeni boş değilse, bu kod parçasını yürütün.

    Sonraki satır da aynı şekilde çalışır, yalnızca bu sefer $_POST genel dizisini kullanır. Bu dizi, bu eğitimin ilerleyen kısımlarında oluşturacağımız oturum açma formundan gönderilen tüm verileri içerir. Son satır yalnızca önceki ifadelerin hiçbiri karşılanmadığında yürütülür; bu durumda kullanıcıya bir giriş formu göstereceğiz.

    Artık mantığı anladığımıza göre, bu bölümlerin arasına biraz içerik girelim. index.php dosyanızda, aşağıdakileri aşağıya girin.

    üye alanı

    ve e-posta adresiniz .

    Başarı"; Eko "

    Şimdi sizi üye alanına yönlendiriyoruz.

    "; Eko " "; ) else ( echo "

    Hata

    "; Eko "

    Üzgünüz, hesabınız bulunamadı. Lütfen tekrar denemek için burayı tıklayın.

    "; )) başka ( ?>

    Üye Girişi

    Ziyaret ettiğiniz için teşekkürler! Lütfen aşağıdan giriş yapın veya kaydolmak için buraya tıklayın.



    Umarız ilk ve son kod blokları kafanızı çok fazla karıştırmaz. Şimdi asıl üzerinde durmamız gereken şey, hepinizin bu eğitime gelme amacınızdır: PHP kodu. Şimdi ikinci bölümü satır satır inceleyeceğiz ve buradaki her kod parçasının ne için tasarlandığını açıklayacağım.

    $kullanıcıadı = mysql_real_escape_string($_POST["kullanıcı adı"]); $şifre = md5(mysql_real_escape_string($_POST["şifre"]));

    Bunun için açıklanması gereken iki fonksiyon vardır. İlk olarak, mysql_real_escape_string - veritabanı girişini temizlemek için çok kullanışlı bir işlev. Bu, hatasız bir önlem değildir, ancak bu, giriş formumuza yerleştirilen her şeyin istenmeyen kısımlarını çıkararak kötü niyetli bilgisayar korsanlarının çoğunluğunu dışarıda tutacaktır.İkincisi, md5. Burada ayrıntıya girmek imkansız olurdu, ancak bu işlev, meraklı gözlerin okumasını önlemek için kendisine iletilen her şeyi (bu durumda kullanıcının parolasını) şifreler.

    $checklogin = mysql_query("SELECT * FROM user WHERE Kullanıcı Adı = "".$kullanıcıadı."" AND Şifre = "".$şifre."""); if(mysql_num_rows($checklogin) == 1) ( $row = mysql_fetch_array($checklogin); $email = $row["EmailAddress"]; $_SESSION["Kullanıcı adı"] = $kullanıcıadı; $_SESSION["EmailAddress"] = $e-posta; $_SESSION["Oturum Açıldı"] = 1;

    Burada giriş kodumuzun özü var; Öncelikle veritabanımızda bir sorgu çalıştırıyoruz. Bu sorguda kullanıcı adı ve şifresi kullanıcının vermiş olduğu $username ve $password değerlerimiz ile eşleşen üyeye ait her şeyi araştırıyoruz. Bir sonraki satırda kaç sonuç aldığımızı kontrol ettiğimiz bir if ifadesi var; herhangi bir sonuç yoksa bu bölüm işlenmez. Ancak bir sonuç varsa, kullanıcının var olduğunu biliyoruz ve bu nedenle oturum açacağız.

    Sonraki iki satır kullanıcının e-posta adresini almak içindir.Daha önce çalıştırdığımız sorgudan bu bilgiye zaten sahibiz, bu yüzden bu bilgiye kolayca erişebiliriz.İlk olarak veritabanından alınan verilerin bir dizisini alıyoruz. - bu durumda mysql_fetch_array PHP fonksiyonunu kullanıyoruz. Daha sonra kullanmamız için EmailAddress alanının değerini bir değişkene atadım.

    Şimdi oturumu ayarladık. Kullanıcının kullanıcı adını ve e-posta adresini, bu formu kullanarak giriş yaptığını bilmemiz için özel bir değerle birlikte oturumda saklıyoruz.Bütün bunlar söylenip yapıldıktan sonra kullanıcı, kullanılarak Üye Alanına yönlendirilecektir. koddaki META YENİLEME.

    Peki projemiz şu anda kullanıcıya nasıl görünüyor?

    Harika! Artık insanların sitenize gerçekten girebildiğinden emin olmak için harekete geçmenin zamanı geldi.

    İnsanların Kaydolmasına İzin Verin

    Sitenizde bir giriş formunun olması iyi ve güzel, ancak şimdi kullanıcıların bunu kullanabilmesine izin vermemiz gerekiyor - bir giriş formu oluşturmamız gerekiyor. Register.php adında bir dosya oluşturun ve içine aşağıdaki kodu koyun.

    Kullanıcı Yönetim Sistemi (NetTuts için Tom Cameron)

    Hata"; Eko "

    Üzgünüz, bu kullanıcı adı alınmış. Lütfen geri dönüp tekrar deneyin.

    "; ) else ( $registerquery = mysql_query("INSERT INTO kullanicilar (Kullanici adi, Parola, EmailAdresi) VALUES("".$kullanici adi."", "".$password.", "".$email."") " ); if($registerquery) ( echo "

    Başarı

    "; Eko "

    Hesabınız başarılı bir şekilde oluşturulmuştur. Lütfen Giriş yapmak için tıklayınız.

    "; ) else ( echo "

    Hata

    "; Eko "

    Üzgünüz, kaydınız başarısız oldu. Lütfen geri dönüp tekrar deneyin.

    "; )) ) ) else ( ?>

    Kayıt olmak

    Kayıt olmak için lütfen aşağıya bilgilerinizi giriniz.




    Yani bu bölümde henüz öğrenmediğimiz pek fazla yeni PHP yok. Gelin şu SQL sorgusuna hızlıca bir göz atalım ve bakalım ne yaptığını çözebilecek miyiz.

    $registerquery = mysql_query("INSERT INTO kullanıcılar (Kullanıcı Adı, Şifre, E-postaAdresi) VALUES("".$kullanıcıadı.", "".$şifre.", "".$eposta."")");

    Böylece kullanıcıyı veritabanımıza ekliyoruz. Bu kez veriyi almak yerine veriyi ekliyoruz; bu nedenle öncelikle hangi sütunlara veri girdiğimizi belirliyoruz (unutmayın, Kullanıcı Kimliğimiz otomatik olarak yükselecektir). VALUES() alanında, ona her sütuna ne yazacağını söylemek; bu durumda kullanıcının girdisinden gelen değişkenlerimiz var. Hadi bir deneyelim; Yepyeni kayıt formunuzda bir hesap oluşturduğunuzda, Üye Alanında şunları göreceksiniz.

    Oturumu Kapatabileceklerinden Emin Olun

    Neredeyse bu bölümün sonuna geldik, ancak buradaki işimizi bitirmeden önce ihtiyacımız olan bir şey daha var: kullanıcıların hesaplarından çıkış yapması için bir yol. Bunu yapmak çok kolaydır (neyse ki bizim için); logout.php adında yeni bir dosya oluşturun ve içine aşağıdakileri girin.

    Burada öncelikle global $_SESSION dizimizi sıfırlıyoruz ve ardından oturumu tamamen yok ediyoruz.

    İşte bu bölümün sonu ve PHP kodunun sonu. Şimdi son bölümümüze geçelim.

    Adım 3 - Tarz Kazanın

    Bu bölümde çok fazla açıklama yapmayacağım - eğer HTML/CSS'yi anlamıyorsanız, başlamanız için bu web sitesindeki birçok mükemmel eğitimden birini kesinlikle tavsiye ederim. Style.css adında yeni bir dosya oluşturun ve içine şunları girin; bu, şu ana kadar oluşturduğumuz tüm sayfaların stilini oluşturacaktır.

    * ( kenar boşluğu: 0; dolgu: 0; ) gövde ( yazı tipi ailesi: Trebuchet MS; ) a ( color: #000; ) a:hover, a:active, a:visited ( text-decoration: none; ) #main ( genişlik: 780 piksel; kenar boşluğu: 0 otomatik; kenar boşluğu üst: 50 piksel; dolgu: 10 piksel; kenarlık: 1 piksel katı #CCC; arka plan rengi: #EEE; ) form alan kümesi ( kenarlık: 0; ) form alan kümesi p br ( temizle: sol; ) etiket ( üst kenar boşluğu: 5 piksel; görüntü: blok; genişlik: 100 piksel; dolgu: 0; kayan nokta: sol; ) giriş ( yazı tipi ailesi: Trebuchet MS; kenarlık: 1 piksel katı #CCC; kenar boşluğu: 5 piksel; arka plan rengi: #FFF; dolgu: 2 piksel; ) giriş: vurgulu ( kenarlık: 1 piksel düz #222; arka plan rengi: #EEE; )

    Şimdi son projemizin nasıl görünmesi gerektiğine dair birkaç ekran görüntüsüne bakalım:

    Giriş formu.

    Üye alanı.

    Kayıt formu.

    Ve sonunda...

    İşte bu kadar! Artık sitenizde kullanabileceğiniz bir üye alanınız var. Pek çok insanın başlarını sallayıp monitörlerine bunun kendilerine bir faydası olmadığını bağırdığını görebiliyorum; haklısınız. Ancak PHP'ye yeni başlayan herkesin öğrenmiş olmasını umduğum şey, bir veritabanının nasıl kullanılacağının ve bilgi depolamak için oturumların nasıl kullanılacağının temellerini öğrenmiş olmasıdır. Herhangi bir web uygulaması oluşturmak için hayati beceriler.

    • Daha fazla günlük web geliştirme eğitimi ve makalesi için NETTUTS RSS Akışına abone olun.

    Bugün, Ekim ayının sonunda internette patlama yapan popüler CMS Joomla'daki 1 günlük kritik bir güvenlik açığının istismarına bakacağız. Rakamlarla güvenlik açıklarını konuşacağız CVE-2016-8869, CVE-2016-8870 Ve CVE-2016-9081. Üçü de beş uzun yıl boyunca çerçevenin derinliklerinde çürüyen, kenarda bekleyen, ancak daha sonra serbest kalıp kaosu, saldırıya uğramış siteleri ve bu Joomla'nın masum kullanıcılarının gözyaşlarını beraberinde getiren tek bir kod parçasından geliyor. Yalnızca monitörlerin ışığından gözleri kırmızı olan ve klavyeleri ekmek kırıntılarıyla dolu olan en yiğit ve cesur geliştiriciler, öfkeli kötü ruhlara meydan okuyabildi ve başlarını düzeltmelerin sunağına yaslayabildi.

    UYARI

    Tüm bilgiler yalnızca bilgilendirme amaçlıdır. Bu makalenin materyallerinden kaynaklanabilecek olası zararlardan ne editörler ne de yazar sorumlu değildir.

    Her şeyin başladığı yer

    6 Ekim 2016'da Demis Palma, Stack Exchange'de şu soruyu sorduğu bir konu oluşturdu: Aslında Joomla sürüm 3.6'da kullanıcıları aynı adda Register() ile kaydetmek için neden iki yöntem var? Birincisi UsersControllerRegistration denetleyicisinde, ikincisi ise UsersControllerUser denetleyicisindedir. Damis, UsersControllerUser::register() yönteminin bir yerde kullanılıp kullanılmadığını veya bunun eski mantıktan kalan evrimsel bir anakronizm olup olmadığını bilmek istedi. Onun endişesi, bu yöntemin herhangi bir görünüm tarafından kullanılmasa bile hazırlanmış bir sorgu tarafından çağrılabilmesiydi. Buna itoctopus takma adı altında bir geliştiriciden yanıt aldım ve o da sorunun gerçekten var olduğunu doğruladı. Ve Joomla geliştiricilerine bir rapor gönderdim.

    Daha sonra olaylar en hızlı şekilde gelişti. 18 Ekim'de Joomla geliştiricileri, o zamana kadar kullanıcı kaydına izin verecek bir PoC taslağı hazırlamış olan Damis'in raporunu kabul etti. Kendi sitesinde bulduğu sorun ve bu konudaki düşüncelerini genel hatlarıyla anlattığı bir not yayınladı. Aynı gün, Joomla 3.6.3'ün hala güvenlik açığı bulunan kodları içeren yeni bir sürümü yayınlandı.

    Bundan sonra Davide Tampellini, hatayı basit bir kullanıcıyı değil, bir yöneticiyi kaydetme noktasına kadar döndürür. Ve 21 Ekim'de Joomla güvenlik ekibine yeni bir vaka geldi. Zaten ayrıcalıkların arttırılmasından bahsediyor. Aynı gün Joomla web sitesinde, sistem çekirdeğindeki kritik bir güvenlik açığını düzelten 3.6.3 seri numaralı bir sonraki sürümün 25 Ekim Salı günü yayınlanacağına dair bir duyuru görüntülenir.

    25 Ekim Joomla Güvenlik Saldırısı Ekibi, Damis tarafından keşfedilen kod parçasının yarattığı en son sorunu buldu. Daha sonra, 21 Ekim tarihli ve göze çarpmayan Hazırlık 3.6.4 Kararlı Sürüm adı verilen bir taahhüt, talihsiz hatayı düzelten resmi Joomla deposunun ana şubesine aktarılır.

    Bunun ortaya çıkmasının ardından, konuyla ilgilenen çok sayıda kişi geliştirici topluluğuna katılır; güvenlik açığını tanıtmaya ve istismarlar hazırlamaya başlarlar.

    27 Ekim'de araştırmacı Harry Roberts, Xiphos Research deposuna, savunmasız bir CMS'ye sahip bir sunucuya PHP dosyası yükleyebilen hazır bir istismar yükledi.

    Detaylar

    Arka plan bitti, hadi en ilginç kısma geçelim: güvenlik açığının analizi. Joomla 3.6.3'ü test sürümü olarak yükledim, dolayısıyla tüm satır numaraları bu sürümle alakalı olacaktır. Aşağıda göreceğiniz dosyaların tüm yolları, kurulu CMS'nin köküne göre belirtilecektir.

    Damis Palma'nın keşfi sayesinde sisteme kullanıcı kaydını gerçekleştiren iki yöntemin olduğunu biliyoruz. İlki CMS tarafından kullanılır ve /components/com_users/controllers/registration.php:108 dosyasında bulunur. İkincisi (çağırmamız gereken) /components/com_users/controllers/user.php:293'te yaşıyor. Şimdi ona daha yakından bakalım.

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

    Burada sadece ilginç satırlar bıraktım. Güvenlik açığı bulunan yöntemin tam sürümü Joomla deposunda görüntülenebilir.

    Normal kullanıcı kaydı sırasında ne olacağını anlayalım: hangi veriler gönderilir ve nasıl işlenir. Ayarlarda kullanıcı kaydı etkinleştirilmişse, formu http://joomla.local/index.php/component/users/?view=registration adresinde bulabilirsiniz.


    Meşru bir kullanıcı kaydı isteği aşağıdaki ekran görüntüsüne benzer.


    com_users bileşeni kullanıcılarla çalışmaktan sorumludur. İstekteki görev parametresine dikkat edin. $controller.$method biçimine sahiptir. Dosya yapısına bakalım.

    Klasördeki komut dosyalarının adları kontrolörlerçağrılan denetleyicilerin adlarına karşılık gelir. İsteğimiz artık $controller = "registration" içerdiğinden dosya çağrılacak kayıt.php ve onun Register() yöntemi.

    Dikkat, soru: Kayıt işlemi koddaki savunmasız bir yere nasıl aktarılır? Muhtemelen zaten tahmin etmişsinizdir. Savunmasız ve gerçek yöntemlerin adları aynıdır (register), dolayısıyla çağrılan denetleyicinin adını değiştirmemiz yeterlidir. Savunmasız denetleyicimiz nerede bulunuyor? Aynen öyle, dosyada kullanıcı.php. Görünüşe göre $controller = "user". Her şeyi bir araya getirdiğimizde, görev = user.register elde ederiz. Artık kayıt talebi ihtiyacımız olan yöntemle işleniyor.


    Yapmamız gereken ikinci şey ise verileri doğru formatta göndermek. Burada her şey basit. Legitimate Register() bizden, kayıt verilerini (isim, kullanıcı adı, şifre, e-posta) ilettiğimiz jform adında bir dizi bekliyor (isteğin yer aldığı ekran görüntüsüne bakın).

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

    Müşterimiz bu verileri user adı verilen bir diziden alır.

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

    Bu nedenle istekteki tüm parametrelerin adlarını jfrom'dan user'a değiştiriyoruz.

    Üçüncü adımımız geçerli bir CSRF belirteci bulmaktır çünkü o olmadan kayıt yapılamaz.

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

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


    Artık istediğiniz yöntemi kullanarak kullanıcılar oluşturabilirsiniz. Her şey yolunda gittiyse tebrikler; bir güvenlik açığından yararlandınız CVE-2016-8870"Yeni kullanıcıların kaydedilmesi için izin kontrolü eksik."

    UsersControllerRegistration denetleyicisindeki "çalışan" Register() yönteminde şöyle görünür:

    • /components/com_users/controllers/registration.php: 113: // Kayıt devre dışı bırakılırsa - Giriş sayfasına yönlendirin. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) giriş yapın", yanlış)); 117: 118: yanlış dönüş; 119: )

    Ve böylece savunmasız durumda:

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

    Evet, mümkün değil.

    Çok daha ciddi olan ikinci sorunu anlamak için oluşturduğumuz isteği gönderelim ve kodun çeşitli yerlerinde nasıl yürütüldüğünü görelim. Çalışan yönteminde kullanıcı tarafından gönderilen verilerin doğrulanmasından sorumlu olan parça aşağıdadır:

    Devam sadece üyelere açıktır

    Seçenek 1. Sitedeki tüm materyalleri okumak için "site" topluluğuna katılın

    Belirtilen süre içinde topluluğa üye olmak, TÜM Hacker materyallerine erişmenizi sağlayacak, kişisel kümülatif indiriminizi artıracak ve profesyonel bir Xakep Skoru puanı biriktirmenize olanak tanıyacak!

    Merhaba! Şimdi PHP + MySQL kullanarak siteye en basit kaydı uygulamaya çalışacağız. Bunun için bilgisayarınızda Apache'nin kurulu olması gerekmektedir. Senaryomuzun çalışma prensibi aşağıda gösterilmiştir.

    1. Veritabanında kullanıcılar tablosunu oluşturarak başlayalım. Kullanıcı verilerini (oturum açma adı ve şifre) içerecektir. Haydi phpmyadmin'e gidelim (eğer PC'nizde bir veritabanı oluşturuyorsanız http://localhost/phpmyadmin/). Bir tablo oluştur kullanıcılar, 3 alanı olacak.

    Ben mysql veritabanında oluşturuyorum, siz başka bir veritabanında oluşturabilirsiniz. Daha sonra değerleri şekildeki gibi ayarlayın:

    2. Bu tabloya bağlantı gereklidir. Bir dosya oluşturalım bd.php. Bu içerik:

    $db = mysql_connect("MySQL sunucunuz", "bu sunucu için oturum açın", "bu sunucunun şifresi");
    mysql_select_db ("bağlandığımız veritabanının adı", $db);
    ?>

    Benim durumumda şöyle görünüyor:

    $db = mysql_connect("localhost", "kullanıcı", "1234");
    mysql_select_db("mysql",$db);
    ?>

    Kaydetmek bd.php.
    Harika! Veritabanında bir tablomuz ve onunla bağlantımız var. Artık kullanıcıların verilerini bırakacakları bir sayfa oluşturmaya başlayabilirsiniz.

    3. İçeriği (tüm yorumlar içeride) içeren bir reg.php dosyası oluşturun:



    Kayıt


    Kayıt
















    4. Bir dosya oluşturun, veri tabanına veri girecek ve kullanıcıyı kaydedecektir. save_user.php(İçerdeki yorumlar):



    {
    }
    //eğer kullanıcı adı ve şifre girilirse, etiketlerin ve komut dosyalarının çalışmaması için bunları işleriz, insanların ne girebileceğini asla bilemezsiniz


    //ekstra boşlukları kaldır
    $giriş = trim($giriş);
    $şifre = trim($şifre);
    //veritabanına bağlanıyoruz
    //aynı girişe sahip bir kullanıcının varlığını kontrol ediyoruz
    $result = mysql_query("Kullanıcılardan kimliği SEÇİN WHERE giriş=$giriş"",$db);
    if (!empty($myrow["id"])) (
    çıkış("Üzgünüz, girdiğiniz kullanıcı adı zaten kayıtlı. Lütfen başka bir kullanıcı adı girin.");
    }
    // eğer durum böyle değilse, verileri kaydedin
    $result2 = mysql_query("INSERT INTO kullanicilar (giriş,şifre) VALUES("$giriş,"$şifre")");
    // Hata olup olmadığını kontrol edin
    if ($result2=="DOĞRU")
    {
    echo "Başarıyla kayıt oldunuz! Artık siteye girebilirsiniz. Ana sayfa";
    }
    başka(
    echo "Hata! Kayıtlı değilsiniz.";
    }
    ?>

    5. Artık kullanıcılarımız kayıt olabilir! Daha sonra, halihazırda kayıtlı kullanıcıların siteye girebilmesi için bir "kapı" oluşturmanız gerekir. index.php(İçerdeki yorumlar):

    // tüm prosedür oturumlar halinde çalışır. Kullanıcının sitede bulunduğu süre boyunca verilerinin saklandığı yerdir. Bunları sayfanın en başında başlatmak çok önemlidir!!!
    oturum_başlangıç();
    ?>


    Ana sayfa


    Ana sayfa











    Kayıt olmak



    // Oturum açma ve kullanıcı kimliği değişkenlerinin boş olup olmadığını kontrol edin
    if (boş($_SESSION["giriş"]) veya boş($_SESSION["id"]))
    {
    // Boşsa bağlantıyı göstermeyiz
    echo "Misafir olarak giriş yaptınız
    Bu bağlantı yalnızca kayıtlı kullanıcılara açıktır";
    }
    başka
    {

    Dosyada index.php Yalnızca kayıtlı kullanıcılara açık olacak bir bağlantı görüntüleyeceğiz. Komut dosyasının tüm amacı budur; herhangi bir veriye erişimi sınırlamak.

    6. Girilen kullanıcı adı ve şifrenin doğrulandığı bir dosya kalır. testreg.php (yorumlar içeride):

    session_start();// tüm prosedür oturumlarda çalışır. Kullanıcının sitede bulunduğu süre boyunca verilerinin saklandığı yerdir. Bunları sayfanın en başında başlatmak çok önemlidir!!!
    if (isset($_POST["giriş"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //tarafından girilen kullanıcı adını girin kullanıcıyı $login değişkenine girin, eğer boşsa, değişkeni yok edin
    if (isset($_POST["şifre"])) ( $şifre=$_POST["şifre"]; if ($şifre =="") ( unset($şifre);))
    //kullanıcının girdiği şifreyi $password değişkenine koyun, eğer boşsa değişkeni yok edin
    if (boş($giriş) veya boş($şifre)) //eğer kullanıcı kullanıcı adı veya şifre girmediyse bir hata veririz ve betiği durdururuz
    {
    çıkış("Tüm bilgileri girmediniz, geri dönün ve tüm alanları doldurun!");
    }
    //eğer kullanıcı adı ve şifre girilirse, etiketlerin ve komut dosyalarının çalışmaması için bunları işleriz, insanların ne girebileceğini asla bilemezsiniz
    $giriş = stripslashes($giriş);
    $giriş = htmlspecialchars($giriş);
    $şifre = stripslashes($şifre);
    $şifre = htmlspecialchars($şifre);
    //ekstra boşlukları kaldır
    $giriş = trim($giriş);
    $şifre = trim($şifre);
    //veritabanına bağlanıyoruz
    include("bd.php");// bd.php dosyası diğerleriyle aynı klasörde olmalıdır, değilse sadece yolu değiştirin

    $result = mysql_query("SELECT * FROM user WHERE giriş =$giriş"",$db); //girilen kullanıcı adı ile kullanıcı hakkındaki tüm verileri veri tabanından al
    $myrow = mysql_fetch_array($result);
    if (empty($myrow["şifre"]))
    {
    //girilen kullanıcı adı mevcut değilse
    }
    başka(
    //varsa şifreleri kontrol edin
    if ($myrow["şifre"]==$şifre) (
    //şifreler eşleşirse kullanıcı için bir oturum başlatırız! Onu tebrik edebilirsiniz, içeri girdi!
    $_SESSION["giriş"]=$myrow["giriş"];
    $_SESSION["id"]=$myrow["id"];//bu veriler çok sık kullanılıyor, dolayısıyla oturum açmış kullanıcı onu “yanında taşıyacak”
    echo "Siteye başarıyla giriş yaptınız! Ana sayfa";
    }
    başka(
    //şifreler eşleşmiyorsa

    Çıkış ("Üzgünüz, girdiğiniz kullanıcı adı veya şifre yanlış.");
    }
    }
    ?>

    Tamam artık her şey bitti! Ders sıkıcı olabilir ama çok faydalı olabilir. Burada yalnızca kayıt fikri gösterilmektedir, o zaman onu geliştirebilirsiniz: koruma ekleyin, tasarım, veri alanları ekleyin, avatarları yükleyin, hesabınızdan çıkış yapın (bunu yapmak için, işlevle oturumdaki değişkenleri yok etmeniz yeterlidir) ayarsız) ve benzeri. İyi şanlar!

    Her şeyi kontrol ettim, düzgün çalışıyor!

    Sitede yeni

    >

    En popüler