Amurny વપરાશકર્તાઓ નોંધણી php. PHP અને MySQL માં અવિશ્વસનીય રીતે સરળ નોંધણી સિસ્ટમ બનાવવી

મોટાભાગની વેબસાઇટ્સમાં તમારા વપરાશકર્તાઓ માટે સાઇન અપ કરવા માટે નોંધણી ફોર્મ હોય છે અને આમ સાઇટની અંદર અમુક પ્રકારના વિશેષાધિકારોનો લાભ મેળવી શકે છે. આ લેખમાં આપણે જોઈશું કે PHP અને MySQL માં નોંધણી ફોર્મ કેવી રીતે બનાવવું.

અમે સાદા ટૅગ્સનો ઉપયોગ કરીશું અને અમે Sign-Up.html વેબપેજ ડિઝાઇન કરવા માટે ટેબલ ટેગનો પણ ઉપયોગ કરીશું. ચાલો શરૂ કરીએ:

લિસ્ટિંગ 1: sign-up.html

સાઇન અપ કરો

નોંધણી ફોર્મ
નામ
ઈમેલ
વપરાશકર્તા નામ
પાસવર્ડ
પાસવર્ડની પુષ્ટિ કરો



આકૃતિ 1:

sing-in.html વેબપેજનું વર્ણન:

જેમ તમે આકૃતિ 1 જોઈ શકો છો, ત્યાં એક નોંધણી ફોર્મ છે અને તે વપરાશકર્તા વિશે થોડો ડેટા પૂછે છે. આ સામાન્ય ડેટા છે જે કોઈપણ વેબસાઇટ દ્વારા તેના વપરાશકર્તાઓ અથવા મુલાકાતીઓ પાસેથી ID અને પાસવર્ડ બનાવવા માટે પૂછે છે. અમે ટેબલ ટેગનો ઉપયોગ કર્યો છે કારણ કે વેબપેજ પરના ફોર્મ ફીલ્ડ્સને તમે આકૃતિ 1 પર જોઈ શકો છો તે રીતે ગોઠવવા માટે. sing-up.html વેબપેજ સાથે CSS શૈલી ફાઇલ.

સૂચિ 2: style.css

/*સાઇન-અપ વેબપેજ માટે CSS ફાઇલ*/ #body-color(background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); બેકગ્રાઉન્ડ-સાઇઝ:500px 500px પૃષ્ઠભૂમિ-પુનરાવર્તિત; પૃષ્ઠભૂમિ-સ્થિતિ: કેન્દ્ર; હાંસિયા-ડાબે: 450px; ફોન્ટ-વજન: બોલ્ડ; 20px;

લિસ્ટિંગ 3: sign-up.html વેબપેજ સાથે style.css લિંક કરો



આકૃતિ 2:

style.css ફાઇલનું વર્ણન:

બાહ્ય CSS ફાઇલમાં અમે કેટલીક શૈલીઓનો ઉપયોગ કર્યો છે જે તમારા માટે નવી દેખાઈ શકે છે. જેમ કે આપણે બેકગ્રાઉન્ડમાં ઈમેજનો ઉપયોગ કર્યો છે અને તેને વેબપેજની મધ્યમાં સેટ કર્યો છે. જે html div ટેગની મદદથી ઉપયોગમાં સરળ બની ગયું છે. જેમ આપણે ત્રણ ડીવી ટેગ આઈડીનો ઉપયોગ કર્યો છે. #બટન, #સિંગ-અપ અને #બોડી-કલર અને અમે તેમના પર તમામ CSS શૈલીઓ લાગુ કરી છે અને હવે તમે આકૃતિ 2 જોઈ શકો છો કે તે કેટલું સુંદર અને આકર્ષક લાગે છે. તમે તેના પર 2D અને 3D CSS શૈલીઓ જેવી ઘણી અન્ય CSS શૈલીઓનો ઉપયોગ કરી શકો છો. તે હવે જે દેખાય છે તેના કરતાં વધુ સુંદર દેખાશે.

આ બધા સરળ કામો પછી હવે અમે નવા વપરાશકર્તાઓના ડેટાબેઝમાં તમામ ડેટા સ્ટોર કરવા માટે ડેટાબેઝ અને ટેબલ બનાવવા જઈ રહ્યા છીએ. આપણે ટેબલ બનાવવા જઈએ તે પહેલાં આપણે જાણી લેવું જોઈએ કે આપણને યુઝર પાસેથી શું જોઈએ છે. જેમ જેમ અમે ફોર્મ ડિઝાઇન કર્યું છે તેમ અમે રજીસ્ટ્રેશન ફોર્મ અનુસાર ટેબલ બનાવીશું જે તમે તેને આકૃતિ 1 અને 2 પર જોઈ શકો છો.

લિસ્ટિંગ 3: MySQL માં કોષ્ટક માટે ક્વેરી

ટેબલ વેબસાઈટ બનાવો યુઝર્સ (userID int(9) NOT NULL auto_increment, fullname VARCHAR(50) NOT NULL, username VARCHAR(40) NOT NULL, email VARCHAR(40) NOT NULL, VARCHAR(40) NOT NULL, (MARYPRI) પાસ કરો );

લિસ્ટિંગ 3 નું વર્ણન:

એક વસ્તુ તમારે જાણવી જોઈએ કે જો તમારી પાસે આ ક્વેરીનો ઉપયોગ કરવા માટે MySQL સુવિધા નથી, તો આ વિશેના મારા અગાઉના લેખને અનુસરો. આ લિંક પરથી તમે ઇન્સ્ટોલેશન અને જરૂરિયાતોને સમજી શકશો. અને આપણે તેનો ઉપયોગ કેવી રીતે કરી શકીએ.

લિસ્ટિંગ 3 ક્વેરી અમે રજીસ્ટ્રેશન ફોર્મ માટે જરૂરી તમામ વસ્તુઓનો ઉપયોગ કર્યો છે. જેમ કે ત્યાં ઈમેલ, આખું નામ, પાસવર્ડ અને યુઝર નેમ વેરીએબલ છે. આ વેરીએબલ્સ યુઝરનો ડેટા સ્ટોર કરશે, જેને તે/તેણી સિંગ-અપ માટે આકૃતિ 2 માં રજીસ્ટ્રેશન ફોર્મમાં ઇનપુટ કરશે.

આ બધા કામો પછી અમે PHP પ્રોગ્રામિંગ સાથે કામ કરવા જઈ રહ્યા છીએ જે સર્વર સાઇડ પ્રોગ્રામિંગ લેંગ્વેજ છે. તેથી જ ડેટાબેઝ સાથે કનેક્શન બનાવવાની જરૂર છે.

લિસ્ટિંગ 4: ડેટાબેઝ કનેક્શન

લિસ્ટિંગ 4 નું વર્ણન:

અમે ડેટાબેઝ અને અમારા વેબપૃષ્ઠો વચ્ચે જોડાણ બનાવ્યું છે. પરંતુ જો તમને ખબર ન હોય કે તે કામ કરી રહ્યું છે કે નહીં, તો તમે તેના માટે છેલ્લી ચેક લિસ્ટિંગ 5માં એક વસ્તુનો વધુ ઉપયોગ કરો છો.

લિસ્ટિંગ 5: ડેટાબેઝ કનેક્ટિવિટીનું જોડાણ તપાસી રહ્યું છે

વર્ણન સૂચિ 5:

લિસ્ટિંગ 5 માં મેં હમણાં જ તમને બતાવવાનો પ્રયાસ કર્યો છે કે તમે ડેટાબેઝ અને PHP વચ્ચેના જોડાણને તપાસી અને પુષ્ટિ કરી શકો છો. અને વધુ એક વસ્તુ અમે અમારા સિંગ-અપ વેબપેજમાં લિસ્ટિંગ 5 કોડનો ઉપયોગ કરીશું નહીં. કારણ કે તે ફક્ત તમને સમજવા માટે છે કે તમે MySQL કનેક્શન કેવી રીતે તપાસી શકો છો.

હવે અમે પ્રથમ વપરાશકર્તાની ઉપલબ્ધતા તપાસવા માટે PHP પ્રોગ્રામિંગ એપ્લિકેશન લખીશું અને પછી જો તે વેબપેજ પર નવો વપરાશકર્તા છે તો વપરાશકર્તાને સંગ્રહિત કરીશું.

લિસ્ટિંગ 6: connectivity-sign-up.php

કનેક્ટિવિટી-સાઇન-અપ.phpનું વર્ણન

