ബോറോവ്സ്കി സൂചിക php ഉപയോക്താവ്. PHP, MySQL എന്നിവയിൽ ലളിതമായ ഒരു ഉപയോക്തൃ രജിസ്ട്രേഷൻ സിസ്റ്റം സൃഷ്ടിക്കുന്നു. $_SERVER അറേ ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു

അംഗീകൃത ഫോം പ്രദർശിപ്പിക്കാൻ ഘടകം ഉപയോഗിക്കുന്നു. സാധാരണയായി ഒരു വെബ്സൈറ്റ് ഡിസൈൻ ടെംപ്ലേറ്റിൽ ഉപയോഗിക്കുന്നു. ഘടകം സ്റ്റാൻഡേർഡ് ആണ് കൂടാതെ മൊഡ്യൂൾ വിതരണത്തിൽ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്. വിഷ്വൽ എഡിറ്ററിൽ, ഘടകം പാതയിൽ സ്ഥിതിചെയ്യുന്നു: യൂട്ടിലിറ്റികൾ > ഉപയോക്താവ്.

വിഷ്വൽ എഡിറ്ററിൽ, ഘടകം പാതയിൽ സ്ഥിതിചെയ്യുന്നു: സിസ്റ്റം ടൂളുകൾ > ഉപയോക്താവ് > അംഗീകാര ഫോം.

system.auth.form ഘടകത്തെ വിളിക്കുന്നതിനുള്ള ഉദാഹരണം

പാരാമീറ്ററുകളുടെ വിവരണം പാസ്‌വേഡ് വീണ്ടെടുക്കൽ സംവിധാനം (റഫറൻസിനായി)