આ PHP એપ્લિકેશનમાં મેં વેબપૃષ્ઠો માટે સાઇન અપ એપ્લિકેશન બનાવવાની સૌથી સરળ રીતનો ઉપયોગ કર્યો છે. તમે જોઈ શકો છો કે પહેલા અમે લિસ્ટિંગ 4 જેવું કનેક્શન બનાવીએ છીએ. અને પછી અમે બે ફંક્શનનો ઉપયોગ કર્યો છે જેનું પહેલું ફંક્શન છે SignUP() જેને એપ્લિકેશનના છેલ્લા ભાગમાંથી if સ્ટેટમેન્ટ દ્વારા બોલાવવામાં આવે છે, જ્યાં તે સાઇન અપને દબાવવાની પ્રથમ પુષ્ટિ કરે છે. બટન જો તેને દબાવવામાં આવે તો તે સિંગઅપ ફંક્શનને કૉલ કરશે અને આ ફંક્શન ડેટા મેળવવા માટે SELECT ની ક્વેરીનો ઉપયોગ કરશે અને વપરાશકર્તાના નામ અને ઇમેઇલ સાથે તેની સરખામણી કરશે જે હાલમાં વપરાશકર્તા દ્વારા દાખલ કરવામાં આવે છે. જો ડેટાબેઝમાં વપરાશકર્તાનામ અને ઈમેલ પહેલેથી જ હાજર હોય તો તે કહેશે માફ કરશો તમે પહેલેથી જ નોંધાયેલા છો

જો વપરાશકર્તા તેના વર્તમાન વપરાશકર્તાનામ તરીકે નવો હોય અને ઈમેલ આઈડી ડેટાબેઝમાં હાજર ન હોય, તો જો સ્ટેટમેન્ટ ન્યુયુઝર()ને કૉલ કરશે જ્યાં તે નવા વપરાશકર્તાની તમામ માહિતી સંગ્રહિત કરશે. અને વપરાશકર્તા વેબપેજનો એક ભાગ બની જશે.



આકૃતિ 3

આકૃતિ 3 માં, વપરાશકર્તા ડેટાબેઝ રેકોર્ડ્સ અનુસાર જો વપરાશકર્તા આ વેબપેજનો જૂનો વપરાશકર્તા હોય તો સાઇન અપ કરવા માટે ડેટા દાખલ કરી રહ્યો છે. તેથી વેબપેજ એક સંદેશ બતાવશે કે વપરાશકર્તા પહેલેથી જ નોંધાયેલ છે જો વપરાશકર્તા નવો છે તેથી વેબપેજ એક સંદેશ બતાવશે કે વપરાશકર્તાની નોંધણી પૂર્ણ થઈ ગઈ છે.



આકૃતિ 4:

જેમ જેમ અમે રજીસ્ટ્રેશન ફોર્મ (આકૃતિ 4) માં ડેટા દાખલ કર્યો છે, તે ડેટાબેઝ અનુસાર જે વપરાશકર્તાનામ અને ઇમેઇલ અમે સિંગ-અપ માટે નોંધણી ફોર્મમાં દાખલ કર્યા છે તે ડેટાબેઝમાં પહેલેથી જ હાજર છે. તેથી આપણે નવા ID અને પાસવર્ડ સાથે સાઇન અપ કરવા માટે નવું વપરાશકર્તાનામ અને ઇમેઇલ સરનામું અજમાવવું જોઈએ.



આકૃતિ 5

આકૃતિ 5 માં, તે અમને પુષ્ટિ કરે છે કે વપરાશકર્તાનામ અને ઇમેઇલ આઈડી વપરાશકર્તાએ દાખલ કર્યો છે. બંને ડેટાબેઝ રેકોર્ડમાં હાજર નથી. તેથી હવે એક નવો આઈડી અને પાસવર્ડ બનાવવામાં આવ્યો છે અને યુઝર આગલી વખતે લોગીન કરવા માટે તેના નવા આઈડી અને પાસવર્ડનો ઉપયોગ કરી શકશે.

નિષ્કર્ષ:

આ લેખમાં આપણે સાઇન અપ વેબપેજ બનાવવાની સૌથી સરળ રીત શીખ્યા. અમે એ પણ શીખ્યા કે જો આપણે PHP અને MySQL નો ઉપયોગ કરીએ તો તે ડેટાબેઝ સાથે કેવી રીતે વ્યવહાર કરે છે. મેં તમને સાઇન અપ વેબપેજ કાર્યક્ષમતા વિશે મૂળભૂત જ્ઞાન આપવાનો પ્રયાસ કર્યો. તે પાછળના છેડે કેવી રીતે કામ કરે છે અને આગળના છેડે તેનો દેખાવ કેવી રીતે બદલી શકીએ. કોઈપણ પ્રશ્ન માટે અચકાશો નહીં અને ટિપ્પણી કરશો નહીં.

આ ટ્યુટોરીયલમાં, હું તમને યુઝર રજીસ્ટ્રેશન સિસ્ટમ બનાવવાની સંપૂર્ણ પ્રક્રિયામાં લઈ જઈશ જ્યાં યુઝર્સ યુઝરનેમ, ઈમેલ અને પાસવર્ડ આપીને એકાઉન્ટ બનાવી શકે છે, PHP અને MySQL નો ઉપયોગ કરીને લોગિન અને લોગઆઉટ કરી શકે છે. હું તમને એ પણ બતાવીશ કે તમે કેટલાક પૃષ્ઠોને ફક્ત લૉગ ઇન થયેલા વપરાશકર્તાઓ માટે કેવી રીતે ઍક્સેસિબલ બનાવી શકો છો. અન્ય કોઈપણ વપરાશકર્તા જે લૉગ ઈન નથી તે પૃષ્ઠને ઍક્સેસ કરી શકશે નહીં.

જો તમને કોઈ વિડિયો પસંદ હોય, તો તમે તેને મારી YouTube ચેનલ પર જોઈ શકો છો

પ્રથમ વસ્તુ જે આપણે કરવાની જરૂર પડશે તે છે અમારો ડેટાબેઝ સેટ કરવો.

નામનો ડેટાબેઝ બનાવો નોંધણી. માં નોંધણીડેટાબેઝ, નામનું ટેબલ ઉમેરો વપરાશકર્તાઓ. વપરાશકર્તાઓ કોષ્ટક નીચેના ચાર ક્ષેત્રો લેશે.

  • વપરાશકર્તા નામ - varchar(100)
  • ઇમેઇલ - varchar(100)
  • પાસવર્ડ - વર્ચર(100)

તમે PHPMyAdmin જેવા MySQL ક્લાયંટનો ઉપયોગ કરીને આ બનાવી શકો છો.

અથવા તમે નીચેની SQL સ્ક્રિપ્ટનો ઉપયોગ કરીને MySQL પ્રોમ્પ્ટ પર તેને બનાવી શકો છો:

કોષ્ટક બનાવો `વપરાશકર્તા` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KE, `username` varchar(100) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(100) NOT NGINULL) =InnoDB ડિફોલ્ટ ચારસેટ=લેટિન1;

અને તે ડેટાબેઝ સાથે છે.

હવે નામનું ફોલ્ડર બનાવો નોંધણીઅમારા સર્વર માટે સુલભ નિર્દેશિકામાં. એટલે કે htdocs (જો તમે XAMPP સર્વરનો ઉપયોગ કરી રહ્યાં હોવ) અથવા અંદર ફોલ્ડર બનાવો www(જો તમે wampp સર્વરનો ઉપયોગ કરી રહ્યા છો).

ફોલ્ડરની અંદર નોંધણી,નીચેની ફાઇલો બનાવો:

આ ફાઇલોને તમારી પસંદગીના ટેક્સ્ટ એડિટરમાં ખોલો. મારું છે સબલાઈમ ટેક્સ્ટ 3.

વપરાશકર્તાની નોંધણી

register.php ફાઇલ ખોલો અને તેમાં નીચેનો કોડ પેસ્ટ કરો:

register.php:

નોંધણી કરો

પહેલેથી જ સભ્ય છો? સાઇન ઇન કરો



અત્યાર સુધી કંઈ જટિલ નથી?

અહીં નોંધવા જેવી કેટલીક બાબતો:

પ્રથમ એ છે કે આપણું સ્વરૂપ ક્રિયાવિશેષતા register.php પર સેટ છે. આનો અર્થ એ છે કે જ્યારે ફોર્મ સબમિટ બટન ક્લિક કરવામાં આવે છે, ત્યારે ફોર્મમાંનો તમામ ડેટા એક જ પૃષ્ઠ (register.php) પર સબમિટ કરવામાં આવશે. કોડનો જે ભાગ આ ફોર્મ ડેટા મેળવે છે તે server.php ફાઇલમાં લખાયેલો છે અને તેથી જ અમે તેને register.php ફાઇલની ખૂબ ટોચ પર સમાવી રહ્યાં છીએ.

એ પણ નોંધ લો કે અમે ફોર્મની ભૂલો દર્શાવવા માટે errors.php ફાઇલનો સમાવેશ કરી રહ્યા છીએ. અમે ટૂંક સમયમાં તેના પર આવીશું.

જેમ તમે હેડ વિભાગમાં જોઈ શકો છો, અમે style.css ફાઇલ સાથે લિંક કરી રહ્યા છીએ. style.css ફાઈલ ખોલો અને તેમાં નીચેની CSS પેસ્ટ કરો:

* ( માર્જિન: 0px; પેડિંગ: 0px; ) મુખ્ય ભાગ ( ફોન્ટ-કદ: 120%; પૃષ્ઠભૂમિ: #F8F8FF; ) .હેડર (પહોળાઈ: 30%; માર્જિન: 50px સ્વતઃ 0px; રંગ: સફેદ; પૃષ્ઠભૂમિ: #5F9EA0; ટેક્સ્ટ - સંરેખિત કરો: મધ્યમાં; સરહદ: 1px ઘન #B0C4DE; સરહદ-ત્રિજ્યા: 10px 0px 0px; : 0px 0px 10px; .input-group ( margin: 10px 10px 0px; ); સરહદ-ત્રિજ્યા: 5px; 1px સોલિડ ગ્રે; .btn ( પેડિંગ: 10px; ફોન્ટ-સાઇઝ: 15px; પૃષ્ઠભૂમિ: #5F9EA0; સરહદ: ત્રિજ્યા: 5px; પહોળાઈ: 92%; માર્જિન: 0px; બોર્ડર: 1px સોલિડ # a94442; બોર્ડર-રેડિયસ: 5px;

પૃષ્ઠભૂમિ: #dff0d8;

બોર્ડર: 1px સોલિડ #3c763d;

માર્જિન-બોટમ: 20px; )

હવે ફોર્મ સુંદર દેખાય છે.

ચાલો હવે તે કોડ લખીએ જે ફોર્મમાંથી સબમિટ કરેલી માહિતી મેળવશે અને માહિતીને ડેટાબેઝમાં સંગ્રહિત કરશે (રજીસ્ટર કરો) અગાઉ વચન મુજબ, અમે આ સર્વર.php ફાઇલમાં કરીએ છીએ.

server.php ખોલો અને તેમાં આ કોડ પેસ્ટ કરો:

server.php

સત્રોનો ઉપયોગ લૉગ ઇન થયેલા વપરાશકર્તાઓને ટ્રૅક કરવા માટે થાય છે અને તેથી અમે ફાઇલની ટોચ પર સેશન_સ્ટાર્ટ()નો સમાવેશ કરીએ છીએ.

કોડમાંની ટિપ્પણીઓ ખૂબ જ બધું સમજાવે છે, પરંતુ હું અહીં કેટલીક બાબતોને પ્રકાશિત કરીશ. વપરાશકર્તાઓ if સ્ટેટમેન્ટ નક્કી કરે છે કે રજીસ્ટ્રેશન ફોર્મ પરનું reg_user બટન ક્લિક કર્યું છે કે નહીં. યાદ રાખો, અમારા ફોર્મમાં, સબમિટ બટનમાં reg_user માટે નામની વિશેષતા સેટ છે અને તે જ આપણે if સ્ટેટમેન્ટમાં સંદર્ભિત કરી રહ્યા છીએ.

બધા ડેટા ફોર્મમાંથી પ્રાપ્ત થાય છે અને વપરાશકર્તાએ યોગ્ય રીતે ફોર્મ ભર્યું છે તેની ખાતરી કરવા માટે તપાસવામાં આવે છે. પાસવર્ડ મેચ થાય છે તેની ખાતરી કરવા માટે તેની સરખામણી પણ કરવામાં આવે છે.

0) : ?>

જો કોઈ ભૂલો ન આવી હોય, તો વપરાશકર્તા આમાં નોંધાયેલ છે

અને તે રજીસ્ટ્રેશન માટે છે. ચાલો યુઝર લોગીન જોઈએ.

લૉગિન વપરાશકર્તા

વપરાશકર્તાને લૉગ ઇન કરવું એ વધુ સરળ બાબત છે. ફક્ત લોગિન પૃષ્ઠ ખોલો અને તેની અંદર આ કોડ મૂકો:

નોંધણી સિસ્ટમ PHP અને MySQL

લૉગિન કરો

હજુ સુધી સભ્ય નથી? સાઇન અપ કરો



આ પૃષ્ઠ પરની દરેક વસ્તુ register.php પૃષ્ઠ જેવી જ છે.

હવે જે કોડ યુઝર લોગ ઇન કરે છે તે જ server.php ફાઇલમાં લખવાનો છે. તેથી server.php ફાઇલ ખોલો અને ફાઇલના અંતે આ કોડ ઉમેરો:

// ... // LOGIN USER જો (isset($_POST["login_user"])) ( $username = mysqli_real_escape_string($db, $_POST["username"]); $password = mysqli_real_escape_string($db, $_POST ["પાસવર્ડ"]); જો (ખાલી($username)) ( array_push($errors, "username is"); ) જો (empty($password)) ( array_push($errors, "Password જરૂરી છે"); ) જો (count($errors) == 0) ( $password = md5($password); $query = "વપરાશકર્તાઓ જ્યાંથી યુઝરનેમ="$username" AND password="$password"" પસંદ કરો; $results = mysqli_query ($db, $query); if (mysqli_num_rows($results) == 1) ( $_SESSION["username"] = $username; $_SESSION["success"] = "તમે હવે લૉગ ઇન થયા છો"; હેડર(" સ્થાન: index.php");) અન્યથા ( array_push($errors, "ખોટા વપરાશકર્તાનામ/પાસવર્ડ સંયોજન"); ) ) ) ?>

ફરીથી આ બધું એ તપાસે છે કે શું વપરાશકર્તાએ ફોર્મ યોગ્ય રીતે ભર્યું છે કે નહીં, ચકાસે છે કે તેમના ઓળખપત્રો ડેટાબેઝના રેકોર્ડ સાથે મેળ ખાય છે અને જો તે કરે છે તો તેમને લોગ ઇન કરે છે. લૉગ ઇન કર્યા પછી, વપરાશકર્તાને સફળતા સંદેશ સાથે index.php ફાઇલ પર રીડાયરેક્ટ કરવામાં આવે છે.

હવે ચાલો જોઈએ કે index.php ફાઈલમાં શું થાય છે તેને ખોલો અને તેમાં નીચેનો કોડ પેસ્ટ કરો:

ઘર

હોમ પેજ

સ્વાગત છે

લોગઆઉટ



પ્રથમ if સ્ટેટમેન્ટ તપાસે છે કે શું વપરાશકર્તા પહેલેથી જ લૉગ ઇન છે. જો તેઓ લૉગ ઇન ન હોય, તો તેમને લૉગિન પૃષ્ઠ પર રીડાયરેક્ટ કરવામાં આવશે. આથી આ પેજ ફક્ત લૉગ ઇન થયેલા વપરાશકર્તાઓ માટે જ ઍક્સેસિબલ છે. જો તમે કોઈપણ પૃષ્ઠને ફક્ત લૉગ ઇન કરેલા વપરાશકર્તાઓ માટે ઍક્સેસિબલ બનાવવા માંગતા હો, તો તમારે ફક્ત આ if સ્ટેટમેન્ટ ફાઇલની ટોચ પર મૂકવાનું છે.

બીજું if સ્ટેટમેન્ટ તપાસે છે કે શું વપરાશકર્તાએ લોગઆઉટ બટન પર ક્લિક કર્યું છે. જો હા, તો સિસ્ટમ તેમને લૉગ આઉટ કરે છે અને તેમને પાછા લૉગિન પૃષ્ઠ પર રીડાયરેક્ટ કરે છે.

હવે આગળ વધો, તમારી જરૂરિયાતોને અનુરૂપ તેને કસ્ટમાઇઝ કરો અને એક અદ્ભુત સાઇટ બનાવો. જો તમને કોઈ ચિંતા હોય અથવા તમારે સ્પષ્ટતા કરવાની જરૂર હોય, તો તેને નીચેની ટિપ્પણીઓમાં મૂકો અને મદદ આવશે.

તમે હંમેશા સોશિયલ મીડિયા પર શેર કરીને અથવા તમારા મિત્રો અને સહકાર્યકરોને મારા બ્લોગની ભલામણ કરીને સમર્થન આપી શકો છો.