ഉപയോക്താവ് പാസ്‌വേഡ് വീണ്ടെടുക്കൽ അഭ്യർത്ഥിച്ചിട്ടുണ്ടെങ്കിൽ, ഇനിപ്പറയുന്ന സംവിധാനം അനുസരിച്ച് വീണ്ടെടുക്കൽ സംഭവിക്കുന്നു:

  • പാസ്‌വേഡ് മറന്നോ? എന്നതിൽ ഉപയോക്താവ് ക്ലിക്ക് ചെയ്യുന്നു. അംഗീകാര ഫോമിൽ.
  • സെർവറിന് മാത്രം അറിയാവുന്ന ഒരു രഹസ്യം കണക്കിലെടുത്ത് 32 പ്രതീകങ്ങളുടെ ക്രമരഹിതമായ ഒരു സ്ട്രിംഗ് സൃഷ്ടിക്കപ്പെടുന്നു.
  • ഫലം ഡാറ്റാബേസിൽ രേഖപ്പെടുത്തുകയും ഇമെയിൽ വഴി അയയ്ക്കുകയും ചെയ്യുന്നു. ഇതുപോലുള്ള ലിങ്ക്: http://site.ru/bitrix/admin/index.php?change_password=yes&lang=ru&USER_CHECKWORD=3farde09fay52547f11c68bf17d95760&USER_LOGIN=market, എവിടെ:
    • http://site.ru/bitrix/admin/index.php - അംഗീകാരത്തിലേക്കോ പാസ്‌വേഡ് മാറ്റത്തിലേക്കോ ഉള്ള പാത;
    • change_password=അതെ - പാസ്‌വേഡ് മാറ്റാനുള്ള പ്രവർത്തനം;
    • lang=ru ഭാഷാ ഐഡൻ്റിഫയർ;
    • USER_CHECKWORD=- പാസ്‌വേഡ് മാറ്റുന്നതിനുള്ള നിയന്ത്രണ സ്ട്രിംഗ്, 32 പ്രതീകങ്ങൾ. സ്ട്രിംഗ് പ്രതീകങ്ങൾ ഉപയോഗിക്കുന്നു. md5: ന് ലഭ്യമാണ്.

      പാസ്‌വേഡ് മാറ്റുമ്പോൾ, കൺട്രോൾ ലൈൻ അഭ്യർത്ഥനയിൽ, USER_CHECKWORD= ഇല്ലാതെ കൺട്രോൾ ലൈൻ മാത്രം നൽകുക !

    • &USER_LOGIN=market - ഏത് ഉപയോക്താവിൻ്റെ പാസ്‌വേഡ് മാറ്റുന്നു എന്നതിൻ്റെ സൂചന.
  • ഫോമിൽ നിന്നുള്ള കൺട്രോൾ ലൈൻ ഡാറ്റാബേസിൽ രേഖപ്പെടുത്തിയിരിക്കുന്നതുമായി താരതമ്യം ചെയ്യുമ്പോൾ, ഗ്രൂപ്പ് സുരക്ഷാ നയത്തിൽ വ്യക്തമാക്കിയിരിക്കുന്ന കാലഹരണപ്പെടൽ സമയം കണക്കിലെടുക്കുന്നു.
  • കുറിപ്പ്: പാസ്‌വേഡ് വീണ്ടെടുക്കൽ ഫോമിൽ, പ്രധാന മൊഡ്യൂൾ ക്രമീകരണങ്ങളിൽ പാസ്‌വേഡ് ഫീൽഡ് വീണ്ടെടുക്കുമ്പോൾ CAPTCHA - CAPTCHA ഉപയോഗിക്കുന്നതിന് ശുപാർശ ചെയ്യുന്നു.


    "ബിട്രിക്സ്", 2001-2019, "1C-ബിട്രിക്സ്", 2019

    അവസാന പാഠത്തിൽ, ട്രിപ്പ് ടെംപ്ലേറ്റിൽ എന്ത് ബ്ലോക്കുകൾ അടങ്ങിയിരിക്കുമെന്ന് ഞങ്ങൾ കണ്ടെത്തി, അതിനാൽ ഞങ്ങൾക്ക് ജോലിയിൽ പ്രവേശിക്കാം. ആദ്യം, നമുക്ക് രണ്ട് ഫോൾഡറുകൾ സൃഷ്ടിക്കാം:

    ചിത്രങ്ങൾ - ഈ ഫോൾഡറിൽ ടെംപ്ലേറ്റ് രൂപകൽപ്പന ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഏതെങ്കിലും ഗ്രാഫിക് ഫയലുകൾ അടങ്ങിയിരിക്കും. കാരണം ഞങ്ങൾക്ക് ഇതുവരെ ഡിസൈൻ ഡെവലപ്‌മെൻ്റുകളൊന്നുമില്ല, തുടർന്ന് ഏതെങ്കിലും ഒരു ഗ്രാഫിക് ഫയൽ ഈ ഫോൾഡറിലേക്ക് ഡ്രോപ്പ് ചെയ്യുക, അല്ലാത്തപക്ഷം ജൂംല ടെംപ്ലേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യില്ല കൂടാതെ ഫോൾഡർ ശൂന്യമാണെങ്കിൽ ഒരു പിശക് നൽകും.

    ശ്രദ്ധിക്കുക: ടെംപ്ലേറ്റ് ഇമേജുകളുടെ ഫോൾഡറിൽ ഉള്ളടക്ക ഗ്രാഫിക്സ് അടങ്ങിയിട്ടില്ല!

    css - ഈ ഫോൾഡറിൽ കാസ്കേഡിംഗ് സ്റ്റൈൽ ഷീറ്റ് ഫയലുകൾ അടങ്ങിയിരിക്കും. ആദ്യം, നമുക്ക് അതിൽ ഒരു ശൂന്യമായ template.css ഫയൽ സ്ഥാപിക്കാം, അത് സൈറ്റ് ഘടകങ്ങളിലേക്ക് വ്യത്യസ്ത ഡിസൈൻ ശൈലികൾ നൽകുന്നതിന് ഉപയോഗിക്കും.

    അടുത്തതായി, നിങ്ങൾക്ക് പ്രധാന ഫയൽ index.php സൃഷ്ടിക്കാൻ തുടങ്ങാം, അത് സൈറ്റ് ഘടകങ്ങളുടെ ദൃശ്യ ക്രമീകരണം നിർണ്ണയിക്കുകയും വിവിധ ഘടകങ്ങളും മൊഡ്യൂളുകളും സ്ഥാപിക്കേണ്ട ബ്ലോക്കിൽ ജൂംല CMS-നോട് പറയുകയും ചെയ്യും. PHP, HTML എന്നിവയുടെ സംയോജനമാണ് ഫയൽ.

    കോഡ് എഴുതുമ്പോൾ ഞാൻ എപ്പോഴും മാക്രോമീഡിയ ഡ്രീംവീവർ മാത്രമാണ് ഉപയോഗിക്കുന്നത്. ഒരു മികച്ച പ്രോഗ്രാം, തുടക്കക്കാർക്ക് ഞാൻ ഇത് ശക്തമായി ശുപാർശ ചെയ്യുന്നു, കാരണം ... കോഡിൽ പ്രവർത്തിക്കുമ്പോൾ നിങ്ങൾക്ക് ഒരു തെറ്റ് സംഭവിച്ചിട്ടുണ്ടെങ്കിൽ, പ്രോഗ്രാം തീർച്ചയായും നിങ്ങളുടെ തെറ്റ് ഹൈലൈറ്റ് ചെയ്യും.

    സൈറ്റിൽ നിങ്ങൾ Macromedia Dreamweaver-നുള്ള ഒരു ട്യൂട്ടോറിയൽ കണ്ടെത്തും. നിങ്ങൾ വെബ്‌സൈറ്റുകൾ വികസിപ്പിക്കാൻ പോകുകയാണെങ്കിൽ, പിശകുകളില്ലാതെ ടെംപ്ലേറ്റ് കോഡുകൾ എഡിറ്റുചെയ്യുന്നതിന്, കുറഞ്ഞത് പ്രാരംഭ തലത്തിലെങ്കിലും നിങ്ങൾ ഈ പ്രോഗ്രാം മാസ്റ്റർ ചെയ്യണം.

    പേജ് ഘടകങ്ങളുടെ (ബ്ലോക്കുകൾ) സ്ഥാനനിർണ്ണയം HTML കോഡ് ഉപയോഗിച്ചാണ് ചെയ്യുന്നത്; പ്രത്യേകമായി, ഞങ്ങൾ DIV ടാഗുകൾ ഉപയോഗിക്കും. എന്നാൽ ഞങ്ങളുടെ സൈറ്റ് ജൂംല എഞ്ചിനിൽ എങ്ങനെ പ്രവർത്തിക്കും, അതായത്. ഇത് ചലനാത്മകമായിരിക്കും, തുടർന്ന് നിങ്ങൾ PHP ഭാഷയും ഉപയോഗിക്കേണ്ടിവരും. അതിൻ്റെ സഹായത്തോടെ, ഔട്ട്പുട്ടിംഗ് മൊഡ്യൂളുകൾക്കുള്ള സ്ഥാനങ്ങൾ ഏത് ബ്ലോക്കുകളിൽ സ്ഥിതിചെയ്യും, ഈ സ്ഥാനങ്ങളെ എന്താണ് വിളിക്കുക, ബ്ലോക്കുകൾ തകരുമോ ഇല്ലയോ എന്ന് ഞങ്ങൾ നിർണ്ണയിക്കും. ബാഹ്യ ഫയലുകൾ, ഉള്ളടക്ക ഭാഷ, സൈറ്റിൻ്റെ വലുപ്പം എങ്ങനെ മാറുമെന്ന് സജ്ജീകരിക്കുക തുടങ്ങിയവയിൽ നിന്നുള്ള സ്റ്റൈൽ ഷീറ്റുകൾ ഞങ്ങൾ ബന്ധിപ്പിക്കും.

    index.php

    ഫയൽ തലക്കെട്ട്

    ഫയൽ ഹെഡറിൽ നിരവധി ഭാഗങ്ങൾ അടങ്ങിയിരിക്കുന്നു. PHP ഹെഡർ കോഡിൻ്റെ ആദ്യ ഭാഗം സുരക്ഷാ കാരണങ്ങളാൽ ഫയൽ നേരിട്ട് ആക്സസ് ചെയ്യുന്നില്ലെന്ന് ഉറപ്പാക്കുക എന്നതാണ്.

    < ?php
    നിർവചിച്ച ("_JEXEC") അല്ലെങ്കിൽ മരിക്കുക ;
    JHtml::_("behavior.framework" , true );
    $app = JFactory::getApplication() ;
    ?>
    < ?php echo "< ?" ; ?>xml പതിപ്പ് = "1.0" എൻകോഡിംഗ് =< ?php echo $this - >_charset ?> " ?>

    ഈ പേജ് എങ്ങനെ റെൻഡർ ചെയ്യണമെന്നും CSS എങ്ങനെ വ്യാഖ്യാനിക്കണമെന്നും ബ്രൗസർ തീരുമാനിക്കുന്ന ഒരു പ്രധാന പാരാമീറ്ററാണ് DOCTYPE.

    < ! DOCTYPE html PUBLIC "- / / W3C/ / DTD XHTML 1.0 Strict/ / EN" "http:/ / www.w3.org/ TR/ xhtml1/ DTD/ xhtml1- strict.dtd" >

    ഗ്ലോബൽ കോൺഫിഗറേഷനിൽ നിന്ന് ഇൻസ്റ്റോൾ ചെയ്ത ഭാഷയെ ഇനിപ്പറയുന്ന സ്നിപ്പെറ്റ് വീണ്ടെടുക്കുന്നു.

    < html xmlns= "http:/ / www.w3.org/ 1999/ xhtml" xml:lang= "< ?php echo $this - >ഭാഷ; ?> " lang="< ?php echo $this - >ഭാഷ; ?> " dir = "< ?php echo $this - >സംവിധാനം; ?> " >

    ആഗോള കോൺഫിഗറേഷനിൽ സജ്ജീകരിച്ചിരിക്കുന്ന അധിക തലക്കെട്ട് വിവരങ്ങൾ ഉൾപ്പെടുന്ന ഒരു കോഡാണ് അടുത്തത്. ഏതെങ്കിലും വെബ് പേജിൻ്റെ സോഴ്സ് കോഡ് നോക്കിയാൽ നിങ്ങൾക്ക് ഈ വിവരങ്ങൾ കാണാൻ കഴിയും. പ്രത്യേകിച്ചും, ഇവ നിങ്ങൾക്ക് ഇതിനകം അറിയാവുന്ന മെറ്റാ ടാഗുകളാണ്.

    < head>
    < jdoc:include type= "head" / >

    ഇനിപ്പറയുന്ന തലക്കെട്ട് ലൈനുകളിൽ പ്രധാന ജൂംല CSS ശൈലികളിലേക്കുള്ള ലിങ്കുകൾ അടങ്ങിയിരിക്കുന്നു.

    < link rel= "stylesheet" href= "< ?php echo $this - >baseurl ?> / ടെംപ്ലേറ്റുകൾ/ സിസ്റ്റം / css/ സിസ്റ്റം .css" type= "text/ css" / >
    < link rel= "stylesheet" href= "< ?php echo $this - >baseurl ?> / ടെംപ്ലേറ്റുകൾ/ സിസ്റ്റം / css/ general.css" type="text/ css" / >

    ടെംപ്ലേറ്റ് ഡിസൈൻ ശൈലികൾ ഉപയോഗിക്കുന്നതിന്, CSS ഫോൾഡറിൽ സ്ഥിതി ചെയ്യുന്ന template.css എന്ന കാസ്കേഡിംഗ് സ്റ്റൈൽ ഷീറ്റുകൾ അടങ്ങിയ ഒരു ഫയലിലേക്ക് ഞങ്ങൾ ലിങ്ക് ചെയ്യുന്നു. ഈ ഫയൽ ഇപ്പോൾ ശൂന്യമാണെന്നത് പ്രശ്നമല്ല, പ്രധാന കാര്യം അത് ബന്ധിപ്പിക്കുക എന്നതാണ്, ഞങ്ങൾ ജൂംലയിൽ ടെംപ്ലേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുമ്പോൾ പിന്നീട് ഡിസൈൻ കൈകാര്യം ചെയ്യും. ഇത് ഫലം നിരീക്ഷിക്കുന്നത് എളുപ്പമാക്കും.

    < link rel= "stylesheet" href= "< ?php echo $this - >baseurl ?> /templates/< ?php echo $this - >ടെംപ്ലേറ്റ് ?> / css/ template.css" type= "text/ css" / >

    ഇടതും വലതും സ്ഥാനങ്ങളിൽ മൊഡ്യൂളുകൾ ഇല്ലെങ്കിൽ ഇടത് അല്ലെങ്കിൽ വലത് നിരകൾ ചുരുക്കാൻ ഇനിപ്പറയുന്ന കോഡ് സ്നിപ്പെറ്റ് ഞങ്ങളെ അനുവദിക്കുന്നു. രണ്ട് നിരകളും ചുരുക്കിയാൽ, ഉള്ളടക്കം പേജ് വീതിയുടെ 100% എടുക്കും. ഒരു കോളം മാത്രമേ ഉൾപ്പെടുത്തിയിട്ടുള്ളൂ എങ്കിൽ, ഉള്ളടക്കം 80% എടുക്കും. രണ്ട് കോളങ്ങൾ പ്രവർത്തനക്ഷമമാക്കിയാൽ, പേജ് വീതിയുടെ 60% ഉള്ളടക്കം വരും.

    < ?php
    എങ്കിൽ ($this - > countModules("ഇടത്തും വലത്തും" ) = = 0) $contentwidth = "100" ;
    എങ്കിൽ ($this - > countModules("ഇടത് അല്ലെങ്കിൽ വലത്" ) = = 1) $contentwidth = "80" ;
    എങ്കിൽ ($this - > countModules("ഇടത്തും വലത്തും" ) = = 1) $contentwidth = "60" ;
    ?>

    തലക്കെട്ട് അടയ്ക്കുന്നു

    < / head>

    < body>

    "പേജ്" ബ്ലോക്കിൽ 950px വീതിയുള്ള സൈറ്റ് പേജിൻ്റെ മാത്രം ഡിസൈൻ അടങ്ങിയിരിക്കുന്നു.

    < div id= "page" >

    "ടോപ്പ്" ബ്ലോക്ക് പേജിൻ്റെ ഏറ്റവും മുകളിൽ സ്ഥിതിചെയ്യുന്നു, അതിൽ "ലോഗോ", "യൂസർ1" എന്നീ രണ്ട് ബ്ലോക്കുകൾ അടങ്ങിയിരിക്കുന്നു.

    < div id= "top" >

    "ലോഗോ" ബൊക്കെയിൽ ഞങ്ങൾ ലോഗോയുടെ ഒരു ഗ്രാഫിക് ഫയൽ സ്ഥാപിക്കും; ഇത് സ്റ്റൈൽ ഷീറ്റുകളിൽ വ്യക്തമാക്കും. എന്നാൽ ഞങ്ങൾ index.php ഫയലിൽ സൈറ്റിൻ്റെ പേരിൻ്റെ ഓട്ടോമാറ്റിക് ഡിസ്പ്ലേ എഴുതുകയും H1 ടാഗിൽ പേര് സ്ഥാപിക്കുകയും ചെയ്യുന്നു, ഇത് സെർച്ച് എഞ്ചിൻ ഒപ്റ്റിമൈസേഷന് വളരെ പ്രധാനമാണ്.

    < div id= "logo" >
    < h1> < ?php echo $app - >getCfg("സൈറ്റിൻ്റെ പേര്" ); ?>< / h1>
    < / div>

    സൈറ്റ് തിരയൽ മൊഡ്യൂൾ പ്രദർശിപ്പിക്കുന്നതിന്, അതേ പേരിലുള്ള ബ്ലോക്കിലെ "user1" എന്ന സ്ഥാനം നമുക്ക് നിർവചിക്കാം.

    < div id= "user1" >
    < jdoc:include type= "modules" name= "user1" style= "xhtml" / >
    < / div>
    < / div> < ! - - конец блока top - - >

    "user2" സ്ഥാനത്തുള്ള "user2" ബ്ലോക്കിലെ തിരശ്ചീന മെനു മൊഡ്യൂളിൻ്റെ ഔട്ട്പുട്ട്. ആ സ്ഥാനത്ത് മൊഡ്യൂൾ ഇല്ലെങ്കിൽ ബ്ലോക്ക് തകരും.

    < ?php if ($this - >countModules("user2" ) : ?>
    < div id= "user2 " >
    < jdoc:include type= "modules" name= "user2" style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    അടുത്തതായി സൈറ്റ് ഹെഡർ ബ്ലോക്ക് വരുന്നു. അതിൽ മൊഡ്യൂളുകൾ പ്രദർശിപ്പിക്കുന്നതിനുള്ള "ഹെഡർ" സ്ഥാനം ഞങ്ങൾ നിർവ്വചിക്കും. ആ സ്ഥാനത്ത് മൊഡ്യൂൾ ഇല്ലെങ്കിൽ ബ്ലോക്ക് തകരും. ഹെഡ്ഡർ ഇമേജ് മാത്രമല്ല, ഇമേജ് റൊട്ടേറ്ററുകളും സ്ഥാപിക്കാൻ ഈ ബ്ലോക്കിൻ്റെ കഴിവുകൾ ഞാൻ മനഃപൂർവ്വം വിപുലീകരിച്ചു.

    < ?php if ($this - >കൗണ്ട് മൊഡ്യൂളുകൾ("തലക്കെട്ട് " ) ): ?>
    < div id= "header " >
    < jdoc:include type= "modules" name= "header " style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    "user3" ബ്ലോക്കിൽ, മൊഡ്യൂളുകൾ ഔട്ട്പുട്ട് ചെയ്യുന്നതിന് "user3" എന്ന സ്ഥാനം ഞങ്ങൾ നിർവ്വചിക്കുന്നു.

    "user3" എന്ന ഈ സ്ഥാനത്ത് മൊഡ്യൂൾ ഔട്ട്പുട്ട് ഇല്ലെങ്കിൽ ബ്ലോക്ക് തകരും.

    < ?php if ($this - >countModules("user3" ) : ?>
    < div id= "user3" >
    < jdoc:include type= "modules" name= "user3" style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    ഇടത് നിരയുടെ ഒരു ബ്ലോക്ക് തുറക്കുന്നു, "ഇടത്" സ്ഥാനത്ത് മൊഡ്യൂളുകൾ ഇല്ലെങ്കിൽ അത് തകരും.

    < ?php if ($this - >countModules("ഇടത്" ) ) : ?>
    < div id= "left" >
    < jdoc:include type= "modules" name= "left" style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    ഏറ്റവും പ്രധാനപ്പെട്ട ഉള്ളടക്ക ബ്ലോക്ക് തുറക്കുന്നു, അതിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന നിരകളുടെ എണ്ണം അനുസരിച്ച് പേജ് വീതിയുടെ 100%, 80%, 60% എന്നിവ ഉൾക്കൊള്ളാൻ കഴിയും.

    < div id= "content< ?php echo $contentwidth ; ?> " >

    ഘടകങ്ങളിൽ സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നു

    < jdoc:include type= "message" / >

    ഔട്ട്പുട്ട് ഉള്ളടക്ക ഉള്ളടക്കം.

    < jdoc:include type= "component" style= "xhtml" / >
    < / div> < ! - - конец блока контента- - >

    വലത് നിരയുടെ ഒരു ബ്ലോക്ക് തുറക്കുന്നു, "വലത്" സ്ഥാനത്ത് മൊഡ്യൂളുകൾ ഇല്ലെങ്കിൽ അത് തകരും.

    < ?php if ($this - >കൗണ്ട് മൊഡ്യൂളുകൾ("വലത്" ) : ?>
    < div id= "rigth" >
    < jdoc:include type= "modules" name= "right" style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    പകർപ്പവകാശ വിവരങ്ങളുള്ള "HTML കോഡ്" മൊഡ്യൂൾ പ്രദർശിപ്പിക്കാൻ രൂപകൽപ്പന ചെയ്ത "അടിക്കുറിപ്പ്" ബ്ലോക്കിൻ്റെ ഔട്ട്പുട്ട്. നിങ്ങൾക്ക് താഴെയുള്ള തിരശ്ചീന മെനു അല്ലെങ്കിൽ ഉള്ളടക്ക അവതരണ മൊഡ്യൂൾ ഇവിടെ സ്ഥാപിക്കാം. ഈ "ഫൂട്ടർ" സ്ഥാനത്ത് ഒന്നിൽ കൂടുതൽ മൊഡ്യൂളുകൾ പ്രദർശിപ്പിച്ചാൽ ബ്ലോക്ക് പൊളിക്കും

    < ?php if ($this - >കൗണ്ട് മൊഡ്യൂളുകൾ("ഫൂട്ടർ") : ?>
    < div id= "footer" >
    < jdoc:include type= "modules" name= "footer" style= "xhtml" / >
    < / div>
    < ?php endif ; ?>

    സൈറ്റ് പേജ് ബ്ലോക്ക് "പേജ്", ബോഡി, എല്ലാ കോഡും അടച്ചിരിക്കുന്നു.

    < / div> < ! - - конец блока page- - >
    < / body> < ! - - конец блока body - - >
    < / html> < ! - - конец кода- - >

    ഞങ്ങൾ ഒരു പൂർണ്ണമായ index.php ഫയൽ സൃഷ്ടിച്ചു. ഏതൊക്കെ കമാൻഡുകളാണ് ഉപയോഗിക്കുന്നതെന്നും ഏത് ക്രമത്തിലാണ് ടെംപ്ലേറ്റ് ബ്ലോക്കുകൾ പ്രദർശിപ്പിക്കുന്നതെന്നും ഇപ്പോൾ നിങ്ങൾക്കറിയാം.

    ശ്രദ്ധിക്കുക: ജൂംല അഡ്‌മിൻ പാനലിൽ നിന്ന് ടെംപ്ലേറ്റ് കോഡ് വായിക്കുന്നതിന്, BOM ചെക്ക്‌ബോക്‌സ് അൺചെക്ക് ചെയ്യുമ്പോൾ index.php ഫയൽ AkelPad എഡിറ്ററിൽ തുറന്ന് UTF-8 എൻകോഡിംഗിൽ സേവ് ചെയ്യണം. ഫയലിനൊപ്പം പ്രവർത്തിക്കാൻ നിങ്ങൾ മാക്രോമീഡിയ ഡ്രീംവീവർ പ്രോഗ്രാം ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, മുകളിലെ മെനുവിൽ "എഡിറ്റ്"> "പേജ് പ്രോപ്പർട്ടികൾ" തിരഞ്ഞെടുത്ത് ഡോക്യുമെൻ്റ് എൻകോഡിംഗ് യൂണികോഡ് (utf-8) തിരഞ്ഞെടുത്ത് "യൂണികോഡ് സിഗ്നേച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കുക (BOM) അൺചെക്ക് ചെയ്യുക. )”. എന്നിരുന്നാലും, നിങ്ങൾ എന്തെങ്കിലും കുഴപ്പമുണ്ടാക്കിയാൽ, ജൂംല അഡ്‌മിൻ പാനലിൽ നിന്ന് കോഡ് എഡിറ്റുചെയ്യാൻ ഞാൻ നിങ്ങളെ ശക്തമായി ഉപദേശിക്കുന്നില്ല - മാക്രോമീഡിയ ഡ്രീംവീവർ പ്രോഗ്രാമിൽ നിന്ന് വ്യത്യസ്തമായി, നിങ്ങൾക്ക് എല്ലായ്പ്പോഴും വരുത്തിയ മാറ്റങ്ങൾ പഴയപടിയാക്കാൻ കഴിയും.

    ബ്ലോക്കുകളുടെ രൂപകൽപ്പന തന്നെ template.css-ൽ വിവരിക്കും. പക്ഷേ, ജൂംല 3-ൽ (ജൂംല 2.5) ടെംപ്ലേറ്റ് ഇൻസ്റ്റാൾ ചെയ്ത ശേഷം ഞങ്ങൾ സ്റ്റൈൽ ഷീറ്റുകൾ ക്രമീകരിക്കും, ഇതിനായി ഞങ്ങൾ സൃഷ്ടിക്കേണ്ടതുണ്ട്.

    ഒക്‌ടോബർ അവസാനം ഇൻറർനെറ്റിൽ പൊട്ടിത്തെറിച്ച ജനപ്രിയ 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 ജൂംല സെക്യൂരിറ്റി സ്‌ട്രൈക്ക് ടീം ഡാമിസ് കണ്ടെത്തിയ കോഡിൻ്റെ ഏറ്റവും പുതിയ പ്രശ്‌നം കണ്ടെത്തി. 3.6.4 സ്റ്റേബിൾ റിലീസ് തയ്യാറാക്കുക എന്ന വ്യക്തമല്ലാത്ത നാമത്തിൽ ഒക്ടോബർ 21-ന് ഒരു കമ്മിറ്റ് ഔദ്യോഗിക ജൂംല ശേഖരണത്തിൻ്റെ പ്രധാന ശാഖയിലേക്ക് തള്ളപ്പെടും, ഇത് നിർഭാഗ്യകരമായ ബഗ് പരിഹരിക്കുന്നു.

    ഇത് പുറത്തുവന്നതിനുശേഷം, താൽപ്പര്യമുള്ള നിരവധി വ്യക്തികൾ ഡവലപ്പർ കമ്മ്യൂണിറ്റിയിൽ ചേരുന്നു - അവർ ദുർബലത പ്രോത്സാഹിപ്പിക്കാനും ചൂഷണങ്ങൾ തയ്യാറാക്കാനും തുടങ്ങുന്നു.

    ഒക്‌ടോബർ 27-ന്, ഗവേഷകനായ ഹാരി റോബർട്ട്‌സ് സിഫോസ് റിസർച്ച് റിപ്പോസിറ്ററിയിലേക്ക് ഒരു റെഡിമെയ്ഡ് എക്‌പ്ലോയിറ്റ് അപ്‌ലോഡ് ചെയ്യുന്നു, അത് ദുർബലമായ CMS ഉള്ള സെർവറിലേക്ക് ഒരു PHP ഫയൽ അപ്‌ലോഡ് ചെയ്യാൻ കഴിയും.

    വിശദാംശങ്ങൾ

    ശരി, പശ്ചാത്തലം അവസാനിച്ചു, നമുക്ക് ഏറ്റവും രസകരമായ ഭാഗത്തേക്ക് പോകാം - ദുർബലതയുടെ വിശകലനം. ഞാൻ ഒരു ടെസ്റ്റ് പതിപ്പായി ജൂംല 3.6.3 ഇൻസ്റ്റാൾ ചെയ്തു, അതിനാൽ ഈ പതിപ്പിന് എല്ലാ ലൈൻ നമ്പറുകളും പ്രസക്തമായിരിക്കും. നിങ്ങൾ താഴെ കാണുന്ന ഫയലുകളിലേക്കുള്ള എല്ലാ പാതകളും ഇൻസ്റ്റാൾ ചെയ്ത CMS-ൻ്റെ റൂട്ടുമായി ബന്ധപ്പെട്ട് സൂചിപ്പിക്കും.

    ഡാമിസ് പാൽമയുടെ കണ്ടെത്തലിന് നന്ദി, സിസ്റ്റത്തിൽ ഉപയോക്തൃ രജിസ്ട്രേഷൻ നടത്തുന്ന രണ്ട് രീതികളുണ്ടെന്ന് ഞങ്ങൾക്കറിയാം. ആദ്യത്തേത് CMS ഉപയോഗിക്കുന്നു, അത് /components/com_users/controllers/registration.php:108 എന്ന ഫയലിലാണ് സ്ഥിതി ചെയ്യുന്നത്. രണ്ടാമത്തേത് (നമുക്ക് വിളിക്കേണ്ട ഒന്ന്) /components/com_users/controllers/user.php:293 എന്നതിൽ താമസിക്കുന്നു. നമുക്ക് അത് സൂക്ഷ്മമായി പരിശോധിക്കാം.

    286: /** 287: * ഒരു ഉപയോക്താവിനെ രജിസ്റ്റർ ചെയ്യുന്നതിനുള്ള രീതി. 288. ("JINVALID_TOKEN"));... 300: // ഫോം ഡാറ്റ നേടുക. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data); 316: 317: // പിശകുകൾ പരിശോധിക്കുക. 318: എങ്കിൽ ($return === false) 319: ( ... 345: / / രജിസ്ട്രേഷൻ പൂർത്തിയാക്കുക 346: $return = $model->register($data);

    ഇവിടെ ഞാൻ രസകരമായ വരികൾ മാത്രം ഉപേക്ഷിച്ചു. ദുർബലമായ രീതിയുടെ പൂർണ്ണ പതിപ്പ് ജൂംല ശേഖരത്തിൽ കാണാവുന്നതാണ്.

    സാധാരണ ഉപയോക്തൃ രജിസ്ട്രേഷൻ സമയത്ത് എന്താണ് സംഭവിക്കുന്നതെന്ന് നമുക്ക് നോക്കാം: എന്ത് ഡാറ്റയാണ് അയച്ചത്, അത് എങ്ങനെ പ്രോസസ്സ് ചെയ്യുന്നു. ക്രമീകരണങ്ങളിൽ ഉപയോക്തൃ രജിസ്ട്രേഷൻ പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഫോം http://joomla.local/index.php/component/users/?view=registration എന്നതിൽ കണ്ടെത്താനാകും.


    നിയമാനുസൃതമായ ഒരു ഉപയോക്തൃ രജിസ്ട്രേഷൻ അഭ്യർത്ഥന ഇനിപ്പറയുന്ന സ്ക്രീൻഷോട്ട് പോലെയാണ്.


    com_users ഘടകം ഉപയോക്താക്കളുമായി പ്രവർത്തിക്കുന്നതിന് ഉത്തരവാദിയാണ്. അഭ്യർത്ഥനയിലെ ടാസ്ക് പാരാമീറ്റർ ശ്രദ്ധിക്കുക. ഇതിന് $controller.$method എന്ന ഫോർമാറ്റ് ഉണ്ട്. ഫയൽ ഘടന നോക്കാം.

    കൺട്രോളർ ഫോൾഡറിലെ സ്ക്രിപ്റ്റുകളുടെ പേരുകൾ വിളിക്കപ്പെടുന്ന കൺട്രോളറുകളുടെ പേരുകളുമായി പൊരുത്തപ്പെടുന്നു. ഞങ്ങളുടെ അഭ്യർത്ഥനയ്ക്ക് ഇപ്പോൾ $controller = "രജിസ്ട്രേഷൻ" ഉള്ളതിനാൽ, രജിസ്ട്രേഷൻ.php ഫയലും അതിൻ്റെ രജിസ്റ്റർ() രീതിയും വിളിക്കപ്പെടും.

    ശ്രദ്ധിക്കുക, ചോദ്യം: കോഡിലെ ഒരു ദുർബലമായ സ്ഥലത്തേക്ക് രജിസ്ട്രേഷൻ പ്രോസസ്സിംഗ് എങ്ങനെ മാറ്റാം? നിങ്ങൾ ഇതിനകം ഊഹിച്ചിരിക്കാം. ദുർബലവും യഥാർത്ഥവുമായ രീതികളുടെ പേരുകൾ ഒന്നുതന്നെയാണ് (രജിസ്റ്റർ ചെയ്യുക), അതിനാൽ നമ്മൾ വിളിക്കുന്ന കൺട്രോളറിൻ്റെ പേര് മാറ്റേണ്ടതുണ്ട്. ഞങ്ങളുടെ ദുർബലമായ കൺട്രോളർ എവിടെയാണ് സ്ഥിതി ചെയ്യുന്നത്? അത് ശരിയാണ്, user.php ഫയലിൽ. ഇത് $controller = "ഉപയോക്താവ്" ആയി മാറുന്നു. എല്ലാം ഒരുമിച്ച് ചേർത്താൽ നമുക്ക് ടാസ്ക് = 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-ൽ നിന്ന് ഉപയോക്താവിലേക്ക് മാറ്റുന്നു.

    ഞങ്ങളുടെ മൂന്നാമത്തെ ഘട്ടം സാധുവായ CSRF ടോക്കൺ കണ്ടെത്തുക എന്നതാണ്, കാരണം അതില്ലാതെ രജിസ്ട്രേഷൻ ഉണ്ടാകില്ല.

    • /components/com_users/controllers/user.php: 296: JSession::checkToken("post") അല്ലെങ്കിൽ jexit(JText::_("JINVALID_TOKEN"));

    ഇത് ഒരു MD5 ഹാഷ് പോലെ തോന്നുന്നു, നിങ്ങൾക്ക് ഇത് എടുക്കാം, ഉദാഹരണത്തിന്, /index.php/component/users/?view=login എന്ന സൈറ്റിലെ അംഗീകാര ഫോമിൽ നിന്ന്.


    ഇപ്പോൾ നിങ്ങൾക്ക് ആവശ്യമുള്ള രീതി ഉപയോഗിച്ച് ഉപയോക്താക്കളെ സൃഷ്ടിക്കാൻ കഴിയും. എല്ലാം പ്രവർത്തിച്ചെങ്കിൽ, അഭിനന്ദനങ്ങൾ - നിങ്ങൾ CVE-2016-8870 "പുതിയ ഉപയോക്താക്കളെ രജിസ്റ്റർ ചെയ്യുന്നതിനുള്ള അനുമതി പരിശോധന നഷ്‌ടപ്പെട്ടു" എന്ന അപകടസാധ്യത ചൂഷണം ചെയ്‌തു.

    UsersControllerRegistration കൺട്രോളറിൽ നിന്നുള്ള “വർക്കിംഗ്” രജിസ്‌റ്റർ() രീതിയിൽ ഇത് ഇങ്ങനെയാണ് കാണപ്പെടുന്നത്:

    • /components/com_users/controllers/registration.php: 113: // രജിസ്ട്രേഷൻ അപ്രാപ്തമാക്കിയാൽ - ലോഗിൻ പേജിലേക്ക് റീഡയറക്‌ട് ചെയ്യുക. 114: if (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 ആണ്. നിങ്ങൾ ഈ ലേഖനം വായിക്കുന്നതിനാൽ, അത് എന്താണെന്ന് വീണ്ടും ചിന്തിക്കേണ്ട ആവശ്യമില്ല, പ്രത്യേകിച്ചും ഈ വിഷയത്തിൽ ഇതിനകം ധാരാളം നല്ല ലേഖനങ്ങൾ ഉണ്ടായതിനാൽ. ശരി, നമുക്ക് ലംഘിക്കാം.

    ഒന്നാമതായി, ഇവിടെ അവതരിപ്പിച്ച ഉദാഹരണങ്ങൾ ആരും നിങ്ങളെ ഹാക്ക് ചെയ്യില്ലെന്ന് 100% ഉറപ്പ് നൽകുന്നില്ലെന്ന് ഞാൻ പറയാൻ ആഗ്രഹിക്കുന്നു, ഇത് അസാധ്യമാണ്. ഏറ്റവും വ്യാപകവും വികസിതവുമായ സംവിധാനങ്ങളിൽ പോലും എല്ലായ്‌പ്പോഴും തടസ്സങ്ങൾ ഉണ്ടാകാറുണ്ട്; ലോകമെമ്പാടുമുള്ള വെബ്‌സൈറ്റുകളിൽ സാർവത്രികമായി അംഗീകരിക്കപ്പെട്ട SQL ഭാഷയിലെ (ഘടനാപരമായ ചോദ്യം) അന്വേഷണങ്ങളിൽ SQL Injection എന്ന ഒരു വലിയ പിശക് കണ്ടെത്തിയപ്പോൾ, ആറുമാസം മുമ്പ് ഉണ്ടായ സംവേദനം ഇതിന് ഉദാഹരണമാണ്. ഭാഷ).. എന്നാൽ അതേ സമയം, സംരക്ഷണത്തിലെ ഏറ്റവും സാധാരണമായ മാരകമായ പിശകുകൾ നിങ്ങൾ കാണും, കൂടാതെ ഒരു അമേച്വർ മാത്രമല്ല, ഒരു പ്രൊഫഷണൽ ഹാക്കറും നടത്തുന്ന ആക്രമണങ്ങളിൽ നിന്ന് സ്വയം പരിരക്ഷിക്കാൻ കഴിയും.

    ആരംഭിക്കുന്നതിന്, നിങ്ങൾ ഒരു കാര്യം മാത്രം ഓർമ്മിക്കേണ്ടതുണ്ട് - സന്ദർശകനിൽ നിന്ന് ലഭിച്ച ഡാറ്റ ഒരിക്കലും വിശ്വസിക്കരുത് - എല്ലാത്തിനുമുപരി, ഇത് ഒരു ക്ഷുദ്ര സ്ക്രിപ്റ്റ് ആകാം, അത് സെർവർ സൈഡ് അല്ലെങ്കിൽ ക്ലയൻ്റ് സൈഡ് ആകാം (പ്രവർത്തിക്കും. സന്ദർശക യന്ത്രങ്ങളിൽ). തീർച്ചയായും, ഇത് മതിയാകും, തീർച്ചയായും, സ്ക്രിപ്റ്റുകളിൽ തന്നെ ഗുരുതരമായ പിശകുകളൊന്നുമില്ലെങ്കിൽ, സെർവർ തന്നെ സാധാരണയായി ക്രമീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ആദ്യം കാര്യങ്ങൾ ആദ്യം.

    മനസ്സിൽ വരുന്ന ആദ്യത്തെ ഉദാഹരണം നിങ്ങൾ ഒരു അതിഥി പുസ്തകം എഴുതാൻ തീരുമാനിച്ചു എന്നതാണ്. നിങ്ങളുടെ പേരും ഇമെയിൽ വിലാസവും സന്ദേശവും നൽകുന്നതിന് നിങ്ങൾക്ക് ഒരു ഫീൽഡ് ആവശ്യമാണെന്ന് ഇതിനർത്ഥം. PHP സ്ക്രിപ്റ്റ് ഫോമിൽ നിന്ന് ഡാറ്റ സ്വീകരിക്കുകയും അതിഥി പുസ്തകം വായിക്കുമ്പോൾ പിന്നീട് പ്രദർശിപ്പിക്കുന്നതിനായി ഒരു പ്രത്യേക ഫയലിൽ സംരക്ഷിക്കുകയും ചെയ്യുന്നു. അപകടകരമായ ഒന്നും ഇല്ലെന്ന് തോന്നുന്നു, പക്ഷേ ഹാക്കർ അങ്ങനെ കരുതുന്നില്ല; ഉചിതമായ സുരക്ഷാ നടപടികളുടെ അഭാവത്തിൽ, സ്വന്തം ആവശ്യങ്ങൾക്ക് ഈ ഫോം ഉപയോഗിക്കാനാകും. ശരി, ഞങ്ങൾ അവന് ഒരു അവസരം നൽകില്ല.

    ആരംഭിക്കുന്നതിന്, പേരിൻ്റെയും ഇ-മെയിൽ വിലാസത്തിൻ്റെയും ദൈർഘ്യം പരിമിതപ്പെടുത്തുന്നത് നല്ലതാണ്. ഇത് ഭാഗിക സംരക്ഷണത്തിൻ്റെ നിരവധി രീതികളിൽ ഒന്ന് മാത്രമല്ല, നൂറുകണക്കിന് പ്രതീകങ്ങളുടെ പേര് വളരെ തമാശയാണെന്ന് കരുതുന്ന തമാശക്കാരിൽ നിന്നുള്ള സംരക്ഷണവും കൂടിയാണ്. അതിനാൽ നമുക്ക് ഇൻപുട്ട് ഫീൽഡിൽ maxlength=25 എന്ന് എഴുതാം, ഉദാഹരണത്തിന്:

    ഈ രീതിയിൽ, ഈ ഫീൽഡിൽ ആർക്കും 25 അക്ഷരങ്ങളിൽ കൂടുതൽ നൽകാൻ കഴിയില്ല. എന്നിരുന്നാലും, ഇത് വെർച്വൽ നോവീസ് വാൻഡലുകളെ മാത്രമേ നിർത്തൂ, കാരണം വിലാസ ബാറിൽ നിങ്ങൾക്ക് ഇതുപോലെ എന്തെങ്കിലും എളുപ്പത്തിൽ എഴുതാൻ കഴിയും:

    ...guest.php?user_email=ha_ha_ha_slabaja_zashita_ha_ha_ha_tyt_bil_super_haker...

    ശരി, പിഎച്ച്‌പി സ്‌ക്രിപ്‌റ്റിൻ്റെ തുടക്കത്തിൽ തന്നെ ഇതുപോലെ എന്തെങ്കിലും എഴുതിയുകൊണ്ട് നമുക്ക് രണ്ടാമത്തെ പ്രഹരം ഏൽപ്പിക്കാം:

    അല്ലെങ്കിൽ, ഞങ്ങൾ അത് ലോഗിൻ, പാസ്‌വേഡ് എൻട്രി പേജിലേക്ക് റീഡയറക്ട് ചെയ്യുന്നു: തലക്കെട്ട് ("ലൊക്കേഷൻ: index.php");

    ഇപ്പോൾ, സെഷനുകൾ ഉപയോഗിച്ച് അധികാരപ്പെടുത്തൽ സംവിധാനങ്ങളുടെ തത്വം അറിയുന്നതിലൂടെ, അവതരിപ്പിച്ച സ്ക്രിപ്റ്റുകളുടെ തടസ്സങ്ങൾ ഞങ്ങൾ പരിഗണിക്കുകയും ശരിയാക്കുകയും ചെയ്യും. സെഷനിലേക്ക് തന്നെ ആക്‌സസ് നൽകുകയും ഉപയോക്താവിൻ്റെ ഭാഗത്തുള്ള ബ്രൗസറിൽ സംഭരിക്കുകയും ചെയ്യുന്ന സെഷൻ ഐഡൻ്റിഫയർ ഒരു തടസ്സമായി കണക്കാക്കില്ല. ഇതിന് ധാരാളം കാരണങ്ങളുണ്ട് - ഐഡൻ്റിഫയർ ഒരു ചെറിയ സമയത്തേക്ക് സാധുതയുള്ളതാണ് എന്ന വസ്തുതയിൽ നിന്ന് ആരംഭിക്കുന്നു, പ്രത്യേകിച്ചും ഉപയോക്താവ് സൈറ്റ് വിടുകയോ ബ്രൗസർ അടയ്‌ക്കുകയോ വളരെക്കാലം സജീവമല്ലെങ്കിൽ, സെഷൻ നശിപ്പിക്കപ്പെടും, കൂടാതെ, ഐഡൻ്റിഫയർ സാധാരണയായി ഒരു അദ്വിതീയ 128-ബിറ്റ് കോഡാണെന്ന വസ്തുതയോടെ അവസാനിക്കുന്നു, ചട്ടം പോലെ, ഏതൊരു ഉപയോക്തൃ പാസ്‌വേഡിനേക്കാളും ബുദ്ധിമുട്ടാണ്.

    ഇനിപ്പറയുന്ന പോയിൻ്റുകൾ അപകടകരമാണ്:

    ഫോമിൽ നിന്നാണ് ഡാറ്റ അയച്ചതെന്ന പരിശോധനയുടെ സാന്നിധ്യം ഉണ്ടായിരുന്നിട്ടും, നിങ്ങൾക്ക് ഇത് സുരക്ഷിതമായി അനുകരിക്കാനും auth.php സ്ക്രിപ്റ്റ് വഴി പാസ്വേഡ് ഊഹിക്കാൻ ശ്രമിക്കാനും കഴിയും.

    done.php സ്ക്രിപ്റ്റ് ഇതുപോലെ കബളിപ്പിക്കാം: done.php?login_user=login

    ആദ്യത്തെ അപകടസാധ്യത ഇല്ലാതാക്കാൻ, മുമ്പത്തെ ലേഖനത്തിൽ വിവരിച്ച എല്ലാ കാര്യങ്ങളും ചെയ്യുന്നതാണ് ഉചിതം, അതായത്, POST അറേയിൽ നിന്ന് മാത്രം ഒരു വേരിയബിൾ സ്വീകരിക്കുക, $HTTP_REFERER പരിശോധിക്കുക, വേരിയബിൾ പരിശോധിച്ച് ട്രിം ചെയ്യുക. കൂടാതെ, നിരവധി ആക്രമണങ്ങളിൽ നിന്ന് സ്വയം പരിരക്ഷിക്കേണ്ടതിനാൽ, ഞങ്ങൾക്ക് സന്ദർശകൻ്റെ ഐപി റെക്കോർഡ് ചെയ്യാനും, 3 പരാജയപ്പെട്ട ശ്രമങ്ങൾക്ക് ശേഷം, അവനെ 15 മിനിറ്റ് തടയാനും കഴിയും. എന്നിരുന്നാലും, ഐപി തടയൽ ഉപയോഗിക്കുന്നതിനെതിരെ ഞാൻ ഉപദേശിക്കുന്നു - ഇത് എളുപ്പത്തിൽ മറികടക്കാൻ കഴിയും, കൂടാതെ പ്രോക്സി സെർവറുകളുടെ നിരവധി ഉപയോക്താക്കൾ ഇത് മൂലം കഷ്ടപ്പെടാം. ഒരു അംഗീകാര കാലതാമസം പ്രയോഗിക്കുന്നത് കൂടുതൽ ന്യായമാണ്. ആ. ലോഗിൻ, പാസ്‌വേഡ് എന്നിവയുടെ കൃത്യത പരിശോധിക്കുന്നതിന് തൊട്ടുമുമ്പ്, ഞങ്ങൾ ഒരു കാലതാമസം വരുത്തുന്നു, 1 സെക്കൻഡ് പറയുക. ഉപയോക്താക്കൾ ഇത് ശ്രദ്ധിക്കാൻ പോലും സാധ്യതയില്ല, പക്ഷേ ഹാക്കർമാരുടെ ബ്രൂട്ട്-ഫോഴ്‌സ് വേഗത സെക്കൻഡിൽ 1 കോമ്പിനേഷനിൽ താഴെയായി കുറയും, ഇത് ഒരു പ്രത്യേക നിഘണ്ടു ഉപയോഗിച്ച് പോലും പാസ്‌വേഡ് ക്രൂരമായി നിർബ്ബന്ധിക്കുന്നതിനുള്ള സാധ്യതയെ ഫലത്തിൽ പൂർണ്ണമായും ഇല്ലാതാക്കുന്നു. നിങ്ങൾക്ക് ഇതുപോലെ കാലതാമസം വരുത്താം:

    ഉറക്കം (1); //ഒരു സെക്കൻഡ് വൈകി

    സംരക്ഷണത്തിലെ രണ്ടാമത്തെ പ്രശ്നത്തെ സംബന്ധിച്ചിടത്തോളം, എല്ലാം അവിടെ വളരെ എളുപ്പമാണ്. dod.php സ്ക്രിപ്റ്റിലേക്ക് ആർബിട്രറി ലോഗിൻ അടങ്ങുന്ന ഒരു $login_user വേരിയബിൾ ആർക്കും കൈമാറാമെങ്കിലും, ഇനിയും ചില കാര്യങ്ങൾ ചെയ്യാനാകും. അതായത്, ഒരു വേരിയബിൾ ഇല്ലാതാക്കാൻ (പിഎച്ച്‌പിയിൽ വേരിയബിളുകൾ പ്രഖ്യാപിക്കേണ്ട ആവശ്യമില്ല, അതിനാൽ ഒരു വേരിയബിൾ ഇല്ലാതാക്കുന്ന ആശയം ഒരു വേരിയബിൾ മായ്‌ക്കുന്നതിന് പകരം താരതമ്യം ചെയ്യാം) അൺസെറ്റ്() ഫംഗ്‌ഷൻ ഉപയോഗിച്ച്; അതിനുശേഷം ഞങ്ങൾ സെർവറിൽ നിന്ന് എടുത്ത $login_user വേരിയബിളിൻ്റെ മൂല്യം സംഭരിച്ചിരിക്കുന്ന ഒരു സെഷൻ തുറക്കും, അതായത്. ഹാക്കർക്ക് ഒരു തരത്തിലും സ്വാധീനിക്കാൻ കഴിയാത്ത യഥാർത്ഥ മൂല്യം. നിങ്ങൾക്ക് ഇത് ഇതുപോലെ ചെയ്യാൻ കഴിയും:

    page.php പേജിന് സമാനമായ ഉള്ളടക്കം ഉണ്ടായിരിക്കും, എന്നാൽ ലിങ്ക് index.php പേജിലേക്ക് പോയിൻ്റ് ചെയ്യും.

    പേജ് page.php

    ഒരു പേജിൽ നിന്ന് മറ്റൊന്നിലേക്ക് മാറുമ്പോൾ, പരിവർത്തനം നടത്തിയ പേജിൻ്റെ വിലാസം ലിങ്കിന് കീഴിൽ പ്രദർശിപ്പിക്കും.

    ഘടകം $_SERVER["HTTP_USER_AGENT"]

    $_SERVER["HTTP_USER_AGENT"] ഘടകത്തിൽ സന്ദർശകൻ്റെ ബ്രൗസറിൻ്റെയും ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിൻ്റെയും തരത്തെയും പതിപ്പിനെയും കുറിച്ചുള്ള വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു.

    ഈ വരിയുടെ ഒരു സാധാരണ ഉള്ളടക്കം ഇതാ: "മോസില്ല/4.0 (അനുയോജ്യമായ; MSIE 6.0; Windows NT 5.1)". "MSIE 6.0" എന്ന ഉപസ്‌ട്രിംഗിൻ്റെ സാന്നിധ്യം സന്ദർശകൻ ഇൻ്റർനെറ്റ് എക്സ്പ്ലോറർ പതിപ്പ് 6.0 ഉപയോഗിച്ചാണ് പേജ് കാണുന്നത് എന്ന് സൂചിപ്പിക്കുന്നു. "Windows NT 5.1" എന്ന വരി സൂചിപ്പിക്കുന്നത് ഓപ്പറേറ്റിംഗ് സിസ്റ്റം Windows XP ആണെന്നാണ്.

    അഭിപ്രായം

    Windows 2000-ന്, $_SERVER["HTTP_USER_AGENT"] ഘടകം ഇതുപോലെ കാണപ്പെടുന്നു: "മോസില്ല/4.0 (അനുയോജ്യമായ; MSIE 5.01; Windows NT 5.0)"), Windows XP-യിൽ ഇത് "Mozilla/4.0 (compatible; MSIE 6.0) ;Windows NT 5.1)".

    സന്ദർശകൻ Opera ബ്രൗസർ ഉപയോഗിക്കുകയാണെങ്കിൽ, $_SERVER["HTTP_USER_AGENT"] എന്നതിൻ്റെ ഉള്ളടക്കം ഇതുപോലെയായിരിക്കാം: "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 ". "MSIE 6.0" എന്ന ഉപസ്‌ട്രിംഗും ഇവിടെയുണ്ട്, ഓപ്പറ ബ്രൗസർ ഇൻ്റർനെറ്റ് എക്‌സ്‌പ്ലോറർ ബ്രൗസറുമായി പൊരുത്തപ്പെടുന്നുവെന്നും അതേ വിൻഡോസ് ഡൈനാമിക് ലൈബ്രറികൾ ഉപയോഗിക്കുന്നുവെന്നും സൂചിപ്പിക്കുന്നു. അതിനാൽ, ബ്രൗസർ നൽകുന്ന സ്ട്രിംഗ് വിശകലനം ചെയ്യുമ്പോൾ, "MSIE 6.0" എന്ന ഉപസ്‌ട്രിംഗിനെയാണ് Internet Explorer സൂചിപ്പിക്കുന്നതെന്നും "Opera" എന്ന സബ്‌സ്ട്രിംഗ് അടങ്ങിയിട്ടില്ലെന്നും നിങ്ങൾ ഓർക്കണം. കൂടാതെ, ഈ വരിയിൽ നിന്ന് ഉപയോക്താവ് വിൻഡോസ് 98 ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ഉപയോഗിക്കുന്നുണ്ടെന്ന് നമുക്ക് നിഗമനം ചെയ്യാം.

    അഭിപ്രായം

    ഫയർഫോക്സ് ബ്രൗസർ ഉപയോക്തൃ ഏജൻ്റ് ഇതുപോലെയായിരിക്കാം: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

    നെറ്റ്‌സ്‌കേപ്പ് ബ്രൗസർ ഉപയോഗിക്കുമ്പോൾ, $_SERVER["HTTP_USER_AGENT"] ഘടകത്തിൻ്റെ ഉള്ളടക്കം ഇതുപോലെയായിരിക്കാം: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . "നെറ്റ്‌സ്‌കേപ്പ്" എന്ന ഉപസ്‌ട്രിംഗിൻ്റെ സാന്നിധ്യത്താൽ ഈ ബ്രൗസറിൻ്റേത് നിർണ്ണയിക്കാനാകും. കൂടാതെ, X-Window ഗ്രാഫിക്കൽ ഷെല്ലിൽ, പെൻ്റിയം IV-നായി ഒപ്റ്റിമൈസ് ചെയ്ത ഒരു കേർണൽ ഉപയോഗിച്ച് ലിനക്സിൻ്റെ ഒരു ഓപ്പറേറ്റിംഗ് പതിപ്പ് ഉപയോഗിച്ചാണ് സന്ദർശകൻ ഇൻ്റർനെറ്റ് ആക്സസ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് കണ്ടെത്താനാകും. ഏറ്റവും സാധാരണമായ ബ്രൗസറുകൾക്കായി പേജുകൾ ഒപ്റ്റിമൈസ് ചെയ്യാൻ ഡിസൈനർമാരെ അനുവദിക്കുന്ന സ്റ്റാറ്റിസ്റ്റിക്കൽ വിവരങ്ങൾ ശേഖരിക്കുന്നതിന് ഈ സംവിധാനം ഉപയോഗിക്കാൻ സൗകര്യപ്രദമാണ്.

    ഘടകം $_SERVER["REMOTE_ADDR"]

    $_SERVER["REMOTE_ADDR"] ഘടകത്തിൽ ക്ലയൻ്റിൻ്റെ IP വിലാസം അടങ്ങിയിരിക്കുന്നു. ഒരു ലോക്കൽ മെഷീനിൽ പരിശോധിക്കുമ്പോൾ, ഈ വിലാസം 127.0.0.1 ന് തുല്യമായിരിക്കും. എന്നിരുന്നാലും, നെറ്റ്‌വർക്കിൽ പരീക്ഷിക്കുമ്പോൾ, വേരിയബിൾ ക്ലയൻ്റ് സെർവറിലെത്തിയ ക്ലയൻ്റ് അല്ലെങ്കിൽ അവസാനത്തെ പ്രോക്സി സെർവറിൻ്റെ ഐപി വിലാസം തിരികെ നൽകും. ക്ലയൻ്റ് ഒരു പ്രോക്സി സെർവർ ഉപയോഗിക്കുകയാണെങ്കിൽ, HTTP_X_FORWARDED_FOR എൻവയോൺമെൻ്റ് വേരിയബിൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് അതിൻ്റെ IP വിലാസം കണ്ടെത്താനാകും, ഇതിൻ്റെ മൂല്യം getenv() ഫംഗ്ഷൻ ഉപയോഗിച്ച് ലഭിക്കും.

    അഭിപ്രായം

    പ്രോക്സി സെർവറുകൾ ഒരു പ്രത്യേക തരം സേവനം നൽകുന്ന പ്രത്യേക ഇൻ്റർമീഡിയറ്റ് സെർവറുകളാണ്: ട്രാഫിക് കംപ്രഷൻ, ഡാറ്റ എൻകോഡിംഗ്, മൊബൈൽ ഉപകരണങ്ങൾക്കുള്ള അഡാപ്റ്റേഷൻ മുതലായവ. നിരവധി പ്രോക്‌സി സെർവറുകളിൽ, അജ്ഞാത പ്രോക്‌സി സെർവറുകൾ എന്ന് വിളിക്കപ്പെടുന്നവയുണ്ട്, അത് ക്ലയൻ്റിൻ്റെ യഥാർത്ഥ IP വിലാസം മറയ്‌ക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു; അത്തരം സെർവറുകൾ HTTP_X_FORWARDED_FOR പരിസ്ഥിതി വേരിയബിൾ തിരികെ നൽകുന്നില്ല.

    HTTP_X_FORWARDED_FOR പരിസ്ഥിതി വേരിയബിൾ വീണ്ടെടുക്കുന്നു

    ഘടകം $_SERVER["SCRIPT_FILENAME"]

    $_SERVER["SCRIPT_FILENAME"] ഘടകത്തിൽ ഡിസ്ക് റൂട്ടിൽ നിന്നുള്ള ഫയലിലേക്കുള്ള സമ്പൂർണ്ണ പാത അടങ്ങിയിരിക്കുന്നു. അതിനാൽ, സെർവർ പ്രവർത്തിപ്പിക്കുന്നത് വിൻഡോസ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റമാണെങ്കിൽ, ഈ പാത ഇതുപോലെയാകാം: "d:main estindex.php", അതായത്. പാത്ത് ഡിസ്കിൽ നിന്ന് വ്യക്തമാക്കിയിരിക്കുന്നു; UNIX-പോലുള്ള ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിൽ, റൂട്ട് ഡയറക്ടറിയിൽ നിന്നാണ് പാത്ത് വ്യക്തമാക്കിയിരിക്കുന്നത് /, ഉദാഹരണത്തിന് "/var/share/www/test/index.php".

    ഘടകം $_SERVER["SERVER_NAME"]

    $_SERVER["SERVER_NAME"] ഘടകത്തിൽ സെർവർ നാമം അടങ്ങിയിരിക്കുന്നു, അത് സാധാരണയായി അതിൽ സ്ഥിതിചെയ്യുന്ന സൈറ്റിൻ്റെ ഡൊമെയ്ൻ നാമവുമായി പൊരുത്തപ്പെടുന്നു. ഉദാഹരണത്തിന്,

    www.softtime.ru

    $_SERVER["SERVER_NAME"] ഘടകത്തിൻ്റെ ഉള്ളടക്കം പലപ്പോഴും $_SERVER["HTTP_HOST"] ഘടകത്തിൻ്റെ ഉള്ളടക്കത്തിന് സമാനമാണ്. സെർവർ പേരിനുപുറമെ, സൂപ്പർഗ്ലോബൽ അറേ $_SERVER നിങ്ങളെ നിരവധി സെർവർ പാരാമീറ്ററുകൾ കണ്ടെത്താൻ അനുവദിക്കുന്നു, ഉദാഹരണത്തിന്, സെർവർ IP വിലാസം, വെബ് സെർവർ ഇൻസ്റ്റാൾ ചെയ്ത ലിസണിംഗ് പോർട്ട്, HTTP പ്രോട്ടോക്കോൾ പതിപ്പ്. ഈ വിവരങ്ങൾ യഥാക്രമം $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"], $_SERVER["SERVER_PROTOCOL"] ഘടകങ്ങളിൽ സ്ഥാപിച്ചിരിക്കുന്നു. ഈ ഘടകങ്ങൾ ഉപയോഗിക്കുന്ന ഒരു ഉദാഹരണം ചുവടെയുണ്ട്.

    $_SERVER അറേ ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു

    ഘടകം $_SERVER["REQUEST_METHOD"]

    $_SERVER["REQUEST_METHOD"] എലമെൻ്റിൽ സ്‌ക്രിപ്റ്റ് വിളിക്കാൻ ഉപയോഗിക്കുന്ന അഭ്യർത്ഥന രീതി അടങ്ങിയിരിക്കുന്നു: GET അല്ലെങ്കിൽ POST.