આજે આપણે લોકપ્રિય CMS જુમલામાં 1-દિવસની નિર્ણાયક નબળાઈના શોષણને જોઈશું, જે ઓક્ટોબરના અંતમાં ઈન્ટરનેટ પર વિસ્ફોટ થયો હતો. અમે સંખ્યાઓ સાથે નબળાઈઓ વિશે વાત કરીશું CVE-2016-8869, CVE-2016-8870અને CVE-2016-9081. આ ત્રણેય કોડના એક ભાગમાંથી આવે છે જે ફ્રેમવર્કની ઊંડાઈમાં પાંચ વર્ષો સુધી લપસી પડે છે, પાંખોમાં રાહ જુએ છે, માત્ર ત્યારે જ મુક્ત થાય છે અને તેની સાથે અરાજકતા, હેક કરેલી સાઇટ્સ અને આ જુમલાના નિર્દોષ વપરાશકર્તાઓના આંસુ લાવે છે. ફક્ત સૌથી બહાદુર અને હિંમતવાન વિકાસકર્તાઓ, જેમની આંખો મોનિટરના પ્રકાશથી લાલ હોય છે, અને જેમના કીબોર્ડ બ્રેડ ક્રમ્બ્સથી ભરેલા છે, તેઓ દુષ્ટ આત્માઓને પડકારવામાં અને સુધારાની વેદી પર તેમના માથા મૂકવા સક્ષમ હતા.

ચેતવણી

બધી માહિતી ફક્ત માહિતીના હેતુઓ માટે પ્રદાન કરવામાં આવી છે. આ લેખની સામગ્રીથી થતા કોઈપણ સંભવિત નુકસાન માટે ન તો સંપાદકો કે લેખક જવાબદાર છે.

જ્યાં તે બધું શરૂ થયું

ઑક્ટોબર 6, 2016 ના રોજ, ડેમિસ પાલ્માએ સ્ટેક એક્સચેન્જ પર એક વિષય બનાવ્યો જેમાં તેણે પૂછ્યું: શા માટે, વાસ્તવમાં, જુમલા સંસ્કરણ 3.6 માં સમાન નામના રજિસ્ટર() સાથે વપરાશકર્તાઓની નોંધણી માટે બે પદ્ધતિઓ છે? પ્રથમ એક UsersControllerRegistration નિયંત્રકમાં છે અને બીજું UsersControllerUser નિયંત્રકમાં છે. ડેમિસ એ જાણવા માગે છે કે શું UsersControllerUser::register() પદ્ધતિનો ક્યાંક ઉપયોગ કરવામાં આવ્યો હતો, અથવા જો તે જૂના તર્કથી બચી ગયેલી ઉત્ક્રાંતિવાદી અનાક્રોનિઝમ હતી. તેમની ચિંતા એ હતી કે આ પદ્ધતિનો ઉપયોગ કોઈપણ દૃષ્ટિકોણથી ન થાય તો પણ તેને ઘડાયેલ ક્વેરી દ્વારા બોલાવી શકાય છે. જેના માટે મને ઇટોક્ટોપસ ઉપનામ હેઠળ વિકાસકર્તા તરફથી પ્રતિસાદ મળ્યો, જેણે પુષ્ટિ કરી: સમસ્યા ખરેખર અસ્તિત્વમાં છે. અને જુમલા ડેવલપર્સને રિપોર્ટ મોકલ્યો.

પછી ઘટનાઓ સૌથી ઝડપથી વિકસિત થઈ. ઑક્ટોબર 18ના રોજ, જુમલા ડેવલપર્સે ડેમિસનો અહેવાલ સ્વીકાર્યો, જેણે તે સમય સુધીમાં એક PoC તૈયાર કર્યો હતો જે વપરાશકર્તાની નોંધણીને મંજૂરી આપશે. તેમણે તેમની વેબસાઇટ પર એક નોંધ પ્રકાશિત કરી, જ્યાં તેમણે તેમને મળેલી સમસ્યા અને આ બાબતે તેમના વિચારો વિશે સામાન્ય શબ્દોમાં વાત કરી. તે જ દિવસે, જુમલા 3.6.3 નું નવું સંસ્કરણ બહાર પાડવામાં આવ્યું છે, જેમાં હજી પણ સંવેદનશીલ કોડ છે.

આ પછી, ડેવિડ ટેમ્પેલીની બગને સામાન્ય વપરાશકર્તા નહીં, પરંતુ એક એડમિનિસ્ટ્રેટરની નોંધણીના મુદ્દા પર ફેરવે છે. અને 21 ઓક્ટોબરે, જુમલા સુરક્ષા ટીમ પાસે એક નવો કેસ આવ્યો. તે પહેલાથી જ વિશેષાધિકારો વધારવા વિશે વાત કરે છે. તે જ દિવસે, જુમલા વેબસાઇટ પર એક જાહેરાત દેખાય છે કે મંગળવાર, ઑક્ટોબર 25, સીરીયલ નંબર 3.6.3 સાથેનું આગલું સંસ્કરણ રિલીઝ કરવામાં આવશે, જે સિસ્ટમ કર્નલમાં ગંભીર નબળાઈને સુધારે છે.

ઑક્ટોબર 25 જુમલા સિક્યોરિટી સ્ટ્રાઈક ટીમને ડેમિસ દ્વારા શોધાયેલ કોડના ટુકડા દ્વારા સર્જાયેલી નવીનતમ સમસ્યા મળી. પછી 21 ઓક્ટોબરના રોજ અસ્પષ્ટ નામ Prepare 3.6.4 સ્ટેબલ રીલીઝ સાથેની કમિટને સત્તાવાર જુમલા રીપોઝીટરીની મુખ્ય શાખામાં ધકેલવામાં આવે છે, જે કમનસીબ બગને ઠીક કરે છે.

આ બહાર આવ્યા પછી, અસંખ્ય રસ ધરાવતી વ્યક્તિઓ વિકાસકર્તા સમુદાયમાં જોડાય છે - તેઓ નબળાઈને પ્રોત્સાહન આપવા અને શોષણ તૈયાર કરવાનું શરૂ કરે છે.

ઑક્ટોબર 27 ના રોજ, સંશોધક હેરી રોબર્ટ્સ Xiphos રિસર્ચ રિપોઝીટરી પર એક તૈયાર એક્સપ્લોઈટ અપલોડ કરે છે જે PHP ફાઇલને સંવેદનશીલ CMS સાથે સર્વર પર અપલોડ કરી શકે છે.

વિગતો

સારું, પૃષ્ઠભૂમિ સમાપ્ત થઈ ગઈ છે, ચાલો સૌથી રસપ્રદ ભાગ તરફ આગળ વધીએ - નબળાઈનું વિશ્લેષણ. મેં ટેસ્ટ વર્ઝન તરીકે જુમલા 3.6.3 ઇન્સ્ટોલ કર્યું છે, તેથી તમામ લાઇન નંબરો આ વર્ઝન માટે સુસંગત રહેશે. અને ફાઈલોના તમામ પાથ કે જે તમે નીચે જોશો તે સ્થાપિત CMS ના રુટને સંબંધિત સૂચવવામાં આવશે.

ડેમિસ પાલ્માની શોધ બદલ આભાર, અમે જાણીએ છીએ કે ત્યાં બે પદ્ધતિઓ છે જે સિસ્ટમમાં વપરાશકર્તા નોંધણી કરે છે. પ્રથમનો ઉપયોગ CMS દ્વારા થાય છે અને તે ફાઇલ /components/com_users/controllers/registration.php:108 માં સ્થિત છે. બીજો (જેને આપણે કૉલ કરવાની જરૂર પડશે) /components/com_users/controllers/user.php:293 માં રહે છે. ચાલો તેના પર નજીકથી નજર કરીએ.

286: /** 287: * વપરાશકર્તાની નોંધણી કરવાની પદ્ધતિ. 288: * 289: * @return boolean 290: * 291: * @ 1.6 292 થી: */ 293: પબ્લિક ફંક્શન રજિસ્ટર() 294: ( 295: JSession::checkToken("post") અથવા jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // ફોર્મ ડેટા મેળવો: $this->input->post->get("user", array(), "array"); 315: $return = $model->validate($form, $data) 318: // જો ($return === false) 319: (... 345: / નોંધણી પૂર્ણ કરો 346: $return = $model->register($data);

અહીં મેં માત્ર રસપ્રદ પંક્તિઓ છોડી છે. જુમલા રિપોઝીટરીમાં સંવેદનશીલ પદ્ધતિનું સંપૂર્ણ સંસ્કરણ જોઈ શકાય છે.

ચાલો જાણીએ કે સામાન્ય વપરાશકર્તા નોંધણી દરમિયાન શું થાય છે: કયો ડેટા મોકલવામાં આવે છે અને તેની પ્રક્રિયા કેવી રીતે થાય છે. જો વપરાશકર્તા નોંધણી સેટિંગ્સમાં સક્ષમ હોય, તો ફોર્મ http://joomla.local/index.php/component/users/?view=registration પર મળી શકે છે.


કાયદેસર વપરાશકર્તા નોંધણી વિનંતી નીચેના સ્ક્રીનશોટ જેવી લાગે છે.


com_users ઘટક વપરાશકર્તાઓ સાથે કામ કરવા માટે જવાબદાર છે. વિનંતીમાં કાર્ય પરિમાણ પર ધ્યાન આપો. તેનું ફોર્મેટ $controller.$method છે. ચાલો ફાઈલ સ્ટ્રક્ચર જોઈએ.

ફોલ્ડરમાં સ્ક્રિપ્ટોના નામ નિયંત્રકોકહેવાતા નિયંત્રકોના નામોને અનુરૂપ. અમારી વિનંતીમાં હવે $controller = "નોંધણી" શામેલ હોવાથી, ફાઇલને કૉલ કરવામાં આવશે registration.phpઅને તેની રજીસ્ટર() પદ્ધતિ.

ધ્યાન, પ્રશ્ન: નોંધણી પ્રક્રિયાને કોડમાં સંવેદનશીલ જગ્યાએ કેવી રીતે સ્થાનાંતરિત કરવી? તમે કદાચ પહેલાથી જ અનુમાન લગાવ્યું હશે. નબળા અને વાસ્તવિક પદ્ધતિઓના નામ સમાન છે (રજિસ્ટર), તેથી આપણે ફક્ત કહેવાતા નિયંત્રકનું નામ બદલવાની જરૂર છે. અમારું સંવેદનશીલ નિયંત્રક ક્યાં સ્થિત છે? તે સાચું છે, ફાઇલમાં user.php. તે બહાર આવ્યું $controller = "user" . બધું એકસાથે મૂકીને આપણને task = user.register મળે છે. હવે અમને જોઈતી પદ્ધતિ દ્વારા નોંધણી વિનંતી પર પ્રક્રિયા કરવામાં આવે છે.


બીજી વસ્તુ જે આપણે કરવાની જરૂર છે તે છે સાચા ફોર્મેટમાં ડેટા મોકલવો. અહીં બધું સરળ છે. કાયદેસર રજીસ્ટર() અમારી પાસેથી jform નામની એરેની અપેક્ષા રાખે છે, જેમાં અમે રજીસ્ટ્રેશન ડેટા - નામ, લોગિન, પાસવર્ડ, ઈમેલ (વિનંતી સાથે સ્ક્રીનશોટ જુઓ) પાસ કરીએ છીએ.

  • /components/com_users/controllers/registration.php: 124: // વપરાશકર્તા ડેટા મેળવો.

125: $requestData = $this->input->post->get("jform", array(), "array");

  • અમારા ક્લાયન્ટને આ ડેટા યુઝર નામના એરે પાસેથી મળે છે.

/components/com_users/controllers/user.php: 301: // ફોર્મ ડેટા મેળવો.

302: $data = $this->input->post->get("user", array(), "array");

  • તેથી, અમે jfrom થી user સુધી વિનંતીમાં તમામ પરિમાણોના નામ બદલીએ છીએ.

અમારું ત્રીજું પગલું માન્ય CSRF ટોકન શોધવાનું છે, કારણ કે તેના વિના કોઈ નોંધણી થશે નહીં.


/components/com_users/controllers/user.php: 296: JSession::checkToken("પોસ્ટ") અથવા jexit(JText::_("JINVALID_TOKEN")); CVE-2016-8870તે MD5 હેશ જેવું લાગે છે, અને તમે તેને લઈ શકો છો, ઉદાહરણ તરીકે, સાઇટ પરના અધિકૃત ફોર્મમાંથી /index.php/component/users/?view=login.

UsersControllerRegistration કંટ્રોલરની "વર્કિંગ" રજિસ્ટર() પદ્ધતિમાં તે આના જેવું દેખાય છે:

  • /components/com_users/controllers/registration.php: 113: // જો નોંધણી અક્ષમ છે - લોગિન પૃષ્ઠ પર રીડાયરેક્ટ કરો.

114: જો (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) લોગિન", ખોટા)); 117: 118: ખોટા પરત કરો; 119: )

  • અને તેથી સંવેદનશીલમાં:

/components/com_users/controllers/user.php:

હા, કોઈ રસ્તો નથી.

બીજી, વધુ ગંભીર સમસ્યાને સમજવા માટે, ચાલો આપણે બનાવેલી વિનંતી મોકલીએ અને જુઓ કે કોડના વિવિધ ભાગોમાં તે કેવી રીતે અમલમાં આવે છે. અહીં તે ભાગ છે જે કાર્યકર પદ્ધતિમાં વપરાશકર્તા દ્વારા સબમિટ કરેલા ડેટાને માન્ય કરવા માટે જવાબદાર છે:

સાતત્ય ફક્ત સભ્યો માટે જ ઉપલબ્ધ છે

વિકલ્પ 1. સાઇટ પરની બધી સામગ્રી વાંચવા માટે "સાઇટ" સમુદાયમાં જોડાઓ

નિર્દિષ્ટ સમયગાળામાં સમુદાયમાં સભ્યપદ તમને તમામ હેકર સામગ્રીની ઍક્સેસ આપશે, તમારું વ્યક્તિગત સંચિત ડિસ્કાઉન્ટ વધારશે અને તમને વ્યાવસાયિક Xakep સ્કોર રેટિંગ એકઠું કરવાની મંજૂરી આપશે!

રજીસ્ટ્રેશન સિસ્ટમ બનાવવાની પ્રક્રિયા ખૂબ જ કામની છે. તમારે કોડ લખવાની જરૂર છે જે ઇમેઇલ સરનામાંની માન્યતાને બે વાર તપાસે છે, પુષ્ટિકરણ ઇમેઇલ્સ મોકલે છે, પાસવર્ડ્સ પુનઃપ્રાપ્ત કરવાની ક્ષમતા પ્રદાન કરે છે, પાસવર્ડ્સને સુરક્ષિત જગ્યાએ સંગ્રહિત કરે છે, ઇનપુટ ફોર્મ્સને માન્ય કરે છે અને ઘણું બધું. જ્યારે તમે આ બધું કરશો ત્યારે પણ, વપરાશકર્તાઓ નોંધણી કરાવવા માટે અનિચ્છા કરશે, કારણ કે સૌથી ઓછા નોંધણી માટે પણ તેમની પ્રવૃત્તિની જરૂર છે.

આજના ટ્યુટોરીયલમાં, અમે એક સરળ નોંધણી સિસ્ટમ વિકસાવીશું જેને કોઈપણ પાસવર્ડની જરૂર રહેશે નહીં! પરિણામો એક એવી સિસ્ટમ હશે કે જેને હાલની PHP વેબસાઇટમાં સરળતાથી સંશોધિત અથવા સંકલિત કરી શકાય છે. જો તમને રસ હોય, તો વાંચતા રહો.

PHP

હવે અમે PHP કોડ સાથે પ્રારંભ કરવા માટે તૈયાર છીએ. નોંધણી સિસ્ટમની મુખ્ય કાર્યક્ષમતા વપરાશકર્તા વર્ગ દ્વારા પ્રદાન કરવામાં આવે છે, જે તમે નીચે જોઈ શકો છો. વર્ગ ઉપયોગ કરે છે (), જે એક ન્યૂનતમ ડેટાબેઝ લાઇબ્રેરી છે. વપરાશકર્તા વર્ગ ડેટાબેસેસને ઍક્સેસ કરવા, લોગિન ટોકન્સ બનાવવા અને તેને માન્ય કરવા માટે જવાબદાર છે. તે અમને એક સરળ ઇન્ટરફેસ સાથે રજૂ કરે છે જે તમારી PHP આધારિત વેબસાઇટ્સની નોંધણી સિસ્ટમમાં સરળતાથી સામેલ કરી શકાય છે.

User.class.php
// ખાનગી ORM ઉદાહરણ

/**
ખાનગી $orm;
* ટોકન સ્ટ્રિંગ દ્વારા વપરાશકર્તા શોધો. માત્ર માન્ય ટોકન્સ લેવામાં આવે છે
* @param શબ્દમાળા $token શોધવા માટે ટોકન
* @return વપરાશકર્તા
*/

જાહેર સ્થિર કાર્ય findByToken($token)(

// તેને ડેટાબેઝમાં શોધો અને ખાતરી કરો કે ટાઇમસ્ટેમ્પ સાચો છે


->જ્યાં("ટોકન", $token)
->જ્યાં_કાચા("ટોકન_માન્યતા > NOW()")
->find_one();

જો(!$ પરિણામ)(
ખોટા પરત કરો;
}

નવા વપરાશકર્તાને પરત કરો($ પરિણામ);
}

/**
* કાં તો લૉગિન કરો અથવા વપરાશકર્તાની નોંધણી કરો.
* @return વપરાશકર્તા
*/

સાર્વજનિક સ્ટેટિક ફંક્શન લૉગિન અથવા રજિસ્ટર($email)(

// જો આવા વપરાશકર્તા પહેલેથી અસ્તિત્વમાં છે, તો તેને પરત કરો

જો(વપરાશકર્તા::અસ્તિત્વમાં છે($email))(
નવા વપરાશકર્તા ($email) પરત કરો;
}

// નહિંતર, તેને બનાવો અને તેને પરત કરો

રીટર્ન યુઝર::ક્રિએટ($ઈમેલ);
}

/**
* એક નવો વપરાશકર્તા બનાવો અને તેને ડેટાબેઝમાં સાચવો
* @param શબ્દમાળા $email વપરાશકર્તાનું ઈમેલ સરનામું
* @return વપરાશકર્તા
*/

ખાનગી સ્થિર કાર્ય બનાવો($email)(

// ડેટાબેઝમાં નવો વપરાશકર્તા લખો અને તેને પરત કરો

$result = ORM::for_table("reg_users")->create();
$result->email = $email;
$result->સાચવો();

નવા વપરાશકર્તાને પરત કરો($ પરિણામ);
}

/**
* ડેટાબેઝમાં આવા વપરાશકર્તા અસ્તિત્વમાં છે કે કેમ તે તપાસો અને બુલિયન પરત કરો.
* @param શબ્દમાળા $email વપરાશકર્તાનું ઈમેલ સરનામું
* @return બુલિયન
*/

સાર્વજનિક સ્થિર કાર્ય અસ્તિત્વમાં છે($email)(

// શું વપરાશકર્તા ડેટાબેઝમાં અસ્તિત્વ ધરાવે છે?
$result = ORM::for_table("reg_users")
->જ્યાં("ઇમેઇલ", $email)
->ગણતરી();

પરત $રિઝલ્ટ == 1;
}

/**
* એક નવો વપરાશકર્તા પદાર્થ બનાવો
* @param $param ORM ઉદાહરણ, id, ઇમેઇલ અથવા નલ
* @return વપરાશકર્તા
*/

સાર્વજનિક કાર્ય __construct($param = null)(

જો($પરમ ઉદાહરણ ORM)(

// એક ORM દાખલો પસાર કરવામાં આવ્યો હતો
$this->orm = $param;
}
બાકી જો(is_string($param))(

// એક ઇમેઇલ પસાર કરવામાં આવ્યો હતો
$this->
->જ્યાં("ઇમેઇલ", $param)
->find_one();
}
બીજું(

જો(is_numeric($param))(
// એક વપરાશકર્તા આઈડી પરિમાણ તરીકે પસાર કરવામાં આવી હતી
$id = $param;
}
બાકી જો(સંપત્તિ($_SESSION["loginid"]))(

// કોઈ વપરાશકર્તા ID પસાર કરવામાં આવ્યો ન હતો, સત્રમાં જુઓ
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
->જ્યાં("id", $id)
->find_one();
}

/**
* નવું SHA1 લૉગિન ટોકન જનરેટ કરે છે, તેને ડેટાબેઝમાં લખે છે અને પરત કરે છે.
* @return શબ્દમાળા
*/

જાહેર કાર્ય જનરેટ ટોકન())(
// લૉગ ઇન થયેલા વપરાશકર્તા માટે ટોકન જનરેટ કરો. તેને ડેટાબેઝમાં સેવ કરો.

$token = sha1($this->email.time().rand(0, 1000000));

// ટોકનને ડેટાબેઝમાં સાચવો,
// અને તેને માત્ર આગામી 10 મિનિટ માટે માન્ય તરીકે ચિહ્નિત કરો

$this->orm->set("ટોકન", $token);
$this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
$this->orm->save();

$token પરત કરો;
}

/**
*આ વપરાશકર્તાને લોગિન કરો
* @return void
*/

સાર્વજનિક કાર્ય લૉગિન()

// વપરાશકર્તાને લૉગ ઇન તરીકે માર્ક કરો
$_SESSION["loginid"] = $this->orm->id;

// છેલ્લા_લોગિન ડીબી ફીલ્ડને અપડેટ કરો
$this->orm->set_expr("last_login", "NOW()");
$this->orm->save();
}

/**
* સત્રનો નાશ કરો અને વપરાશકર્તાને લોગઆઉટ કરો.
* @return void
*/

સાર્વજનિક કાર્ય લોગઆઉટ()
$_SESSION = એરે();
અનસેટ($_SESSION);
}

/**
* તપાસો કે વપરાશકર્તા લૉગ ઇન છે કે કેમ.
* @return બુલિયન
*/

સાર્વજનિક કાર્ય લૉગિન())(
પરત isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
}

/**
* તપાસો કે શું વપરાશકર્તા એડમિનિસ્ટ્રેટર છે
* @return બુલિયન
*/

જાહેર કાર્ય છે એડમિન())(
$this->rank() == "એડમિનિસ્ટ્રેટર" પરત કરો;
}

/**
* વપરાશકર્તાનો પ્રકાર શોધો. તે એડમિન અથવા નિયમિત હોઈ શકે છે.
* @return શબ્દમાળા
*/

જાહેર કાર્ય રેન્ક())(
જો($this->orm->ક્રમ == 1)(
"એડમિનિસ્ટ્રેટર" પરત કરો;
}

"નિયમિત" પાછા ફરો;
}

/**
* ખાનગી તત્વોને ઍક્સેસ કરવા માટેની જાદુઈ પદ્ધતિ
* વપરાશકર્તા ઑબ્જેક્ટના ગુણધર્મો તરીકે $orm ઉદાહરણ
* @param શબ્દમાળા $key એક્સેસ કરેલ પ્રોપર્ટીનું નામ
* @return મિશ્ર
*/

સાર્વજનિક કાર્ય __get($key)(
if(isset($this->orm->$key))(
$this->orm->$key પરત કરો;
}

રીટર્ન નલ;
}
}
ટોકન્સ અલ્ગોરિધમનો ઉપયોગ કરીને જનરેટ થાય છે અને ડેટાબેઝમાં સંગ્રહિત થાય છે. token_validity કૉલમને 10 મિનિટ પર સેટ કરવા માટે અમે MySQL નો ઉપયોગ કરીએ છીએ. ટોકન માન્ય કરતી વખતે, અમે એન્જિનને કહીએ છીએ કે અમને એક ટોકનની જરૂર છે, token_validity ફીલ્ડ હજુ સુધી સમાપ્ત થયું નથી. આ રીતે અમે તે સમયને મર્યાદિત કરીએ છીએ જે દરમિયાન ટોકન માન્ય રહેશે.

નોંધ લો કે અમે યુઝર ઑબ્જેક્ટના પ્રોપર્ટીઝને એક્સેસ કરવા માટે ડોક્યુમેન્ટના અંતે __get() મેજિક મેથડનો ઉપયોગ કરીએ છીએ. આ અમને ડેટાબેઝમાં પ્રોપર્ટીઝ તરીકે સંગ્રહિત ડેટાને ઍક્સેસ કરવાની મંજૂરી આપે છે: $user->email, $user->token. ઉદાહરણ તરીકે, ચાલો જોઈએ કે આપણે નીચેના કોડ સ્નિપેટમાં આ વર્ગનો ઉપયોગ કેવી રીતે કરી શકીએ:


અન્ય ફાઇલ કે જે જરૂરી કાર્યક્ષમતાને સંગ્રહિત કરે છે તે functions.php છે. ત્યાં અમારી પાસે કેટલાક સહાયક કાર્યો છે જે અમને બાકીના કોડને વધુ સુઘડ રાખવા દે છે.

Functions.php

ફંક્શન send_email($from, $to, $subject, $message)(

// ઈમેલ મોકલવા માટે હેલ્પર ફંક્શન

$headers = "MIME-સંસ્કરણ: 1.0" . "\r\n";
$headers .= "સામગ્રી-પ્રકાર: ટેક્સ્ટ/પ્લેન; charset=utf-8" . "\r\n";
$headers .= "પ્રેષક: ".$થી . "\r\n";

રીટર્ન મેઇલ($to, $subject, $message, $headers);
}

કાર્ય get_page_url())(

// PHP ફાઇલનું URL શોધો

$url = "http".(ખાલી($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

જો(સંપત્તિ($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
$url.= $_SERVER["REQUEST_URI"];
}
બીજું(
$url.= $_SERVER["PATH_INFO"];
}

$url પરત કરો;
}

કાર્ય દર_મર્યાદા($ip, $limit_hour = 20, $limit_10_min = 10)(

// આ IP સરનામા દ્વારા છેલ્લા કલાક માટે લોગિન પ્રયાસોની સંખ્યા

$count_hour = ORM::for_table("reg_login_attempt")
->
->જ્યાં_કાચા("ts > SUBTIME(NOW(),"1:00")")
->ગણતરી();

// આ IP એડ્રેસ દ્વારા છેલ્લી 10 મિનિટ માટે લોગિન પ્રયાસોની સંખ્યા

$count_10_min = ORM::for_table("reg_login_attempt")
->જ્યાં("ip", sprintf("%u", ip2long($ip)))
->જ્યાં_કાચા("ts > SUBTIME(NOW(),"0:10")")
->ગણતરી();

જો($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
નવો અપવાદ ફેંકો("ઘણા બધા લોગિન પ્રયાસો!");
}
}

ફંક્શન રેટ_લિમિટ_ટિક($ip, $email)(

// લોગિન પ્રયાસ કોષ્ટકમાં નવો રેકોર્ડ બનાવો

$login_attempt = ORM::for_table("reg_login_attempt")->create();

$login_attempt->email = $email;
$login_attempt->ip = sprintf("%u", ip2long($ip));

$login_attempt->સાચવો();
}

ફંક્શન રીડાયરેક્ટ($url)(
હેડર("સ્થાન: $url");
બહાર નીકળો
}
રેટ_લિમિટ અને રેટ_લિમિટ_ટિક ફંક્શન અમને ચોક્કસ સમયગાળા માટે અધિકૃતતાના પ્રયાસોની સંખ્યાને મર્યાદિત કરવાની મંજૂરી આપે છે. અધિકૃતતાના પ્રયાસો reg_login_attempt ડેટાબેઝમાં રેકોર્ડ કરવામાં આવે છે. જ્યારે લોગિન ફોર્મ ચકાસવામાં આવે છે ત્યારે આ કાર્યો ટ્રિગર થાય છે, જેમ કે તમે નીચેના કોડ સ્નિપેટમાં જોઈ શકો છો.

નીચેનો કોડ index.php પરથી લેવામાં આવ્યો છે અને લોગિન ફોર્મને માન્ય કરવા માટે જવાબદાર છે. તે JSON પ્રતિસાદ આપે છે જે અમે assets/js/script.js માં જોયેલા jQuery કોડ દ્વારા સંચાલિત છે.

index.php

જો(!ખાલી($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// JSON હેડરને આઉટપુટ કરો

હેડર ("સામગ્રી-પ્રકાર: એપ્લિકેશન/જેસન");

// શું ઈમેલ એડ્રેસ માન્ય છે?

જો(!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))(
નવો અપવાદ ફેંકો ("કૃપા કરીને માન્ય ઇમેઇલ દાખલ કરો.");
}

// જો વ્યક્તિ ઉપર હોય તો આ અપવાદ ફેંકશે
// મંજૂર લૉગિન પ્રયાસ મર્યાદા (વધુ માટે functions.php જુઓ):
દર_મર્યાદા($_SERVER["REMOTE_ADDR"]);

// આ લૉગિન પ્રયાસને રેકોર્ડ કરો
રેટ_લિમિટ_ટિક($_SERVER["REMOTE_ADDR"], $_POST["email"]);

// વપરાશકર્તાને સંદેશ મોકલો

$message = "";
$email = $_POST["ઇમેઇલ"];
$subject = "તમારી લૉગિન લિંક";

જો(!વપરાશકર્તા::અસ્તિત્વમાં છે($email))(
$subject = "નોંધણી કરવા બદલ આભાર!";
$message = "અમારી સાઇટ પર નોંધણી કરવા બદલ આભાર!\n\n";
}

// લૉગિન અથવા વ્યક્તિની નોંધણી કરવાનો પ્રયાસ કરો
$user = User::loginOrRegister($_POST["email"]);

$message.= "તમે આ URL થી લૉગિન કરી શકો છો:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "લિંક 10 મિનિટ પછી આપમેળે સમાપ્ત થઈ જશે.";

$result = send_email($fromEmail, $_POST["email"], $subject, $message);

જો(!$ પરિણામ)(
નવો અપવાદ ફેંકો("તમારો ઈમેલ મોકલવામાં ભૂલ આવી હતી. કૃપા કરીને ફરી પ્રયાસ કરો.");
}

ડાઇ(json_encode(એરે(
"message" => "આભાર! અમે તમારા ઇનબોક્સમાં એક લિંક મોકલી છે. તમારા સ્પામ ફોલ્ડરને પણ તપાસો."
)));
}
}
પકડો(અપવાદ $e)(

ડાઇ(json_encode(એરે(
"ભૂલ" =>1,
"message" => $e->getMessage()
)));
}
સફળ અધિકૃતતા અથવા નોંધણી પર, ઉપરોક્ત કોડ અધિકૃતતા માટેની લિંક સાથે વ્યક્તિને એક ઇમેઇલ મોકલે છે. જનરેટ કરેલ URL ને કારણે ટોકન $_GET ચલ "tkn" તરીકે ઉપલબ્ધ કરાવવામાં આવે છે.

index.php

જો(સંપત્તિ($_GET["tkn"]))(

// શું આ માન્ય લોગિન ટોકન છે?
$user = User::findByToken($_GET["tkn"]);

// હા! વપરાશકર્તાને લોગિન કરો અને સુરક્ષિત પૃષ્ઠ પર રીડાયરેક્ટ કરો.

$user->લોગિન();
રીડાયરેક્ટ("protected.php");
}

// અમાન્ય ટોકન. લોગિન ફોર્મ પર પાછા રીડાયરેક્ટ કરો.
રીડાયરેક્ટ("index.php");
}
$user->login() ચલાવવાથી જરૂરી સત્ર ચલો બનશે, જે વપરાશકર્તાને અનુગામી લોગિન પર લૉગ ઇન રહેવાની મંજૂરી આપશે.

સિસ્ટમમાંથી લૉગ આઉટ કરવું લગભગ સમાન રીતે લાગુ કરવામાં આવે છે:

Index.php

જો(સંપત્તિ($_GET["લોગઆઉટ"]))(

$user = નવા વપરાશકર્તા();

જો($user->loggedIn())(
$user->લોગઆઉટ();
}

રીડાયરેક્ટ("index.php");
}
કોડના અંતે, અમે વપરાશકર્તાને ફરીથી index.php પર રીડાયરેક્ટ કરીએ છીએ, જેથી URL માં ?logout=1 પરિમાણ નાબૂદ થાય છે.

અમારી index.php ફાઇલને પણ સુરક્ષાની જરૂર પડશે - અમે ફોર્મ જોવા માટે પહેલાથી જ લૉગ ઇન થયેલા વપરાશકર્તાઓને ઇચ્છતા નથી. આ કરવા માટે અમે $user->loggedIn() પદ્ધતિનો ઉપયોગ કરીએ છીએ:

Index.php

$user = નવા વપરાશકર્તા();

જો($user->loggedIn())(
રીડાયરેક્ટ("protected.php");
}
છેલ્લે, ચાલો જોઈએ કે તમે તમારા વેબસાઇટ પૃષ્ઠને કેવી રીતે સુરક્ષિત કરી શકો છો અને અધિકૃતતા પછી જ તેને ઍક્સેસિબલ બનાવી શકો છો:

protected.php

// તમારી સાઇટ પર કોઈપણ php પૃષ્ઠને સુરક્ષિત કરવા માટે, main.php શામેલ કરો
// અને એક નવો યુઝર ઑબ્જેક્ટ બનાવો. તે સરળ છે!

need_one "includes/main.php";

$user = નવા વપરાશકર્તા();

જો(!$user->loggedIn())(
રીડાયરેક્ટ("index.php");
}
આ તપાસ કર્યા પછી, તમે ખાતરી કરી શકો છો કે વપરાશકર્તા સફળતાપૂર્વક લૉગ ઇન થઈ ગયો છે. તમારી પાસે ડેટાની ઍક્સેસ પણ હશે જે ડેટાબેઝમાં $user ઑબ્જેક્ટના ગુણધર્મો તરીકે સંગ્રહિત છે. વપરાશકર્તાના ઇમેઇલ અને તેમના રેન્કને પ્રદર્શિત કરવા માટે, નીચેના કોડનો ઉપયોગ કરો:

ઇકો "તમારી ઇમેઇલ: ".$user->email;
ઇકો "તમારી રેન્ક: ".$user->rank();
અહીં rank() એ પદ્ધતિ છે કારણ કે ડેટાબેઝમાંની રેન્ક કોલમમાં સામાન્ય રીતે સંખ્યાઓ હોય છે (નિયમિત વપરાશકર્તાઓ માટે 0 અને સંચાલકો માટે 1) અને આપણે આ બધાને રેન્ક નામોમાં રૂપાંતરિત કરવાની જરૂર છે, જે આ પદ્ધતિનો ઉપયોગ કરીને અમલમાં મૂકવામાં આવે છે. પ્રમાણભૂત વપરાશકર્તાને એડમિનિસ્ટ્રેટરમાં કન્વર્ટ કરવા માટે, ફક્ત phpmyadmin (અથવા કોઈપણ અન્ય ડેટાબેઝ પ્રોગ્રામ) માં વપરાશકર્તાની એન્ટ્રીને સંપાદિત કરો. એડમિનિસ્ટ્રેટર તરીકે, વપરાશકર્તાને કોઈ વિશેષ ક્ષમતાઓ આપવામાં આવશે નહીં. સંચાલકોને કયા અધિકારો આપવાના છે તે પસંદ કરવાનો તમને અધિકાર છે.

તૈયાર!

આ સાથે અમારી સરળ નોંધણી સિસ્ટમ તૈયાર છે! તમે હાલની PHP સાઇટ પર તેનો ઉપયોગ કરી શકો છો અથવા તમારી પોતાની જરૂરિયાતોને અનુરૂપ તેને આધુનિક બનાવી શકો છો.

તો, ચાલો કલ્પના કરીએ કે અમારી પાસે તૈયાર php+mysql એપ્લિકેશન છે. પ્રથમ, ચાલો નોંધણી કરીએ. તમારી નોંધણીની પુષ્ટિ કરતી એક ઇમેઇલ તમને મોકલવામાં આવશે. આગળ, લિંકને અનુસરો, પાસવર્ડ અને પુષ્ટિકરણ દાખલ કરો અને સાચવો પર ક્લિક કરો. પ્રથમ તબક્કો પૂર્ણ થઈ ગયો છે, ચાલો આગળ વધીએ.

સફળ નોંધણી પછી, સેવા અમને ક્લાયંટને ડાઉનલોડ કરવાની ઑફર કરે છે. સ્વાભાવિક રીતે, દરેક OS પાસે તેના પોતાના ઇન્સ્ટોલેશન વિકલ્પ છે. આગળ આપણે UNIX માટે એક ઉદાહરણ ધ્યાનમાં લઈશું.

અમે કન્સોલમાં લખીએ છીએ:

Wget -qO- https://toolbelt.heroku.com/install.sh | sh

ઇન્સ્ટોલેશનમાં કોઈ સમસ્યા ન હોવી જોઈએ. અમને ઇન્સ્ટોલ અને ગોઠવેલ ગિટની પણ જરૂર છે, હું આ વિશે લખીશ નહીં; ઇન્ટરનેટ આ વિશેની માહિતીથી ભરેલું છે.

ઇન્સ્ટોલેશન પછી, તમારે એપ્લિકેશનમાં લૉગ ઇન કરવાની જરૂર છે:

$ heroku લૉગિન

તમારો ઈમેલ અને પાસવર્ડ દાખલ કરો. એપ્લિકેશને તમને અધિકૃત કરવી જોઈએ અને તમારી સાર્વજનિક ssh કીને આપમેળે ડાઉનલોડ કરવી જોઈએ. જો આમ ન થાય, તો તમારા એકાઉન્ટ (https://dashboard.heroku.com/account) પર જાઓ અને સાર્વજનિક ssh ઉમેરો:

સાર્વજનિક ssh જોવા માટે, કન્સોલમાં લખો:

$ બિલાડી ~/.ssh/id_rsa.pub

કમાન્ડનો ઉપયોગ કરીને કી પણ ઉમેરી શકાય છે:

$ heroku કી: ઉમેરો

તેથી, તમારી પ્રથમ "હીરોકુ એપ્લિકેશન" બનાવવા માટે બધું તૈયાર છે. અમે તે નિર્દેશિકા પર જઈએ છીએ જ્યાં અમારી એપ્લિકેશન સંગ્રહિત છે અને કન્સોલમાં લખીએ છીએ:

$ heroku બનાવો

પરિણામે, તમારે આના જેવું કંઈક જોવું જોઈએ:

$ git પુશ હીરોકુ માસ્ટર

પછી અમે કન્સોલમાં લખીએ છીએ:

$ heroku ઓપન

અમારી સાઇટ બ્રાઉઝરમાં ખુલશે. જો આપણે mysql નો ઉપયોગ ન કર્યો હોત, તો આ બધું સમાપ્ત થઈ જશે, પરંતુ આપણે થોડું વધારે કામ કરવું પડશે. મોટે ભાગે, સ્ક્રીન પર ભૂલો દેખાય છે જે કહે છે કે mysql થી કનેક્ટ થવું અશક્ય છે. તમે લોગ ખોલીને પણ ભૂલો જોઈ શકો છો:

$ heroku લોગ

mysql સાથે કામ કરવા માટે અમે ClearDB એડનનો ઉપયોગ કરીશું. તેને ઇન્સ્ટોલ કરવા માટે, તમારે પહેલા dashboard.heroku.com/account પર તમારી ક્રેડિટ કાર્ડ માહિતી ભરવાની જરૂર છે:

જો તમે આ ન કરો તો, ClearDB ઇન્સ્ટોલ કરતી વખતે તમને એક ભૂલ દેખાશે:

ડ્રાય-ટાઇગા-2649 પર cleardb:ignite ઉમેરવાનું... નિષ્ફળ થયું
! આ એડ-ઓન ઇન્સ્ટોલ કરવા માટે કૃપા કરીને તમારું એકાઉન્ટ ચકાસો
! વધુ માહિતી માટે, devcenter.heroku.com/categories/billing જુઓ
! heroku.com/verify પર હમણાં ચકાસો

ClearDB ઇન્સ્ટોલ કરવા માટે નીચેનો આદેશ છે:

$ heroku addons:add cleardb:ignite in

ClearDB ઇન્સ્ટોલ થઈ ગયું છે, હવે ચાલો ડેટાબેઝ એક્સેસ જોઈએ:

$ heroku રૂપરેખા

અમને ફોર્મમાં પરિણામ મળે છે:

CLEARDB_DATABASE_URL:mysql://USER:PASSWORD@HOSTNAME/DBASENAME?reconnect=true

કોઈપણ અનુકૂળ MySQL ક્લાયંટ દ્વારા મેળવેલ એક્સેસનો ઉપયોગ કરીને, સર્વર પર ડેટાબેઝ ડમ્પ અપલોડ કરો.

તમે નીચે પ્રમાણે php માં ડેટાબેઝને ઍક્સેસ કરી શકો છો:

$url=parse_url(getenv("CLEARDB_DATABASE_URL"));

$server = $url["હોસ્ટ"];

$username = $url["user"];

$password = $url["પાસ"];

$db = substr($url["પાથ"],1);

mysqli_connect($server, $username, $password);

mysqli_select_db($db);

અમે કન્સોલમાં લખીએ છીએ:

સ્થાનિક સાઇટ અને Heroku માટે દર વખતે રૂપરેખામાં ફેરફાર ન કરવા માટે, તમે ચેક ઉમેરી શકો છો:

જો ($_SERVER["SERVER_NAME"] == "thawing-island-242342379.herokuapp.com") ( $url = parse_url(getenv("CLEARDB_DATABASE_URL")); $host = $url["host"]; $username = $url["user"]; $password = $url["pass"]; $dbname = substr($url["path"], else ( $host = "localhost"; $dbname = "db "; $username = "user"; $password = "123"; )

APPLICATION_ENV દ્વારા આ કરવું વધુ યોગ્ય રહેશે, પરંતુ મને આ કેવી રીતે કરવું તેની માહિતી મળી નથી. કોઈને ખબર હોય તો લખો.

લગભગ બધું તૈયાર છે. જે બાકી છે તે composer.json ફાઇલને રૂટમાં ઉમેરવાનું છે: