ሙከራ ስኬት php. በሙከራ ጊዜ ለPHP ገንቢ ተግባርን ይሞክሩ። js ስክሪፕት መፍጠር

ይህ በመስመር ላይ ዕቃዎችን እና አገልግሎቶችን ለመክፈል ተመጣጣኝ እና ደህንነቱ የተጠበቀ መንገድ ነው። ለዚህ ስርዓት ፕሮሰሰር ወደ የመስመር ላይ መደብርዎ ያክሉ እና ሳይዘገዩ ክፍያዎችን ይቀበሉ።

የተሻሻለው የ Yandex.Money 3.0 ፕሮቶኮል የተለያዩ የክፍያ ዓይነቶችን እንድትጠቀም ይፈቅድልሃል፡-

  • በእውነቱ Yandex.Money;
  • የባንክ ካርዶች;
  • ተርሚናሎች በኩል ክፍያዎች;
  • የሞባይል ክፍያዎች.
በተጨማሪም, በመድረክ ላይ የተፈጠሩ መደብሮችን የማገናኘት ሂደት 1ሲ-ቢትሪክስ፡ የጣቢያ አስተዳደር፣ወደ Yanedex.ገንዘብ በከፍተኛ ሁኔታ ቀለል ተደርጓል. በ Yandex.Money ድር ጣቢያ ላይ ጥያቄን መተው ያስፈልግዎታል (ድር ጣቢያዎ እንዳለ በአስተያየቱ ውስጥ ያመልክቱ በፕሮቶኮል ስሪት 3.0.) እና ቀለል ያለ ቅጽ ይሙሉ (3 መስኮችን ብቻ የያዘ)።

አዲሱን የ Yandex.Money ፕሮቶኮልን በመስመር ላይ መደብር በ 1C-Bitrix መድረክ ላይ ለማገናኘት አዲስ የክፍያ ስርዓት መፍጠር እና ፕሮሰሰር መምረጥ ያስፈልግዎታል

የ https ፕሮቶኮሉን በመጠቀም ጣቢያዎ ምላሽ ሰጪ መሆኑን ያረጋግጡ። የYanedex.Money 3.0 ፕሮቶኮልን በመጠቀም ክፍያዎችን ለመቀበል ይህ ቅድመ ሁኔታ ነው።

ሁሉም ነገር አስቀድሞ የተዋቀረበት በራስ የተፈረመ የSSL ሰርተፍኬት ወይም የእኛን ምናባዊ ማሽን መጠቀም ይችላሉ።

በመቀጠል አመልክት። የማከማቻ መታወቂያ በማዕከላዊ ማቀነባበሪያ ማዕከል ውስጥ, በማዕከላዊ ማቀነባበሪያ ማእከል ውስጥ የመስኮት ቁጥርን ይግዙኮንትራቱን ሲያጠናቅቁ ከ Yandex መቀበል ያለብዎት, እና የይለፍ ቃል ይግዙ (የሱቅ የይለፍ ቃል)ከመደብሩ የ Yandex መገለጫ.

ለእያንዳንዱ የክፍያ ዓይነት የራስዎን ፕሮሰሰር መፍጠር እና አስፈላጊውን የክፍያ ዓይነት መምረጥ ያስፈልግዎታል።

ክፍያን ለመሞከር "Y" የሚለውን ዋጋ በመስክ ላይ ማስቀመጥ ያስፈልግዎታል የሙከራ ሁነታ. ከ Yandex.Money 3.0 ፕሮቶኮል ጋር ለመገናኘት ማመልከቻ በሚያስገቡበት ጊዜ ልዩ ማገናኛ ይደርስዎታል, ይህም የኪስ ቦርሳዎን ቀሪ ሂሳብ በ 1000 ሩብልስ መሙላት ይችላሉ.

በኦንላይን ማከማቻ ሞጁል ቅንጅቶች ውስጥ ስለ ስኬታማ ክፍያ ወይም ስህተት መልእክት ወደ ገፆች የሚወስዱትን መንገዶች እንደገና መወሰን ይችላሉ።

ሁሉም። ማዋቀሩ ተጠናቅቋል

የቀድሞውን የ Yandex.Money (1.6) ስሪት ያገናኙ ደንበኞች ወደ ስሪት 3.0 ማሻሻል የለባቸውም. እነዚያ። ሁለቱም ስሪቶች በሁለቱም በ Yandex.Money እና 1C-Bitrix: የጣቢያ አስተዳደር ይደገፋሉ. ግን ስሪት 1.6 ከ Yandex.Money ሌላ ክፍያዎችን የመጠቀም ችሎታን አይጨምርም። የዚህ የክፍያ ሥርዓት አዲስ ደንበኞች ፕሮቶኮል 3.0ን በመጠቀም ተገናኝተዋል።

በምርት አቅርቦት ላይ 1C-Bitrix: የጣቢያ አስተዳደርየ Yandex.Money ፕሮሰሰር (3.0) በኦንላይን ማከማቻ (ሽያጭ) ሞጁል ስሪት 14.0.0 ውስጥ ይለቀቃል። ይህ ዝመና ከመውጣቱ በፊት (በወሩ መጨረሻ ላይ በአልፋ እንደሚለቀቅ እንገምታለን) ተቆጣጣሪው በቴክኒክ ድጋፍ ሊጠየቅ ይችላል።

በዘመናዊው የድረ-ገጽ ዘመን፣ አብዛኛዎቹ ድረ-ገጾች ከጊዜ ወደ ጊዜ በይነተገናኝ እየሆኑ ነው። ቀደም ሲል የተሻሻለውን መረጃ ለመቀበል አጠቃላይ ገጹን ማደስ ያስፈልገን ነበር ፣ አሁን አጠቃላይ ገጹን እንዳንጭን የሚፈቅዱ ቴክኖሎጂዎች ታይተዋል ፣ ግን የተለየ ክፍል ብቻ። በምላሹ ይህ ለሁለቱም ተጠቃሚዎች እና የአገልጋይ ባለቤቶች ምቾት ይሰጣል ፣ ምክንያቱም ገጹ ለተጠቃሚው በፍጥነት ይጫናል ፣ ምክንያቱም የገጹ የተለየ ክፍል ብቻ ስለሚጫን እና አገልጋዩ ገፁን ሁል ጊዜ ማመንጨት እና መስጠት አያስፈልገውም። ተጠቃሚው. እነዚህ ባህሪያት php እና ajax በመጠቀም ለመተግበር ቀላል ናቸው.

ዛሬ የ AJAX ጽንሰ-ሐሳብ እንዴት እንደሚሰራ የበለጠ ለመረዳት አንድ ትንሽ ምሳሌ እንመለከታለን. አንዳንድ ጊዜ ለጀማሪዎች php እና ajax እንዴት እርስበርስ እንደሚገናኙ ለመረዳት አስቸጋሪ ነው ፣ ሌሎች መሳሪያዎችን በበለጠ ፍጥነት ለመቆጣጠር እና ለወደፊቱ የራስዎን ስክሪፕቶች ለመፃፍ የሚያስችሉዎትን መሰረታዊ እና መርሆች እንዲረዱዎት ይህ እንዴት እንደሚደረግ በአጭሩ አሳይዎታለሁ።

ለራሳችን ትንሽ ስራ እናውጣ፣ ፒፕ እና አጃክስን በመጠቀም ገፁን እንደገና ሳንጭን የኢሜል አድራሻ በመረጃ ቋቱ ውስጥ መኖሩን እናረጋግጣለን። ይህ ምሳሌ በአሳሹ ውስጥ ገጹን እንደገና ሳንጭን ከአገልጋዩ ጋር እንዴት መስተጋብር እንደምንፈጥር በደንብ ያሳያል ፣ እና ደግሞ ፣ ይህ ብዙውን ጊዜ ለተለያዩ የተጠቃሚ ቅጽ ማረጋገጫዎች ያገለግላል። በስር ማውጫው ውስጥ index.php ፣ email.php ፣ validate.js የተሰየሙ 3 ፋይሎችን እንፈጥራለን።

ገጽ መፍጠር

ኢሜል ለማስገባት አንድ መስክ ብቻ የያዘ አንድ ቅጽ ያለው ቀላል ገጽ እንፍጠር።
Index.php ፋይል አገባብ

AJAX አጋዥ

ከ AJAX ጋር ለመስራት ቀላሉ መንገድ የ jQuery ማዕቀፍን ማገናኘት ነው, እኔ ያደረኩት በትክክል ነው. jQuery የAJAX ጥያቄዎችን ለመላክ ለመረዳት ቀላል እና ለአጠቃቀም ቀላል የሆነ አገባብ ይሰጠናል፣ ታዲያ ለምን አትጠቀሙበትም?

js ስክሪፕት መፍጠር

የ validate.js ፋይል አገባብ

$ (ሰነድ) .ዝግጁ (ተግባር ()) (var ኢሜይል = ""; $ ("# ኢሜይል"). ቁልፍ (ተግባር ()) (var እሴት = $ (ይህ) .val (); $.ajax (((() ዓይነት፡ "POST"፣ url:"email.php", data:"email="+value, success:function(msg)( if(msg == "valid")( $("#መልእክት").html() "ይህ ኢሜይል ጥቅም ላይ ሊውል ይችላል. ይህ ኢሜይል አስቀድሞ ተወስዷል."); "እባክዎ ሁሉንም ኢሜል ያኑሩ"); ("#መልእክት") .html(msg));

ተቆጣጣሪ በ php

ይህ ስክሪፕት ከደንበኛው የPOST ጥያቄ ይቀበላል፣ይሰራውና ውጤቱን ይመልሳል። AJAX ውጤቱን ያነባል እና በእሱ ላይ የተመሰረተ ውሳኔ ይሰጣል.
የኢሜል.php ፋይል አገባብ

$ግንኙነት = mysqli_connect("localhost""ኢሜል""ኢሜል""ኢሜል"); ከሆነ (isset ($ _POST ["ኢሜል")) && $ _POST ["ኢሜል"] ! = "") ( $ ኢሜል = $ _POST ["ኢሜል"] ፤ $ ኢሜል = mysqli_real_escape_string ($ ግንኙነት, $ ኢሜል); ከሆነ; (!filter_var($email, FILTER_VALIDATE_EMAIL))( echo "invalid"፤ )ሌላ($sql = "ከኢሜይል WHERE email="$email""፤ $result = mysqli_query($ግንኙነት፣$sql)፤ ከሆነ() mysqli_num_rows($ ውጤት) == 1)( ማሚቶ "ልክ ያልሆነ" ፤ ) ሌላ (ማስተጋባት "የሚሰራ" ፤ ) )) ከሆነ( isset($_POST["ኢሜል_ኢሜል")) && $_POST["ኢሜል_አክል"]!= )($email = mysqli_real_escape_string($ግንኙነት፣$_POST["add_email"])፤ $sql = "ኢሜል(ኢሜል) ቫልዩኤስ("ኢሜል) ውስጥ አስገባ"" ከሆነ(mysqli_query($ግንኙነት፣$sql))( echo ስኬት"፤ )ሌላ("ስህተት" አስተጋባ፤))

በእኛ ፒኤችፒ ስክሪፕት ውስጥ የፖስታ ጥያቄን የሚያስኬድ እና የተወሰነ ጽሑፍ በገጹ ላይ የሚያትመው በጣም የተለመደው ኮድ። በውጤቱም, AJAX ጥያቄን ወደ php ስክሪፕት ይልካል, ስክሪፕቱ ያስኬዳል እና ውጤቱን ያመጣል, AJAX ውጤቱን ያነባል እና ገጹን በእውነተኛ ጊዜ ይለውጠዋል.

AJAX ይህንን ኮድ በመጠቀም የPOST ጥያቄን ወደ ስክሪፕቱ ይልካል፡-

$.ajax(( አይነት:"POST"፣ url:"email.php", data:"email="+value, success:function(msg)( if(msg == "valid")( $("#መልእክት) ") ኤችቲኤምኤል ("ይህ ኢሜል ጥቅም ላይ ሊውል ይችላል"); ኢሜል = ዋጋ; ) ሌላ ($("#መልእክት").html ("ይህ ኢሜይል አስቀድሞ ተወስዷል.");) )));

ዓይነት - የጥያቄ ዓይነት ፣ POST ወይም GET። በእኛ ሁኔታ POST;
url - ጥያቄው የተላከበት የስክሪፕት አድራሻ;
ውሂብ - በጥያቄው ውስጥ የሚተላለፈው መረጃ;
ስኬት - በተሳካ የጥያቄ አፈፃፀም ምክንያት ምን ማድረግ እንዳለበት። በእኛ ሁኔታ, ተግባሩ ይባላል;

በስክሪፕቱ ራሱ፣ በመረጃ ቋቱ ውስጥ የኢሜል መገኘት ቁምፊ ወደ ኢሜል መስኩ ውስጥ በገባ ቁጥር ይፈትሻል። በስክሪፕቱ ውስጥ ክፍል $("#ኢሜል").ቁልፍ(ተግባር()()) ; በሜዳ ላይ የመዳሰሻ ቁልፍ መታወቂያ = "ኢሜል" መኖሩን የሚፈትሽ።
እንደሚመለከቱት ፣ ኮዱ በጣም ቀላል እና ለመረዳት በጣም ጥሩ ችሎታ አያስፈልገውም ፣ ሁሉም ነገር ለክስተቶች ቁልፍ () ከማቀናበር ጋር የተቆራኘ ነው - ቁልፍን ይጫኑ ፣ ጠቅ ያድርጉ () - በአንድ አካል ላይ የመዳፊት ጠቅ ያድርጉ። ይህ ከስክሪፕቱ የAJAX ጥያቄ እና ምላሽ ይከተላል። ስለዚህ፣ php እና ajax ን በመጠቀም በይነተገናኝ ገጾችን ለመፍጠር ገደብ የለሽ እድሎችን ማግኘት ይችላሉ።
ይህ ኮድ ከፍተኛ ጥራት ያለው ለማስመሰል አይደለም፣ ነገር ግን እሱን ካዳበሩት፣ በደንበኛው እና በአገልጋይ ደረጃ ላይ ትክክለኛ ማረጋገጫዎችን ያክሉ እና css ን ያስተዋውቁ፣ ከዚያ በፕሮጀክቶችዎ ውስጥ ጥቅም ላይ ሊውል ይችላል።
ማንኛውም ጥያቄ ካለዎት አስተያየቶችን ለመጻፍ አያመንቱ።
መልካም ቀን እመኛለሁ እና በቅርቡ እንገናኝ :)

7.4 ኪ
በዚህ ጽሑፍ ውስጥ የ AJAX ቅጽ መፍጠር እና ማስገባትን እገልጻለሁ. ከዚህ በኋላ አኒሜሽን መተግበርን ማየት እንችላለን animate.css , JavaScript ን በመጠቀም የውሂብ ማረጋገጫ.

ይህን ጽሑፍ በሚጽፉበት ጊዜ, Bootstrap 3.3.5 የአሁኑ የማዕቀፍ ስሪት ነው. ለዚህ ጽሑፍ፣ ነባሪውን የBootstrap ግንባታ (12 አምዶች) እየተጠቀምን ነው። በዚህ ጽሑፍ ውስጥ ያሉትን ተግባራት ሲያጠናቅቁ በ Bootstrap ሰነድ ውስጥ የተገለጹትን የቅርብ ጊዜ ቁርጥራጮች እና የኮድ መዋቅር መጠቀምዎን ያረጋግጡ።

የፋይል እና የአቃፊ መዋቅር

የስር ማውጫ እንፈጥራለን እና የሚከተሉትን ፋይሎች እና አቃፊዎች በእሱ ላይ እንጨምራለን-

ማስነሻ-ቅጽ፡


አንዳንድ የፊት-መጨረሻ ቤተ-ፍርግሞችን ማገናኘት ያስፈልገናል፡-
  • ቡት ማሰሪያ;
  • jQuery

እነዚህን ቤተ-መጻሕፍት ግምት ውስጥ በማስገባት የፋይል አወቃቀሩ ይህን ይመስላል።

ማስነሻ-ቅጽ፡

ቅጽ መፍጠር

የእርስዎን index.html ፋይል ይክፈቱ እና የሚከተለውን መሰረታዊ የ AJAX አድራሻ ቅጽ መዋቅር ወደ እሱ ይቅዱ፡

የእውቂያ ቅጽ Bootstrap 3.3.4 " መልእክት ላከልኝ።

የቅጹን ይዘት የምንጨምርበት መሰረታዊ የኤችቲኤምኤል አብነት ነው። ሁሉንም አስፈላጊ CSS እና JavaScript ፋይሎችን አካትተናል። ለዚህ የተለየ ምሳሌ bootstrap.js እንደማንፈልግ ልብ ይበሉ።

የሚዲያ ጥያቄዎችን በBootstrap ውስጥ የመመልከቻ ዲበ መለያ አካተናል። ዋናው ኮድ መጀመሪያ እንዲሰራ ጃቫስክሪፕት ከፋይሉ ግርጌ ላይ ተቀምጧል።

በሰውነት መለያው ውስጥ ዲቪ ከክፍል ኮላ-ኤስም-6 ኮል-ኤስም-ኦፍሴት-3 ጋር አካትተናል። ይህ ማለት በኤስኤም (ትንሽ) መመልከቻ ውስጥ እና በላይኛው 50% ስፋት ያለው አምድ (ከፍተኛው የአምዶች ብዛት 12) ማሳየት እንፈልጋለን። ክፍል col-sm-offset-3 የግራ ማካካሻውን ወደ 25% ያዘጋጃል።

ይህ ያለውን ቦታ ግማሹን የሚወስድ እና በአግድም መሃል ያለው አቀማመጥ ይፈጥራል. ከዚያ በኋላ h3 ን አካትተናል እና ቀጥሎ የቅጹ መሠረት ይመጣል። በኋላ ላይ የAJAX JQuery ፎርም ማስረከብ እንዲችሉ መታወቂያ ቅጹ ላይ ማመልከትዎን ያረጋግጡ፡

ያለ ትግል ድል የለም።

ስም የኢሜል መልእክት አስገባ መልእክት ገብቷል!

እነዚህ ሁሉ ተጠቃሚው የሚገናኝባቸው የግቤት መስኮች እና አዝራሮች ናቸው። ከተመደበው የረድፍ ክፍል ጋር ያለው የመነሻ ዲቪ ክላሲክ ቡትስትራፕ አገባብ ነው፣ ይህም አግድም የኮል አባሎችን መቧደንን ይወክላል። በ Bootstrap ውስጥ ያሉ አምዶች ንጣፍ ወይም ነጭ ቦታ ይፈጥራሉ። እነሱን በማስወገድ, መስመሩ ወደ መያዣው ውስጥ በትክክል እንዲገባ ማድረግ ይችላሉ.

ከ col-sm-6 (50%) ክፍል ጋር ሁለት አምዶችን ፈጠርን ይህም የቅጹን የላይኛው ክፍል ለመለየት እንጠቀማለን. በመጀመሪያው ዓምድ col-sm-6 ውስጥ የስም እና የኢሜል መለያ እና መስኮችን ፈጥረናል። እያንዳንዳቸው ከባህሪው ጋር የሚዛመድ መለያ ይዟል, ስለዚህ መለያው ከተዛማጅ መስክ ጋር የተያያዘ ነው.

እያንዳንዳቸው እነዚህ ዓምዶች ከታች ትንሽ ንጣፍ በመፍጠር መለያዎቹን በትርጉም የሚመድበው የቅጽ ቡድን ያካትታል፡

የፊደል አጻጻፍ

Bootstrap ለ H1-H6 ክፍሎችን እንድትጠቀም ይፈቅድልሃል. ተጨማሪ መስኮችን ሳታክሉ ወይም ሱፐር AJAX የእውቂያ ቅጽ አባል ብሎኮችን ሳይፈጥሩ የመስመር ውስጥ አባሎችን ስታይል ያግዙዎታል። መለያዎቹን ለመቅረጽ እና ትልቅ ለማድረግ የH4 ክፍልን ተጠቅመንበታል።

የቅርጽ-መቆጣጠሪያው ክፍል በእያንዳንዱ የግብአት ኤለመንቶች ላይ ይተገበራል ስለዚህም የእቃውን አጠቃላይ ስፋት (100% ስፋት) ይሞላል. ይህ ክፍል በቀላሉ ለማንበብ ቀላል የሆነ የቅጽ ኤለመንት (ትልቅ መጠን, ግልጽ ጠርዞች, ወዘተ) ለመፍጠር የሚያስችሉዎትን የተለያዩ ቅጦች ይጨምራል.

ከእነዚህ ዓምዶች በኋላ የመልእክቱን አካል እንጨምራለን. በቅጽ-ቡድን እናጠቅለዋለን እና ልክ እንደ ስያሜዎች እና የጽሑፍ መስኮች ተመሳሳይ ቅጦችን እንተገብራለን.

ወደ ተግባር ይደውሉ

የማስረከቢያ ቁልፍ እንፍጠር። Bootstrap ለተለያዩ አዝራሮች እና ግዛቶቻቸው ክፍሎችን ይዟል። በነባሪ አረንጓዴ የሆነውን "ስኬት" የሚለውን ቁልፍ (btn-success) ለመጠቀም ወስነናል።

እንዲሁም የአዝራሩን መሰረታዊ መመዘኛዎች (ድንበር፣ ንጣፍ፣ የጽሁፍ አሰላለፍ፣ የቅርጸ-ቁምፊ መጠን) ዳግም ለማስጀመር የbtn ቤዝ ክፍልን መጠቀም ያስፈልግዎታል። ትልቅ አዝራርን የሚፈጥረውን btn-lg ክፍልን እና ከዛም ፑል-ቀኝ ክፍልን ተጠቀምን ይህም ቁልፉን ወደ ግራ መጠቅለል ያደርገዋል።

ከአዝራሩ በኋላ፣ መታወቂያ #msgSubmit ያለው ዲቪ አስገባን እና የሚከተሉትን ትምህርቶች ተግባራዊ አድርገናል፡- “h3 text-center ተደብቋል። የ h3 ክፍል ትልቅ ርዕስ ለመፍጠር ይረዳል፣ የጽሁፍ ማእከል የፅሁፍ አሰላለፍ ወደ መሃል ያዘጋጃል እና የተደበቁ ስብስቦችን ያሳያል፡ ምንም እና የሚታይ፡ የተደበቀ፡

ውሂብን ለመላክ ተግባራዊነትን ማከል

መሰረታዊ የBootstrap JQuery AJAX ቅጽ ፈጥረናል፣ ግን እስካሁን ምንም አያደርግም። የእኛ ቀጣዩ እርምጃ የተጠቃሚን ግብአት የሚወስድ እና በማይመሳሰል መልኩ ወደ ፒኤችፒ የሚልክ ተግባር መፍጠር ነው።

የስክሪፕት.js ፋይልን ይክፈቱ እና የሚከተለውን ኮድ ወደ እሱ ይቅዱ።

$("#contactForm") .ማስረከብ (ተግባር (ክስተት)(// የቅጽ ውሂብ ክስተትን ይሰርዛል.preventDefault (); submit Form (); ));

ይህ የ#contactForm ውሂብ ማስረከቢያ ተግባራትን የሚያዳምጥ የJQuery ኮድ ቁራጭ ነው (ቀደም ሲል እንደተገለጸው)። ከዚህ ተግባር በፊት, የዝግጅቱን ተለዋዋጭ እንይዛለን, ይህም የቅጹን ማስረከቢያ ተግባር ለድርጊቱ ያከማቻል.

Event.preventDeafult() በቅጹ ላይ አንድን ድርጊት ሳይመርጡ ገጹ ሲታደስ የቅጹ ውሂብ እንዳይቀርብ ያቆማል። እና መጨረሻ ላይ ይህ ኮድ ተግባር submitForm (); :

ተግባር አስረክብ ቅጽ ())(// ከቅጹ ይዘቶች ጋር ተለዋዋጭ አስጀምር var ስም = $("#ስም").ቫል(); var ኢሜይል = $("#ኢሜል").val(); var መልእክት = $("#መልእክት") .val(); $.ajax (( አይነት: "POST", url: "php/form-process.php", ዳታ: "ስም = "ስም +" & ኢሜል = " + ኢሜይል + "&መልእክት = " + መልእክት ፣ ስኬት: ተግባር (ጽሑፍ) (ጽሑፍ == "ስኬት") ከሆነ (ቅጽ ስኬት (); ) )) ተግባር ቅጽ ስኬት ()) ($("#msgSubmit")።ክፍልን ያስወግዱ("የተደበቀ) ");)

ሦስቱ የተጠሩት ተለዋዋጮች የእያንዳንዱን የቅጹ ግቤት መስኮች እሴቶችን ይይዛሉ እና በኋላ ለመጠቀም ወደ ጃቫስክሪፕት ተለዋዋጭ ያስተላልፋሉ።

በ JQuery ውስጥ የ AJAX ነገርን አስጀምረናል እና የልጥፍ መለኪያዎችን እናስቀምጣለን ፣ የ PHP ፋይል ቦታ ፣ መለጠፍ የምንፈልገው ውሂብ እና የመልሶ መደወል ተግባር። ውሂቡ ሶስቱን ተለዋዋጮች ከተዛማጅ መታወቂያ ጋር ያካትታል። የመልሶ መደወል ተግባር የ AJAX ነገር በተሳካ ሁኔታ ከ PHP ስክሪፕት መረጃ ሲደርሰው ይባላል። ተግባሩ የተመለሰውን ጽሑፍ ይይዛል እና ከ "ስኬት" ሕብረቁምፊ ጋር እኩል መሆኑን ያረጋግጣል. አዎ ከሆነ፣ የመጨረሻው ቅጽ የስኬት ተግባር ይሰራል።

ቀደም ብለን ከተመለከትነው #msgSubmit DIV ላይ የተደበቀውን ክፍል ያስወግዳል፣ በዚህም ጽሑፉን ያወጣል።

ከ PHP ደብዳቤ ተግባር ጋር በመገናኘት ላይ

አሁን ከ AJAX ቅጽ ላይ መረጃ የሚቀበል ስክሪፕት መጻፍ እና ይዘቱን በ PHP Mail ተግባር በኩል መላክ ያስፈልግዎታል። የሂደቱን.php ፋይል ይክፈቱ እና የሚከተለውን ኮድ በእሱ ላይ ያክሉ።

ልንጠቀምባቸው የምንፈልጋቸውን ተለዋዋጮች ማስቀመጥ አለብን። ከደብዳቤው ተግባር ሶስት የግቤት ተለዋዋጮችን ማግኘት እና በ PHP ውስጥ ተመሳሳይ ስሞችን መስጠት ይችላሉ። የ$EmailTo ተለዋዋጭ በስክሪፕቱ ውስጥ ሊዋቀር የሚችል የኢሜይል አድራሻ ነው። $Subject የኢሜይሉን ርዕሰ ጉዳይ የሚገልጽ ሕብረቁምፊ ነው።

የደብዳቤው አካል ሶስት የተፈጠሩ ተለዋዋጭዎችን በመጨመር በዘፈቀደ የተፈጠረ ነው. በመጀመሪያ የማብራሪያውን ጽሑፍ እናዘጋጃለን, ለምሳሌ, "ስም:", ከዚያም ተለዋዋጭ ይመጣል, እና ከዚያም አዲስ መስመር (/ n). ሁሉንም ውሂብ ከ$ አካል ተለዋዋጭ ጋር በማያያዝ ተመሳሳይ እርምጃዎችን እንደግማለን።

ኢሜል ለመላክ ከደብዳቤ ተግባሩ ጋር እናያይዛለን። ለ$ የስኬት ተለዋዋጭ እሴት በመመደብ ኢሜይሉ የሚላክበትን የኢሜል አድራሻ፣ የኢሜይሉን ርዕሰ ጉዳይ፣ አካል እና የላኪውን ኢሜይል አድራሻ እንገልፃለን።

የኢሜል መላክ ሂደቱን ለመጀመር በማስታወቂያ ውስጥ መደወል ያስፈልግዎታል። በዚህ መንገድ የቅጹ ውሂቡ በተሳካ ሁኔታ መግባቱን ወይም አለመሆኑን ማረጋገጥ ይችላሉ። የደብዳቤው ተግባር "እውነት" ከተመለሰ, ስክሪፕቱ "ስኬት" ይመልሳል, ተግባሩ ስህተት ከጣለ "ልክ ያልሆነ" ይመለሳል.

ይህ ውጤት ወደ AJAX ነገር ይመለሳል እና በደንበኛው በኩል ይከናወናል። የ AJAX ጥቅሙ ሁሉም በደንበኛው በኩል ባልተመሳሰል መልኩ መደረጉ ነው. ይህ የAJAX ቅጽ ውሂብ እያስገባ እያለ ተጠቃሚው ከጣቢያው ጋር መገናኘቱን እንዲቀጥል ያስችለዋል።

እናብራ

አሁን በተለያዩ ተጨማሪ ባህሪያት አማካኝነት የተጠቃሚ ግብረመልስ በመስጠት ላይ እናተኩራለን። በተለይም የስህተት አያያዝን በመጠቀም የደንበኛ-ጎን እና የአገልጋይ-ጎን ምላሽን እንመለከታለን።

ቅጹን ለማረጋገጥ አንዳንድ መሳሪያዎችን እንጠቀማለን፡-

  • Animate.css:;
  • የቡት ስታራፕ አረጋጋጭ።

ከዚህ ቀደም በBootstrap እና JQuery እንዳደረግነው ወደ እርስዎ ፕሮጀክት ያክሏቸው። እነዚህ መሳሪያዎች መረጃን ካስገባ በኋላ ለተጠቃሚው ግብረመልስ ለመስጠት ይረዳሉ.

የፕሮጀክት መዋቅር አሁን ይህንን መምሰል አለበት-

የቅጽ ማረጋገጫ

የ AJAX PHP አድራሻ መረጃን ከገባን በኋላ አረጋጋጩን በመጫን እንጀምር። ወደ scripts.js ፋይል ይሂዱ እና የቅጹ መረጃ ከገባ በኋላ የ SubmitForm () ተግባርን የሚጠራውን የመጀመሪያውን ኮድ ያርትዑ።
በሚከተለው መልኩ መቀየር ያስፈልገዋል።

$("#contactForm") .validator () ላይ ("አስረክብ", ተግባር (ክስተት) (ከሆነ (event.isDefaultPrevented ()) ( // መያዣ ቅጽ ስህተት ... ) ሌላ ( // ሁሉም ነገር ጥሩ ነው! ክስተት) .preventDefault (); submitForm ();

ይህ አዲስ የኮድ ቅንጣቢ የBootstrap አረጋጋጭ ችግሮች እንዳገኙ እና ኮዱ እንዳይሰራ ካቆመ ያረጋግጣል። ካልሆነ እንደተለመደው እንቀጥላለን. አሁንም ነባሪውን እርምጃ (ቅጹን ሳይሞሉ ገጹን እንደገና መጫን) ከቅጽ ውሂብ ማስረከቢያ ስክሪፕት ማግለል አለብን።

አሁን፣ ሁሉንም መስኮች ሳይሞሉ የማስረከቢያ አዝራሩን ጠቅ ካደረግን ባዶዎቹ በቀይ ይደምቃሉ።


ማረጋገጫን በማከል ሂደት ላይ፣ ቤተኛ HTML5 ማረጋገጥን አሰናክለናል። የስህተት መልዕክቶችን በማካተት ወደ ማረጋገጫው ተጨማሪ አውድ ማከል ይችላሉ። Bootstrap አረጋጋጭ ለእያንዳንዱ መስክ የስህተት መልዕክቶችን እንዲያሳዩ የሚያስችልዎ ምቹ ባህሪ አለው። እነሱን ለመጨመር የኤችቲኤምኤል ምልክት ማድረጊያውን ማጠናቀቅ ያስፈልግዎታል።

በእያንዳንዱ የቅጽ ቡድን ውስጥ፣ በውሂብ ግቤት መስክ ስር፣ የሚከተለውን HTML ኮድ ማስቀመጥ አለቦት።

እንደ ምሳሌ፣ ከዚህ በታች በስም እና በኢሜል መስኮች ላይ ተጨማሪ ዲቪ ታክሏል፡

ስም ኢሜል

አሁን፣ የAJAX JQuery ቅጽ ውሂብን እንደገና በሚልኩበት ጊዜ፣ የቅጽ መስኮቹ ካልተሞሉ የስህተት መልእክት ይታያል፡ “እባክዎ ይህንን መስክ ይሙሉ።

" “የውሂብ-ስህተት” በሚባለው የግቤት ውሂቡ ላይ የውሂብ ባህሪን በማከል ብጁ የስህተት መልእክት ማካተት ይችላሉ።

ለምሳሌ፡-

የግብረመልስ አኒሜሽን በማከል ላይ

ባዶ የቅጽ መስኮችን ለማመልከት ተግባር አክለናል። ነገር ግን ለተጠቃሚው ምን እየተፈጠረ እንዳለ ለማሳወቅ አንዳንድ ተጨማሪ እነማዎችን እና አንዳንድ መልዕክቶችን ወደ ቅጹ ማከል ጥሩ ነው። በአሁኑ ጊዜ፣ የቅጹ መረጃ በተሳካ ሁኔታ ሲገባ፣ “መልእክት ገብቷል!

"ግን ስለ ስህተቶችስ?

ያለውን ኮድ ለመጠቀም ነባሩን የውሂብ ማስረከቢያ የስኬት መልእክት እናስተካክላለን። በመጀመሪያ “መልእክት ገብቷል!” የሚለውን ጽሁፍ እናስወግድ።

" ከኤችቲኤምኤል ምልክት ማድረጊያ እና ዲቪውን ባዶ ይተውት:

ይህ ተግባር ስለ ውሂብ መላክ ወይም የስህተት መልእክት ከመልዕክት ጋር እየተገናኘን መሆኑን ያረጋግጣል። ይህ የሚሰራው የተለዋዋጭውን ዋጋ በማጣራት ነው የሚሰራው . ያም ሆነ ይህ፣ ከተገቢው የCSS ክፍሎች ጋር ተለዋዋጭ ያዘጋጃል (እኛ ስለምናስወግዳቸው h3 እና የጽሑፍ ማእከልን እንደገና ማካተት አለብን)።

ማስታወሻ፡ ለስኬት መልእክት ክፍል አንዳንድ animate.css ክፍሎችን እየተጠቀምን ነው። የAJAX JQuery የእውቂያ ቅጽ ውሂብ በተሳካ ሁኔታ ሲገባ የታዳ አኒሜሽን ይጫወታል።

በመጨረሻም ተግባሩ ሁሉንም ክፍሎች ከ#msgSubmit ያስወግዳል (የክፍል መደራረብን ለማስቀረት) እና በመቀጠል ቅድሚያ የሚሰጣቸውን ክፍሎች ያዘጋጃል እና የመልዕክት ጽሁፍን ወደ ዲቪ ያክላል።

በዚህ ክፍል መጀመሪያ ላይ ባለው አረጋጋጭ አጀማመር ውስጥ፣ ወደ እውነት ሲገመገም በመግለጫው ውስጥ ለሚከተለው ተግባር ጥሪን ለመጨመር ኮዱን እናዘምነዋለን።

አስገባ (ሐሰት፣ "ቅጹን በትክክል ሞልተሃል?");

አሁን፣ ሁሉንም መስኮች ካልሞሉ፣ የስህተት መልእክት ይደርስዎታል “ቅጹን በትክክል ሞልተሃል? »

የዚህ አዲስ አስገባ ኤምኤስጂ ተግባር የመጨረሻው ደረጃ የቅጹ ውሂቡ በተሳካ ሁኔታ ሲገባ መደወል ነው። የስኬት() ተግባርን እንደሚከተለው ያዘምኑ።

$ ("# contactForm") .ዳግም አስጀምር (); አስገባ MSG (እውነት፣ "መልእክት ገብቷል!")

ከላይ እንደተገለፀው የማስረከቢያውን የማስረከቢያ ተግባር ስንጠራ ቅጹን ዳግም ማስጀመር እና እሴቶቹን ማጽዳት እንፈልጋለን። አሁን፣ የቅጽ ውሂቡ በተሳካ ሁኔታ ሲገባ፣ ከ animate.css tada እነማ ጋር የሚዛመድ መልእክት መታየት አለበት።

እራሳችንን እናንቀጠቀጡ

በጠቅላላው ቅጽ ላይ የሳንካ እነማ እንጨምር፣ አጠቃላይ “የሚንቀጠቀጥ” አኒሜሽን ዘዴውን መሥራት አለበት!

ከቅጽ ስኬት() በኋላ ወዲያውኑ አዲስ ተግባር ይፍጠሩ እና formError() ብለው ይደውሉት።

ተግባር ቅጽError())($("#contactForm"))።ክፍልን አስወግድ()።addClass("shake animated") )) ;

ይህ ተግባር በ animate.css ማሳያ ገጽ ላይ የተገለጸውን አካሄድ ይጠቀማል፣ ይህም አኒሜሽን ወደ ኤለመንት እንዲያክሉ እና እንደገና እንዲጠሩት ያስችልዎታል።

የCSS አኒሜሽን አሳዛኝ ባህሪ አለው፡ ክፍሉ ተወግዶ እንደገና ቢታከልም ሊጫወት አይችልም። ይህ ተግባር የአኒሜሽን መጨረሻ ክፍሎችን ዳግም እንዲያስጀምሩ ያግዛል ስለዚህም እንደገና ማከል ይችላሉ። ተጠቃሚው ሁሉንም የ AJAX የግብረመልስ ቅጽ ሳይሞላ "አስገባ" የሚለውን ቁልፍ ጠቅ ሲያደርግ፣ የሻክ አኒሜሽን እንጫወታለን። እና ሁሉንም መስኮች እንደገና ካልሞላ ፣ ይህንን አኒሜሽን እንደገና ማጫወት ያስፈልግዎታል።

ስህተቱን ሪፖርት ለማድረግ ከፈጠርነው የአስገባ ኤምኤስጂ() ተግባር በላይ ይህንን የፎርምError() ተግባር መደወል ይችላሉ። ለምሳሌ፣ እንደዚህ፡-

ቅጽ ስህተት (); አስገባ (ሐሰት፣ "ቅጹን በትክክል ሞልተሃል?");

አሁን፣ ተጠቃሚው ሁሉንም መስኮች ሳይሞላ የቅጹን ውሂብ ለማስገባት ሲሞክር የሆነ ችግር እንዳለ ለማሳወቅ ይንቀጠቀጣል።

ተጨማሪ ማረጋገጫ

ከደንበኛ ጎን ማረጋገጥ ጥሩ ነው፣ ነገር ግን ማንኛውም ተጠቃሚ ሊያሰናክለው እና በአሳሹ ውስጥ ያለውን ኮድ በማስተካከል ባዶ መስኮችን ማስገባት ይችላል። በአገልጋዩ በኩል የማረጋገጫ አገልግሎት መፍጠር አስፈላጊ ነው.

የሂደቱን.php ፋይል መክፈት እና ሁሉም መስኮች መፈተሻቸውን ለማረጋገጥ አስፈላጊ ለውጦችን ማድረግ አለብን። የስህተት መልዕክቶችን ለመያዝ እና ተጨማሪ የ$_POST ፍተሻን ለማንቃት $errorMSG ተለዋዋጭ እንፈጥራለን፡-

ይህ ፒኤችፒ ኮድ ባዶ የAJAX ቅጽ መስኮች መኖራቸውን ያረጋግጣል ውሂባቸውን እንደ ተጓዳኝ ተለዋዋጮች ከማዘጋጀቱ በፊት (ከ$_POST ያሉትን በኮድ የተገለጹ ተለዋዋጮችን በመተካት)። መስኮቹ ባዶ ከሆኑ ወደ ደንበኛው የሚመለስበትን አጠቃላይ መልእክት እንገልፃለን።

ለዋናው AJAX ጥሪ ምላሽ በአሳሹ ውስጥ የሚታየውን የስህተት መልእክት መላክ አለብን። ይህንን ለማድረግ በPHP ኮድ ግርጌ ላይ ቀደም ብለን የፈጠርነውን መግለጫ ያርትዑ።

በፊደል መግለጫው የ$errorMSG ተለዋዋጭ ባዶ መሆኑን ("") እና እንዲሁም ለ$ የስኬት ተለዋዋጭ የተጠቀምንበት የመልእክት ተግባር ሁኔታን እናረጋግጣለን። በሌላ ሁኔታ ስህተቱ የ$ የስኬት ውድቀት ውጤት መሆኑን ለማየት ተጨማሪ ፍተሻ አካተናል። አዎ ከሆነ፣ “የሆነ ችግር ተፈጥሯል፡” የሚለውን መልእክት እንመልሳለን። ያለበለዚያ ባዶ ቦታዎችን ስንፈትሽ የተጠናቀረውን መልእክት እናሳያለን።

እና የመጨረሻው እርምጃ አዲስ መልእክት በ AJAX ውስጥ መቀበል እና በቅጹ ውስጥ ማሳየት ነው. በscripts.js ፋይል ውስጥ ያለውን የAJAX ነገር እንደሚከተለው ማዘመን አለብን፡-

$.ajax((አይነት፡ "POST"፣ url: "php/form-process.php", data: "name="+ name+"&email="+ email+"&message="+ message, success: function( ጽሑፍ) (ጽሑፍ == "ስኬት" ከሆነ (ቅጽ ስኬት ();) ሌላ (formError (); አስረክብ MSG (ሐሰት, ጽሑፍ); ) )));

የጽሑፍ == ስኬትን የሚፈትሽ ሌላውን ሁኔታ አሁን አዘምነናል። በሌላ በኩል የፎርም ስህተት() ተግባር ብለን እንጠራዋለን፣ እሱም መንቀጥቀጡን አኒሜሽን የሚተገበር እና ከPHP የተመለሰውን ጽሁፍ የማስረከቢያ MSG() ተግባርን ይጠይቃል።

ማጠቃለያ

ሙሉውን ኮድ ለማየት ወደ Github ይሂዱ። አሁን የ AJAX PHP ግብረመልስ ቅጽ ለተጠቃሚው የትኞቹን መስኮች እንዳልሞሉ መረጃዎችን ይሰጣል። ሁኔታውን እና ከPHP የተመለሰውን መልእክት መሰረት በማድረግ አውድ መልእክቶችን እናወጣለን። እንዲሁም የፊት-መጨረሻ ማረጋገጫን ለማለፍ ለሚሞክሩ ተጠቃሚዎች ተጨማሪ የአገልጋይ-ጎን ማረጋገጫን ተግባራዊ አድርገናል።

በዚህ ጽሑፍ እንደተደሰቱ ተስፋ አደርጋለሁ። እባክዎን ጥያቄዎችዎን እና አስተያየቶችዎን በአስተያየቶቹ ውስጥ ይተዉት።

ይህ እትም "PHP እና AJAX በመጠቀም የቡት ስታራፕ አድራሻ ፎርም መገንባት" በሚለው ወዳጃዊ የፕሮጀክት ቡድን የተዘጋጀ ጽሑፍ ትርጉም ነው።


በ OWASP መሠረት በአስሩ በጣም የተለመዱ የጥቃት ዓይነቶች ዝርዝር ውስጥ የመጀመሪያዎቹ ሁለት ቦታዎች በኮድ መርፌ እና በኤክስኤስኤስ (የመሻገሪያ ስክሪፕት) ጥቃቶች የተያዙ ናቸው። አብረው ይሄዳሉ ምክንያቱም XSS ልክ እንደሌሎች የጥቃት ዓይነቶች በመርፌ ጥቃቶች ስኬት ላይ የተመሰረተ ነው። ይህ ስም አጥቂው በሚፈልገው መንገድ ተንኮል አዘል ኮድ እንዲፈጽም ወይም እንዲተረጉም ለማስገደድ ውሂብ ወደ ድር መተግበሪያ የሚያስገባበትን አጠቃላይ የጥቃቶች ክፍል ይደብቃል። እነዚህ ጥቃቶች ለምሳሌ XSS፣ SQL መርፌ፣ የራስጌ መርፌ፣ የኮድ መርፌ እና ሙሉ ዱካ ይፋ ማድረግን ያካትታሉ። እና ይሄ ትንሽ ክፍል ብቻ ነው.


የመርፌ ጥቃቶች ለሁሉም ፕሮግራም አውጪዎች አስፈሪ ታሪክ ነው። በአይነቱ፣ በመጠን እና (አንዳንዴም) ከነሱ የመከላከል ችግር የተነሳ በጣም የተለመዱ እና ስኬታማ ናቸው። ሁሉም መተግበሪያዎች ከየትኛውም ቦታ ውሂብ ማግኘት አለባቸው። XSS እና UI Redress በተለይ የተለመዱ ናቸው፣ስለዚህ የተለየ ምዕራፎችን ሰጥቻቸዋለሁ እና ከአጠቃላይ ክፍል ለይቻቸዋለሁ።


OWASP የሚከተለውን የመርፌ ጥቃቶች ፍቺ ይሰጣል፡-


የመርፌ እድሎች - እንደ SQL፣ OS እና LDAP - አስተርጓሚው እንደ የትዕዛዝ ጥያቄ አካል ታማኝ ያልሆነ መረጃ ሲቀበል ይነሳሉ። ተንኮል አዘል ውሂብ አስተርጓሚውን አንዳንድ ትዕዛዞችን እንዲፈጽም ወይም ያልተፈቀደ ውሂብ እንዲደርስ ሊያታልለው ይችላል።

SQL መርፌ

የ SQL መርፌ በጣም የተለመደ እና እጅግ በጣም አደገኛ የሆነ መርፌ ጥቃት ነው። የዚህን ስጋት አሳሳቢነት ለመገመት አስቸጋሪ ነው, ስለዚህ በጥቃቶች ስኬት ላይ ምን ተጽዕኖ እንደሚያሳድር እና እንዴት እንደሚከላከሉ መረዳት እጅግ በጣም አስፈላጊ ነው.


ስለዚህ ውሂቡ በድር መተግበሪያ ውስጥ ገብቷል እና በ SQL መጠይቆች ውስጥ ጥቅም ላይ ይውላል። እንደ ድረ-ገጽ ካሉ ከማይታመኑ የግብአት ምንጮች ይመጣሉ። ይሁን እንጂ መርፌ ከሌሎች ቦታዎችም ሊደረግ ይችላል ይላል ከመረጃ ቋቱ ራሱ። ፕሮግራመሮች ብዙውን ጊዜ የመረጃ ቋታቸውን ሙሉ ደህንነት ያምናሉ ፣ በአንድ ጉዳይ ላይ ደህንነቱ የተጠበቀ ከሆነ ይህ ማለት ለወደፊቱ ደህንነቱ የተጠበቀ ይሆናል ማለት አይደለም ። ከመረጃ ቋቱ የሚገኘው መረጃ በሌላ መልኩ እስካልተረጋገጠ ድረስ ማለትም እስካልተረጋገጠ ድረስ አስተማማኝ እንዳልሆነ መቆጠር አለበት።


ጥቃቱ ከተሳካ አጥቂው የ SQL መጠይቁን በገንቢዎች ያልታሰቡ ስራዎችን በመረጃ ቋቱ ላይ እንዲያከናውን ማድረግ ይችላል።


ይህንን ጥያቄ ይመልከቱ፡-


$db = አዲስ mysqli ("localhost", "የተጠቃሚ ስም", "የይለፍ ቃል", "ስቶርድብ"); $result = $db->ጥያቄ("ከግብይቶች ምረጥ WHERE user_id = " . $_POST["user_id"]);

እዚህ በርካታ ጃምቦች አሉ። በመጀመሪያ የተጠቃሚ_መታወቂያው ትክክል መሆኑን ለማረጋገጥ የPOST ውሂብን ይዘት አላረጋገጥንም። በሁለተኛ ደረጃ፣ ያልታመነ ምንጭ የትኛው ተጠቃሚ_መታወቂያ እንደሚጠቀም እንዲነግረን እንፈቅዳለን፡ አጥቂ በማንኛውም ትክክለኛ የተጠቃሚ_መታወቂያ ውስጥ ሊንሸራተት ይችላል። ሊስተካከል ባለመቻሉ (አጥቂዎች ማንኛውንም ዳታ ማስገባት እንደሚችሉ እየረሳን ሳለ) ደህንነቱ የተጠበቀ ነው ብለን ባሰብነው ቅጽ ላይ በድብቅ መስክ ውስጥ ተይዞ ሊሆን ይችላል። በሶስተኛ ደረጃ ከተጠቃሚ_አይድ አላመለጠንም ወይም ወደ መጠይቁ እንደ bound parameter አላስተላለፍነውም፣ይህም አጥቂ የSQL መጠይቁን የሚያስተናግድ የዘፈቀደ ገመዶችን እንዲያስገባ ያስችለዋል፣ይህም በመጀመሪያ ደረጃ ማረጋገጥ ስላልቻልን ነው።


እነዚህ ሶስት ግድፈቶች በድር መተግበሪያዎች ውስጥ በጣም የተለመዱ ናቸው።


የውሂብ ጎታ እምነትን በተመለከተ የተጠቃሚ_ስም መስክን ተጠቅመን ግብይቶችን እንደፈለግን አስብ። ስሞቹ በስፋት ሰፊ ናቸው እና የጥቅስ ምልክቶችን ሊይዙ ይችላሉ። አንድ አጥቂ የተወጋበት የሕብረቁምፊ እሴት ከተጠቃሚ ስም በአንዱ ያከማቻል እንበል። ይህንን እሴት እንደገና ከሚከተሉት ጥያቄዎች ውስጥ በአንዱ ስንጠቀም የመረጃ ቋቱን አስተማማኝ ምንጭ አድርገን ስለቆጠርን እና የተበላሸውን መጠይቁን ስላላገለልን ወይም ስላልገደብነው የመጠይቁን ሕብረቁምፊ ያስተካክላል።


እንዲሁም በ SQL አተገባበር ላይ ላለው ሌላ ነገር ትኩረት ይስጡ-ቋሚ ማከማቻ ሁልጊዜ በአገልጋዩ ላይ መቀመጥ አያስፈልገውም። HTML 5 SQL እና JavaScriptን በመጠቀም መጠይቆችን መላክ የምትችልበት የደንበኛ ወገን ዳታቤዝ መጠቀምን ይደግፋል። ለዚህ ሁለት ኤፒአይዎች አሉ፡ WebSQL እና IndexedDB። እ.ኤ.አ. በ 2010 W3C WebSQL እንዲመርጡ አልመከሩም ። SQLite እንደ የጀርባ ማቀፊያ በመጠቀም በ WebKit አሳሾች ይደገፋል። ምንም እንኳን የW3C ምክር ቢሰጥም ምናልባት፣ ለኋላ ተኳኋኝነት ሲባል ድጋፍ ይቀራል። ስሙ እንደሚያመለክተው ይህ ኤፒአይ የSQL መጠይቆችን ይቀበላል፣ ይህ ማለት መርፌ ጥቃቶች ኢላማ ሊሆን ይችላል። IndexedDB አዲስ አማራጭ፣ የNoSQL ዳታቤዝ ነው (የ SQL መጠይቆችን መጠቀም አያስፈልገውም)።

የ SQL መርፌ ምሳሌዎች

የ SQL መጠይቆችን ማቀናበር የሚከተሉት ግቦች ሊኖሩት ይችላል፡

  • የውሂብ መፍሰስ.
  • የተከማቸ መረጃ ይፋ ማድረግ።
  • የተከማቸ መረጃን መጠቀም.
  • የፍቃድ ማለፊያ።
  • የደንበኛ-ጎን SQL መርፌ።
  • የ SQL መርፌ መከላከያ

    ከ SQL መርፌ መከላከል በ echeloning መርህ ላይ የተመሠረተ ነው። በጥያቄ ውስጥ ውሂብ ከመጠቀምዎ በፊት ቅጹ ትክክል መሆኑን ማረጋገጥ አለብዎት። በጥያቄው ውስጥ ከማካተትዎ በፊት መረጃውን ማግለል ወይም እንደ መሸጋገሪያ መለኪያ ማካተት ያስፈልጋል።

    ምርመራ

    እደግመዋለሁ፡ አሁን ባለው ጥያቄ በPHP ምንጭ ኮድ ውስጥ በግልፅ ያልተፈጠሩ ሁሉም መረጃዎች አስተማማኝ አይደሉም። እነሱን በጥብቅ ያረጋግጡ እና ቼኮችን የማያልፈውን ማንኛውንም ነገር ውድቅ ያድርጉ። መረጃውን "ለማረም" አይሞክሩ, ትንሽ ብቻ, በቅርጸቱ ላይ የመዋቢያ ለውጦች ሊደረጉ ይችላሉ.


    የተለመዱ ስህተቶች ለቀጣይ አጠቃቀም (እንደ ማሳያ ወይም ስሌቶች ያሉ) መረጃዎችን ማረጋገጥ እና በውጤቱም መረጃው በሚከማችበት የውሂብ ጎታ ውስጥ ያሉ መስኮችን ማረጋገጥን ያካትታሉ።

    መከለያ

    mysqli ቅጥያውን በመጠቀም በSQL መጠይቅ ውስጥ የተካተቱትን ሁሉንም መረጃዎች ማግለል ይችላሉ። የ mysqli_real_escape_string() ተግባር ይህን ያደርጋል። የpgsql የPostgresSQL ቅጥያ pg_escape_bytea() ፣ pg_escape_identifier() ፣ pg_escape_literal() እና pg_escape_string() ተግባራትን ያቀርባል። የ mssql ቅጥያ (Microsoft SQL Server) የማግለል ተግባራት የሉትም፣ እና addslashes() አካሄድ ውጤታማ አይደለም - ብጁ ተግባር ያስፈልግዎታል።


    ሕይወትዎን የበለጠ ከባድ ለማድረግ ፣ በጥያቄ ውስጥ የገባውን ውሂብ ሲገለሉ ስህተት የመሥራት መብት የለዎትም እላለሁ ። አንድ ናፍቆት እና እርስዎ ለማጥቃት ተጋላጭ ነዎት።


    እናጠቃልለው። መከለያው ከሁሉ የተሻለው የመከላከያ አማራጭ አይደለም. እንደ የመጨረሻ አማራጭ መጠቀም አለበት። ለማጠቃለያ የሚጠቀሙበት የውሂብ ጎታ ቤተ-መጽሐፍት ባዶ የ SQL መጠይቆችን ወይም የጥያቄውን ክፍሎች መለኪያዎች እንዲታሰሩ ሳያስገድዱ እንዲያዋቅሩ ከፈቀደ ሊያስፈልግ ይችላል። በሌሎች ሁኔታዎች, ሙሉ በሙሉ መገለልን ማስወገድ የተሻለ ነው. ይህ አካሄድ ውስብስብ፣ ስህተት የተጋለጠ ነው፣ እና እንደ የውሂብ ጎታ ቅጥያው ይለያያል።

    የተመጣጣኝ መጠይቆች (የተዘጋጁ መግለጫዎች)

    የSQL መጠይቆችን ለመፍጠር የሚመከር መንገድ ወይም ፓራሜትሪላይዜሽን ነው። ሁሉም ጥሩ የውሂብ ጎታ ቤተ-ፍርግሞች በነባሪነት ይጠቀማሉ. ለ PHP የ PDO ቅጥያ የመጠቀም ምሳሌ እዚህ አለ፡-


    ከሆነ (ctype_digit($_POST ["መታወቂያ")]) && is_int($_POST["id")) ($validatedId = $_POST["id"]፤ $pdo = አዲስ PDO("mysql:store.db") ; $stmt = $ pdo-> አዘጋጅ ("ከግብይቶች WHERE user_id = : id"); $stmt-> bindParam (": id", $validatedId, PDO :: PARAM_INT); የመታወቂያው ዋጋ እና ስህተትን ለተጠቃሚው ያሳውቁ)

    ለPDO መግለጫዎች የሚገኘው የቢንዲፓራም() ዘዴ ቀደም ሲል በተዘጋጀ አገላለጽ ውስጥ ከቀረቡት “ቦታ ያዥዎች” ጋር እንዲተሳሰሩ ያስችላቸዋል። ይህ ዘዴ እንደ PDO :: PARAM_INT , PDO :: PARAM_BOOL , PDO :: PARAM_LOB እና PDO :: PARAM_STR የመሳሰሉ የመሠረታዊ የውሂብ አይነቶች መለኪያዎችን ይቀበላል. ይህ ካልሆነ በስተቀር የPDO:: PARAM_STR ነባሪ ነው፣ ስለዚህ ለሌሎች እሴቶችም ያስታውሱ!


    ከእጅ ማግለል በተለየ የመለኪያ ማሰሪያ (ወይም የውሂብ ጎታ ቤተ-መጽሐፍትዎ የሚጠቀምበት ማንኛውም ዘዴ) የትኛውን ተግባር መጠቀም እንዳለቦት እንዳያስታውስ በራስ-ሰር የታሰረ ውሂብን በትክክል ያገለል። እንዲሁም፣ ሁሉንም ነገር በእጅ ማግለል እንዳለቦት ለማስታወስ ከመሞከር በላይ ወጥነት ያለው መለኪያ ማሰር የበለጠ አስተማማኝ ነው።

    የአነስተኛ መብትን መርህ መተግበር

    የተሳካ የSQL መርፌን ማቋረጥ ልክ እንደ ሙሉ በሙሉ መከላከል አስፈላጊ ነው። አንድ አጥቂ የ SQL መጠይቆችን የማስፈጸም ችሎታ ሲያገኝ እንደ አንድ የተወሰነ የውሂብ ጎታ ተጠቃሚ ያደርገዋል። የአነስተኛ ልዩ መብት መርህ ሁሉም ተጠቃሚዎች ተግባራቸውን ለመፈፀም በጣም አስፈላጊ የሆኑ ልዩ መብቶች እንዲኖራቸው ማረጋገጥ ይችላል።


    አንድ ተጠቃሚ ከፍተኛ መብቶች ካሉት፣ አጥቂው ጠረጴዛዎችን ጥሎ የሌሎች ተጠቃሚዎችን ልዩ መብቶችን በመወከል አዲስ የSQL መርፌዎችን ማድረግ ይችላል። ይህ እንዳይከሰት ለመከላከል ዳታቤዙን ከድር መተግበሪያ እንደ ስር፣ አስተዳዳሪ ወይም ሌላ ከፍተኛ መብት ያለው ተጠቃሚ በፍፁም አይውሰዱ።


    ሌላው የመርህ አተገባበር የማንበብ እና የመፃፍ ሚናዎች ወደ ዳታቤዝ መለያየት ነው። አንድ የመጻፍ-ብቻ ፈቃዶች እና ሌላ ተነባቢ-ብቻ ፈቃዶች ያለውን ተጠቃሚ ይምረጡ። ጥቃቱ ወደ "ማንበብ" ተጠቃሚ ከሆነ, አጥቂው በሠንጠረዡ ውስጥ ያለውን መረጃ መጠቀም ወይም መጻፍ አይችልም. መዳረሻን በጠባብነት መገደብ ይችላሉ፣ በዚህም የተሳካ የSQL መርፌ ጥቃቶችን ተፅእኖ ይቀንሳል።


    ብዙ የዌብ አፕሊኬሽኖች፣ በተለይም ክፍት ምንጮች፣ የተነደፉት አንድ የውሂብ ጎታ ተጠቃሚ ብቻ ነው፣ የልዩነት ደረጃቸው በእርግጠኝነት አይረጋገጥም። ስለዚህ ስለዚህ ነጥብ አይርሱ እና መተግበሪያዎችን በአስተዳዳሪ መለያ ስር ለማሄድ አይሞክሩ.

    ኮድ ማስገባት (የርቀት ፋይል ማካተት በመባል ይታወቃል)

    ኮድ መርፌ አንድ አጥቂ የመተርጎም እና የማስፈጸም ችሎታ ባለው የድር መተግበሪያ ላይ የምንጭ ኮድ እንዲጨምር የሚያስችል ማንኛውም ዘዴ ነው። በዚህ አጋጣሚ, ኮድን ወደ ደንበኛ ክፍል ስለማስተዋወቅ እየተነጋገርን አይደለም, ለምሳሌ በጃቫስክሪፕት ውስጥ, የ XSS ጥቃቶች እዚህ ጥቅም ላይ ይውላሉ.


    የምንጭ ኮድ በቀጥታ ካልታመነ የግቤት ምንጭ ማስገባት ወይም የድር መተግበሪያን ከአካባቢው የፋይል ስርዓት ወይም እንደ ዩአርኤል ካሉ ውጫዊ ምንጮች እንዲጭን ማስገደድ ይችላሉ። ኮድ በውጫዊ ምንጭ ማካተት ምክንያት ሲወጋ፣ በተለምዶ የርቀት ፋይል ማካተት (RFI) ተብሎ ይጠራል፣ ምንም እንኳን RFI ራሱ ሁልጊዜ ኮድ ለማስገባት የታሰበ ነው።


    ኮድ ለማስተዋወቅ ዋና ምክንያቶች-

    • የግቤት ውሂብን መፈተሽ ማለፍ ፣
    • እንደ ፒኤችፒ ኮድ በሚታይበት በማንኛውም አውድ ውስጥ ያልታመነ ግብዓት ማስገባት፣
    • የምንጭ ኮድ ማከማቻዎችን ደህንነት መጥለፍ ፣
    • የሶስተኛ ወገን ቤተ መፃህፍትን ስለመጫን ማስጠንቀቂያዎችን ያሰናክሉ ፣
    • ፒኤችፒ ያልሆኑ ፋይሎችን ወደ ፒኤችፒ አስተርጓሚ እንዲያስተላልፍ አገልጋዩን እንደገና ማዋቀር።

    ለመጨረሻው ነጥብ ልዩ ትኩረት ይስጡ: በዚህ አጋጣሚ, የማይታመኑ ተጠቃሚዎች ማንኛውንም ፋይሎች ወደ አገልጋዩ መስቀል ይችላሉ.

    የኮድ መርፌ ምሳሌዎች

    ፒኤችፒ ብዙ የኮድ መርፌ ኢላማዎች አሉት፣ስለዚህ ይህ አይነት ጥቃት ከማንኛውም የፕሮግራም አድራጊዎች መመልከቻ ዝርዝር በላይ ነው።

    ፋይልን ጨምሮ

    ለኮድ መርፌ በጣም ግልጽ የሆኑት ኢላማዎች ያካትታሉ() ፣ አንድ ጊዜ () ፣ ተፈላጊ() እና የሚያስፈልገው_አንድ ጊዜ() ተግባራት ናቸው። የማያስተማምን የግቤት ውሂብ ወደ እነዚህ ተግባራት የተላለፈውን የመንገዱን መለኪያ ለመወሰን ከፈቀደ የትኛውን ፋይል ማካተት እንዳለበት በርቀት መቆጣጠር ይችላሉ። የተካተተው ፋይል እውነተኛ ፒኤችፒ ፋይል መሆን እንደሌለበት ልብ ሊባል ይገባል ፣ የጽሑፍ መረጃን ለማከማቸት የሚችል ማንኛውንም የፋይል ቅርጸት መጠቀም ይቻላል (ማለትም ያለ ገደብ ማለት ይቻላል)።


    የመንገዱ መለኪያው ለዳይሬክተሩ ትራቨርሳል ወይም የርቀት ፋይል ማካተት ጥቃቶች የተጋለጠ ሊሆን ይችላል። በመንገድ ላይ ያለውን የ../ ወይም... የቁምፊ ጥምረቶችን በመጠቀም አጥቂው የPHP ሂደቱ ወደ ሚገኘው ማንኛውም ፋይል እንዲሄድ ያስችለዋል። በተመሳሳይ ጊዜ፣ በነባሪው ፒኤችፒ ውቅር ውስጥ፣ allow_url_include ካልተሰናከለ በስተቀር ከላይ ያሉት ተግባራት URL ይቀበላሉ።

    ምርመራ

    የPHP eval() ተግባር ለአፈፃፀም የPHP ኮድ መስመርን ይቀበላል።

    መደበኛ መግለጫዎችን መተግበር

    በPHP ውስጥ ያለው PCRE (Perl Compatible Regular Expression) ተግባር preg_replace() ኢ መቀየሪያውን (PREG_REPLACE_EVAL) መጠቀም ያስችላል። ይህ ማለት ምትክ ሕብረቁምፊ ማለት ነው, ይህም ከተተካ በኋላ እንደ ፒኤችፒ ኮድ ይቆጠራል. እና በዚያ መስመር ላይ ያልታመነ ግብአት ካለ፣ ከዚያ ሊተገበር የሚችል ፒኤችፒ ኮድ ማስገባት ይችላሉ።

    ጉድለት ያለበት የፋይል ማካተት አመክንዮ

    የድር መተግበሪያዎች፣ በትርጓሜ፣ ማንኛውንም ጥያቄ ለማቅረብ የሚያስፈልጉትን ፋይሎች ያካትታሉ። በማዘዋወር ሎጂክ ፣ ጥገኝነት አስተዳደር ፣ አውቶማቲክ ጭነት እና ሌሎች ሂደቶች ላይ ያሉ ጉድለቶችን ከተጠቀሙ የጥያቄውን መንገድ ወይም ግቤቶችን መጠቀሙ አገልጋዩ የተወሰኑ አካባቢያዊ ፋይሎችን እንዲያካትት ያስገድደዋል። የድረ-ገጽ አፕሊኬሽኑ እንደዚህ አይነት ማጭበርበሮችን ለመቆጣጠር የተነደፈ ስላልሆነ ውጤቶቹ ያልተጠበቁ ሊሆኑ ይችላሉ። ለምሳሌ፣ አፕሊኬሽኑ ሳያውቅ በትእዛዝ መስመሩ ላይ ለመጠቀም የታሰቡ መንገዶችን ያጋልጣል። ወይም ግንበኞቻቸው ተግባራቸውን የሚያከናውኑ ሌሎች ክፍሎችን ያሳያል (በዚህ መንገድ ክፍሎችን አለመንደፍ የተሻለ ነው, ግን ይህ አሁንም ይከሰታል). ከነዚህ ሁኔታዎች ውስጥ ማንኛቸውም በመተግበሪያው የኋላ አሠራሮች ላይ ጣልቃ ሊገቡ ይችላሉ፣ ይህም የውሂብ አጠቃቀምን ወይም የ DOS ጥቃቶችን በንብረት ላይ ቀጥተኛ መዳረሻን በማያካትቱ ስራዎች ላይ።

    ኮድ ማስገቢያ ፈተናዎች

    ይህ ዓይነቱ ጥቃት አጥቂው የመረጠውን ማንኛውንም ፒኤችፒ ኮድ እንዲፈጽሙ ስለሚያስችል የተግባር ወሰን እጅግ በጣም ሰፊ ነው።

    ከኮድ መርፌ ትዕዛዙ መርፌ መከላከል የትእዛዝ መርፌ ምሳሌዎች ከትዕዛዝ ማስገቢያ ሎግ መርፌ (Log File Injection በመባል ይታወቃል)

    ብዙ አፕሊኬሽኖች የምዝግብ ማስታወሻዎችን ይሰበስባሉ፣ እና የተፈቀደላቸው ተጠቃሚዎች ብዙ ጊዜ በኤችቲኤምኤል በይነገጽ ይመለከቷቸዋል። ስለዚህ ሌሎች ጥቃቶችን ለማስመሰል፣ ምዝግብ ማስታወሻዎችን የሚያዩትን በማታለል እና መዝገቦቹ የሚነበቡበት እና የሚተነተኑበትን የክትትል መተግበሪያ ተጠቃሚዎችን ለማጥቃት ከሚፈልጉ አጥቂዎች አንዱ ሎግ ዋነኛው ኢላማ ነው።


    የምዝግብ ማስታወሻዎች ተጋላጭነት በሎግ ቀረጻ ላይ ባሉ የቁጥጥር ዘዴዎች እንዲሁም የምዝግብ ማስታወሻዎችን ሲመለከቱ እና ሲተነትኑ የምዝግብ ማስታወሻዎችን እንደ ታማኝ ያልሆነ ምንጭ በማየት ላይ የተመሠረተ ነው።


    ቀላል የምዝግብ ማስታወሻ ስርዓት file_put_contents() በመጠቀም ወደ ፋይል የጽሑፍ ሕብረቁምፊዎችን መፃፍ ይችላል። ለምሳሌ፣ ፕሮግራመር ያልተሳኩ የፈቀዳ ሙከራዎችን በሚከተለው ቅርጸት እንደ ሕብረቁምፊ ይመዘግባል፡


    sprintf ("ያልተሳካ የመግባት ሙከራ በ%s", $username);

    አጥቂው በቅጹ ላይ "Adminn Successful Login by Adminn" የሚለውን ስም ቢጠቀምስ?


    ይህ መስመር ካልታመነ የግብዓት ውሂብ ወደ ምዝግብ ማስታወሻው ውስጥ የገባ ከሆነ አጥቂው የአስተዳዳሪ የይለፍ ቃል ለማስገባት ንፁህ ውድቀትን በመጠቀም ያልተሳካውን የፍቃድ ሙከራ በተሳካ ሁኔታ ይለውጠዋል። የተሳካ የፍቃድ ሙከራ ካከሉ የመረጃው አጠራጣሪነት የበለጠ ይቀንሳል።


    እዚህ ያለው አጠቃላይ ነጥብ አጥቂው ሁሉንም አይነት ግቤቶችን ወደ ምዝግብ ማስታወሻው ማከል መቻሉ ነው። እንዲሁም የXSS ቬክተሮችን እና የሎግ ግቤቶችን በኮንሶሉ ውስጥ ለማንበብ የሚያስቸግሩ ቁምፊዎችን እንኳን ማስገባት ይችላሉ።

    የምዝግብ ማስገቢያ ተግባራት

    አንዱ የትግበራ ግቦች የምዝግብ ማስታወሻ ተርጓሚዎች ናቸው። የመመርመሪያ መሳሪያ መደበኛ አገላለጾችን በመጠቀም የሎግ ግቤቶችን ወደ ተለያዩ መስኮች ለመለየት መደበኛውን አገላለጽ ከትክክለኛዎቹ ይልቅ የተወጉ መስኮችን እንዲመርጥ የሚያደርግ ሕብረቁምፊ መፍጠር እና ማስገባት ይቻላል ። ለምሳሌ፣ ይህ ግቤት በርካታ ችግሮችን ሊያስከትል ይችላል፡-


    $username = "iamnothacker! በሰኞ ጥር 01 00:00:00 +1000 2009"; sprintf("በ%s በ%s የመግባት ሙከራ አልተሳካም"$username፣)

    ይበልጥ የተራቀቁ የምዝግብ ማስታወሻዎች ጥቃቶች በአሳሹ ውስጥ ያለውን ምዝግብ ማስታወሻ ለማሳየት በማውጫ ማቋረጫ ጥቃቶች ላይ ይመረኮዛሉ። በትክክለኛው ሁኔታ ፒኤችፒ ኮድን ወደ ሎግ መልእክት ማስገባት እና የሎግ ፋይሉን በአሳሽ ውስጥ መክፈት በአጥቂው ጥያቄ መሰረት በጥሩ ሁኔታ የተቀረፀ እና የሚተገበር የተሳካ የኮድ መርፌን ያስከትላል። እና ተንኮል አዘል ፒኤችፒን በአገልጋዩ ላይ ለማስፈፀም ከመጣ ፣ እኛ የምንጠብቀው የመከላከያ ንብርብር ውጤታማነት ብቻ ነው ፣ ይህም ጉዳቱን ሊቀንስ ይችላል።

    የምዝግብ ማስታወሻ መከላከያ

    ሁሉንም የውጭ የምዝግብ ማስታወሻ መልእክቶችን ለማጣራት ቀላሉ መንገድ የተፈቀደላቸው ዝርዝር መጠቀም ነው። የቁምፊውን ስብስብ በቁጥር፣ በፊደሎች እና በቦታዎች ብቻ እንገድባለን እንበል። ያልተፈቀዱ ቁምፊዎችን የያዙ መልዕክቶች እንደተበላሹ ይቆጠራሉ። ከዚያ የምዝግብ ማስታወሻ ፋይልን ለማስገባት ስለሚሞከርበት ሙከራ በምዝግብ ማስታወሻው ውስጥ ይታያል። ይህ ቀላል የጽሑፍ ምዝግብ ማስታወሻዎች መልእክቶች የማይታመን የግቤት ውሂብ ከማካተት ማስቀረት የማይችሉበት ቀላል የደህንነት ዘዴ ነው።


    ሁለተኛው የጥበቃ ዘዴ የተለያዩ መረጃዎችን በፅሁፍ መልክ እንዲቀመጡ በማድረግ የተወሰነ የቁምፊዎች ስብስብን የሚደግፍ እንደ base64 ያለ ስርዓት በመጠቀም የማይታመኑ የግብዓት መረጃዎችን ቁርጥራጮች መለወጥ ነው።

    ዱካ ትራቨርሳል (Directory Traversal በመባል ይታወቃል)

    የመንገድ ማቋረጫ ጥቃቶች በድር መተግበሪያ ጀርባ ላይ የፋይል ንባብ ወይም የመፃፍ ስራዎች ላይ ተጽዕኖ ለማሳደር ሙከራዎች ናቸው። ይህ የሚደረገው በጀርባ ኦፕሬሽኖች ውስጥ የተካተቱትን የፋይሎች ዱካዎች እንዲቆጣጠሩ የሚያስችልዎትን መለኪያዎች በማስተዋወቅ ነው. ስለዚህ ይህ ዓይነቱ ጥቃት የመረጃን ይፋ ማድረግ እና የአካባቢ / የርቀት ፋይል መርፌን ያመቻቻል።


    እንደነዚህ ያሉትን ጥቃቶች ለየብቻ እንመለከታቸዋለን, ነገር ግን የስኬታቸው መሠረት በትክክል መንገድን ማለፍ ነው. ከዚህ በታች የተገለጹት ተግባራት የፋይል ዱካዎችን ለመቆጣጠር ልዩ ስለሆኑ ብዙ የPHP ተግባራት የፋይል መንገዶችን በተለመደው የቃሉ ትርጉም እንደማይቀበሉ መጥቀስ ተገቢ ነው። በምትኩ፣ እንደ ማካተት() ወይም ፋይል() ያሉ ተግባራት URI መቀበል።


    ሙሉ በሙሉ ከተፈጥሮ ውጭ ይመስላል. ነገር ግን ይህ ማለት የሚከተሉት ሁለት የተግባር ጥሪዎች አቻ ናቸው፣ ፍፁም ዱካዎችን ይጠቀማሉ (ለምሳሌ ፣ አንጻራዊ መንገዶችን በራስ-መጫን ላይ ሳይመሰረቱ)።


    ያካትቱ ('/var/www/vendor/library/Class.php'); ያካትቱ ('ፋይል:///var/www/vendor/library/Class.php');

    ነገሩ አንጻራዊው መንገድ በጎን በኩል ነው የሚሰራው (የማካተት_ዱካ መቼት በ php.ini እና የሚገኙ አውቶሞተሮች)። እንደዚህ ባሉ አጋጣሚዎች፣ የPHP ተግባራት በተለይ በፋይል ዩአርአይ እቅድ መተኪያን ጨምሮ ለብዙ የመለኪያ ማጭበርበሮች ተጋላጭ ናቸው፣ ይህ አጥቂ በፋይሉ ዱካ መጀመሪያ ላይ ታማኝ ያልሆነ መረጃ ከተካተተ HTTP ወይም FTP URI ን ማስገባት ይችላል። በርቀት ፋይል ማካተት ጥቃቶች ክፍል ውስጥ ስለዚህ ጉዳይ በበለጠ ዝርዝር እንነጋገራለን, አሁን ግን የፋይል ስርዓት ዱካዎችን በማለፍ ላይ እናተኩራለን.


    ይህ ተጋላጭነት ሌላ ፋይል ለመድረስ መንገዱን መቀየርን ያካትታል። ይህ በተለምዶ ተከታታይ ../ ተከታታዮችን ወደ ሙግት ውስጥ በማስገባት የተገኘ ሲሆን ይህም ከተግባሮች ጋር ተያይዟል ወይም ሙሉ በሙሉ ወደ ተግባራት እንደ ማካተት () ፣ ፍላጎት () ፣ ፋይል_ገት_ይዘት () እና አልፎ ተርፎም አጠራጣሪ (ለአንዳንድ) ተግባራት ውስጥ ይገባል ። እንደ DOMDocument::load()።


    ../ ቅደም ተከተል በመጠቀም አጥቂው ስርዓቱ ወደ የወላጅ ማውጫ እንዲመለስ ያስገድደዋል። ስለዚህ መንገዱ /var/www/public/../vendor በትክክል ወደ /var/www/vendor ይሄዳል። ቅደም ተከተል ../ በኋላ / ይፋዊ ወደ ወላጅ ማውጫ ይመልሰናል ማለትም /var/www. ይህ አጥቂው ከድር አገልጋይ ሊደረስባቸው ከሚችሉት/ህዝባዊ ማውጫ ውጭ የሚገኙ ፋይሎችን እንዲያገኝ ያስችለዋል።


    እርግጥ ነው፣ መንገድን መሻገር በመመለስ ላይ ብቻ የተወሰነ አይደለም። በ .htaccess ገደቦች ቅንጅቶች ምክንያት ከአሳሹ የማይደረስ የሕፃን ማውጫዎችን ለመድረስ አዲስ የመንገድ ክፍሎችን መተግበር ይችላሉ። ፒኤችፒ ፋይል ስርዓት ኦፕሬሽኖች በድር አገልጋይ ላይ ያሉ ይፋዊ ያልሆኑ ፋይሎች እና ማውጫዎች የመዳረሻ መቆጣጠሪያ ውቅር ግድ የላቸውም።

    የPath TraversalDefenses ከPath TraversalXML መርፌ ጋር የሚጋጩ ምሳሌዎች

    ምንም እንኳን JSON በአገልጋይ እና በደንበኛ መካከል መረጃን ለማስተላለፍ ቀላል ክብደት ያለው ዘዴ ሆኖ ቢተዋወቅም፣ XML አሁንም ተወዳጅ አማራጭ ነው፣ እና የድር አገልግሎት ኤፒአይዎች ከJSON ጋር በትይዩ ይደግፋሉ። ኤክስኤምኤል እንዲሁ የኤክስኤምኤል ንድፎችን በመጠቀም መረጃ ለመለዋወጥ ይጠቅማል፡ RSS፣ Atom፣ SOAP እና RDF፣ ወዘተ።


    ኤክስኤምኤል በሁሉም ቦታ የሚገኝ ነው፡ በድር መተግበሪያ አገልጋዮች፣ አሳሾች (እንደ ተመራጭ ቅርጸት ለXMLHttpጥያቄ ጥያቄዎች እና ምላሾች) እና በአሳሽ ቅጥያዎች ውስጥ ይገኛል። በፒኤችፒ በDOM እና በSimpleXML እና XMLReader ቅጥያዎች ውስጥ ጥቅም ላይ በሚውለው እንደ libxml2 ባሉ ታዋቂ ተንታኞች ያለውን ስርጭት እና ነባሪ ሂደት ከግምት በማስገባት ኤክስኤምኤል የመርፌ ጥቃቶች ኢላማ ሆኗል። አሳሹ በኤክስኤምኤል ልውውጥ ላይ በንቃት ሲሳተፍ በ XSS በኩል ስልጣን ያላቸው ተጠቃሚዎች በአጥቂዎች የተፈጠሩ የኤክስኤምኤል ጥያቄዎችን ማስተላለፍ እንደሚችሉ ግምት ውስጥ ማስገባት ያስፈልጋል።

    ኤክስኤምኤል የውጭ አካል መክተት (XXE)

    እነዚህ ጥቃቶች የሚከሰቱት የኤክስኤምኤል መተንተን ቤተ-መጻሕፍት ብዙውን ጊዜ ብጁ አካል ማጣቀሻዎችን ስለሚደግፉ ነው። እንደ > , < ልዩ ምልክት ማድረጊያ ቁምፊዎችን ለመወከል ጥቅም ላይ ስለሚውል መደበኛ የኤክስኤምኤል ህጋዊ አካል ማጠናቀቅን ይማራሉ ። እና & apos;. ኤክስኤምኤል ብጁ አካላትን በራሱ በኤክስኤምኤል ሰነድ በኩል በመግለጽ የመደበኛ አካላትን ስብስብ ለማስፋት ይፈቅድልዎታል። እነሱ በቀጥታ በአማራጭ DOCTYPE ውስጥ በማካተት ሊገለጹ ይችላሉ። የሚወክሉት የተራዘመ እሴት ማካተት ያለበትን የውጭ ምንጭን ሊያመለክት ይችላል። በውጫዊ ሀብቶች ይዘት ምክንያት ሊሰፋ የሚችል ተራ ኤክስኤምኤል ብጁ አገናኞችን ለማከማቸት በመቻሉ የXXE ጥቃቶች በትክክል ታዋቂ ሆነዋል። በተለመዱ ሁኔታዎች ውስጥ፣ የማይታመኑ ግብአቶች ከስርዓታችን ጋር ባልተጠበቀ መንገድ መገናኘት የለባቸውም። እና አብዛኛዎቹ የXXE ፕሮግራም አድራጊዎች የXXE ጥቃቶችን በእርግጠኝነት አይመለከቱም ፣ ይህም በተለይ አሳሳቢ ነው።


    ለምሳሌ አዲስ ብጁ ህጋዊ ምንም ጉዳት የሌለውን እንግለጽ፡



    ይህ ፍቺ ያለው የኤክስኤምኤል ሰነድ አሁን በአጠቃላይ ህጋዊ አካላት በሚፈቀዱበት ቦታ ሁሉ አካልን ሊያመለክት ይችላል፡


    ይህ ውጤት ነው

    እንደ ፒኤችፒ DOM ያለ የኤክስኤምኤል ተንታኝ ይህንን ኤክስኤምኤል ሲተረጉም ሰነዱ እንደተጫነ ይህን ብጁ አካል ያስተናግዳል። ስለዚህ፣ ተጓዳኙን ጽሑፍ ሲጠይቅ የሚከተለውን ይመልሳል፡-


    ይህ ውጤት ሙሉ በሙሉ ጉዳት የለውም


    በግልጽ ለማየት እንደሚቻለው፣ ብጁ አካላት የሚደጋገሙ ጽሑፎችን እና ኤክስኤምኤልን በአጭር የህጋዊ አካላት ስም የመወከል ጥቅም አላቸው። ብዙውን ጊዜ ኤክስኤምኤል የተወሰነ ሰዋሰው መከተል ያለበት ጉዳይ ነው፣ እና ብጁ አካላት አርትዖትን ቀላል ያደርጉታል። ነገር ግን፣ በውጫዊ ግብአት ላይ እምነት ስለሌለን፣ መተግበሪያችን ከሚጠቀምበት ኤክስኤምኤል ጋር በጣም መጠንቀቅ አለብን። ለምሳሌ፣ ይህ በፍፁም ደህንነቱ የተጠበቀ አይደለም፡


    &harmless;

    በተጠየቀው የአካባቢ ፋይል ይዘት ላይ በመመስረት ውሂቡ ህጋዊውን ሲሰፋ ጥቅም ላይ ሊውል ይችላል። እና ከዚያ የተስፋፋው ይዘት ከአጥቂው ለመተንተን ከኤክስኤምኤል ተንታኝ እና የወጪ ውሂብ ውስጥ ሊካተት ይችላል። ለምሳሌ መረጃን ለመግለፅ። የወጣው ፋይል እንደ ኤክስኤምኤል ይተረጎማል፣ ምንም እንኳን ይህንን ትርጉም ለመቀስቀስ ምንም ልዩ ቁምፊዎች የሉም። ይህ የአካባቢያዊ ፋይል ይዘቶች ምን ያህል ሊጋለጡ እንደሚችሉ ይገድባል. ፋይሉ እንደ ኤክስኤምኤል ከተተረጎመ ነገር ግን የሚሰራ ኤክስኤምኤል ከሌለው ምናልባት ስህተት ይደርስብናል ይህም ይዘቱ እንዳይገለጥ ይከላከላል። ሆኖም የተመለሰው ምላሽ ለአጥቂው መመለስ ባይቻልም የርቀት የኤችቲቲፒ ጥያቄዎች በድር አፕሊኬሽኑ ላይ ተጽዕኖ እንዲያሳድሩ ፒኤችፒ የወሰን ገደቡን ለማለፍ የሚያስችል ትክክለኛ ዘዴ አለው።


    በ PHP ውስጥ ኤክስኤምኤልን ለመተንተን እና ለመጠቀም ሶስት የተለመዱ ዘዴዎች አሉ፡ PHP DOM፣ SimpleXML እና XMLReader። ሁሉም የlibxml2 ቅጥያ ይጠቀማሉ እና የውጭ አካላት ድጋፍ በነባሪነት ነቅቷል። በውጤቱም፣ ፒኤችፒ በነባሪነት ለXXE ጥቃቶች የተጋለጠ ነው፣ ይህም የኤክስኤምኤልን የሚጠቀም የድር መተግበሪያ ወይም ቤተ-መጽሐፍት ደህንነትን ከግምት ውስጥ ሲያስገባ ለማጣት በጣም ቀላል ነው።


    እንዲሁም XHTML እና HTML 5 እንደ ትክክለኛ ኤክስኤምኤል ሊደረደሩ እንደሚችሉ አይርሱ። ይህ ማለት አንዳንድ የ XHTML ገጾች ወይም የኤክስኤምኤል ተከታታይ HTML 5 በ DOMDocument ::loadXML() ከDOMDocument ::loadHTML() ን በመጠቀም እንደ XML ሊተነተን ይችላል። ይህ የኤክስኤምኤል ተንታኝ አጠቃቀም ለውጫዊ ኤክስኤምኤል አካላት መርፌ የተጋለጠ ነው። ያስታውሱ libxml2 HTML 5 DOCTYPEን እንኳን አያውቅም፣ ስለዚህ እንደ XHTML DOCTYPES ሊያረጋግጠው አይችልም።

    የውጭ ኤክስኤምኤል አካላትን የመተግበር ምሳሌዎችየፋይል ይዘቶች እና ይፋ ማድረግ

    አንድ ብጁ የኤክስኤምኤል ህጋዊ አካል የውጭ ፋይልን ሊያመለክት እንደሚችል በመገንዘብ ከላይ ያለውን መረጃ ይፋ የማድረግ ምሳሌን ተመልክተናል።


    &harmless;

    በዚህ አጋጣሚ ብጁ አካል ከፋይሎቹ ይዘቶች ጋር ይሰፋል። ሁሉም እንደዚህ ያሉ ጥያቄዎች የሚከናወኑት በአገር ውስጥ በመሆኑ፣ ይህ አፕሊኬሽኑ ሊያነባቸው የሚችላቸው የሁሉም ፋይሎች ይዘት እንዲጋለጥ ያስችላል። ማለትም የተራዘመው አካል በመተግበሪያው ወጪ ውሂብ ውስጥ ሲካተት አጥቂው ተደራሽ ያልሆኑ ፋይሎችን መመርመር ይችላል። ነገር ግን፣ በዚህ አጋጣሚ ከባድ ገደብ አለ፡ ፋይሎቹ በኤክስኤምኤል ቅርጸት ወይም ወደ ኤክስኤምኤል ተንታኝ ስህተት በማይመራ ቅርጸት መሆን አለባቸው። ነገር ግን ነጥቡ ይህ ገደብ በ PHP ውስጥ ሙሉ በሙሉ ችላ ሊባል የሚችል መሆኑ ነው፡-


    &harmless;

    PHP በመደበኛ የፋይል ስርዓት ተግባራት ተቀባይነት ካላቸው ፕሮቶኮሎች ውስጥ አንዱ እንደ ዩአርአይ መጠቅለያውን ያቀርባል፡ file_get_contents () need() demand_once() ፋይል() ቅጂ() እና ሌሎች ብዙ። የPHP መጠቅለያው ለአንድ ተግባር በመደወል ውጤቶቹ እንዲመለሱ በአንድ የተወሰነ ምንጭ ላይ ሊተገበሩ የሚችሉ በርካታ ማጣሪያዎችን ይደግፋል። ከላይ ባለው ምሳሌ ላይ የ convert.base-64-encode ማጣሪያ ልናነበው ወደምንፈልገው ኢላማ ፋይል እንተገብራለን።


    ይህ ማለት አንድ አጥቂ የጽሑፍ ቅርጸት ምንም ይሁን ምን ማንኛውንም ፋይል በ PHP ላይ ማንበብ ይችላል ማለት ነው። ከመተግበሪያው የሚመጣውን ውሂብ በቀላሉ መፍታት በቂ ነው, እና ከዚያ ያለምንም ቅጣት መፍታት. ምንም እንኳን ይህ በቀጥታ ተጠቃሚዎችን ወይም የመተግበሪያውን ጀርባ ባይጎዳም ሌሎች ተጋላጭነቶችን ለማግኘት አጥቂዎች የመተግበሪያውን መዋቅር በደንብ እንዲያጠኑ ያስችላቸዋል። ከዚህም በላይ አጥቂዎቹ ሊታወቁ የሚችሉት አደጋ አነስተኛ ነው.

    የመዳረሻ መቆጣጠሪያ ማለፊያ

    መዳረሻ በተለያዩ መንገዶች ቁጥጥር ይደረግበታል። የXXE ጥቃቶች የሚፈጸሙት በድር መተግበሪያ ጀርባ ላይ ስለሆነ፣ የአሁኑን ተጠቃሚ ክፍለ ጊዜ መጠቀም አይቻልም። ነገር ግን አጥቂ አሁንም ከአካባቢው አገልጋይ የሚቀርቡ ጥያቄዎችን በመጠቀም የጀርባውን የመዳረሻ መቆጣጠሪያ ማለፍ ይችላል። ይህን ጥንታዊ የመዳረሻ መቆጣጠሪያ አስቡበት፡-


    ከሆነ (isset($_SERVER["HTTP_CLIENT_IP")]) || isset($_SERVER["HTTP_X_FORWARDED_FOR"]) || ",))) (ራስጌ ("ኤችቲቲፒ/1.0 403 የተከለከለ")፤ ውጣ("ይህን ፋይል እንድትደርስ አልተፈቀደልህም።"))

    ይህ የPHP ቁራጭ፣ ልክ እንደ እሱ ስፍር ቁጥር የሌላቸው፣ የተወሰኑ የPHP ፋይሎችን በአካባቢያዊ አገልጋይ ላይ ያለውን መዳረሻ ይገድባል፣ ማለትም localhost። ነገር ግን፣ በመተግበሪያው የፊት ጫፍ ላይ ያለው የXXE ጥቃት አጥቂው ይህንን የመዳረሻ መቆጣጠሪያ ለማለፍ የሚያስፈልጉትን ትክክለኛ ምስክርነቶች ይሰጠዋል፣ ምክንያቱም ሁሉም የኤችቲቲፒ ጥያቄዎች ለኤክስኤምኤል ተንታኝ የሚደረጉት ከ localhost ነው።


    &harmless;

    የምዝግብ ማስታወሻ እይታ በአካባቢያዊ ጥያቄዎች ብቻ የተገደበ ቢሆንም አጥቂ አሁንም መዝገቦቹን ማግኘት ይችላል። በተመሳሳይ የጥገና ወይም የአስተዳደር መገናኛዎች ላይም ይሠራል, መዳረሻ በዚህ መንገድ የተገደበ ነው.

    DOS ጥቃቶች

    የአገልጋይ ሀብቶችን ፍጆታ የሚገልጽ ማንኛውም ነገር ማለት ይቻላል ለDOS ጥቃቶች ጥቅም ላይ ሊውል ይችላል። የውጭ ኤክስኤምኤል ህጋዊ አካልን ወደ ውስጥ በማስገባት አጥቂው በዘፈቀደ የኤችቲቲፒ ጥያቄዎችን ማቅረብ ይችላል ይህም በተገቢው ሁኔታ የአገልጋይ ሃብቶችን ያጠፋል።


    ከኤክስኤምኤል ህጋዊ አካል መስፋፋት አንጻር ስለ XXE ጥቃቶች ስለሌሎች የ DOS አጠቃቀሞች እናወራለን።

    የውጭ ኤክስኤምኤል አካላትን በመርፌ መከላከል

    እነዚህ ጥቃቶች በጣም ተወዳጅ ናቸው, ስለዚህ እነሱን ለመከላከል ምን ያህል ቀላል እንደሆነ ትገረማለህ. DOM፣ SimpleXML እና XMLReader በlibxml2 ላይ ስለሚመሰረቱ፣ የውጭ አካላትን አጠቃቀም ለማሰናከል በቀላሉ የlibxml_disable_entity_loader() ተግባርን መጠቀም ትችላለህ። ነገር ግን፣ ይህ በDOCTTYPE ውስጥ አስቀድሞ የተገለጹ ብጁ አካላትን አያሰናክልም ፣ ምክንያቱም የኤችቲቲፒ ጥያቄ ወይም የፋይል ስርዓት ኦፕሬሽን የሚያስፈልጋቸው ውጫዊ ሀብቶችን አይጠቀሙም።


    $oldValue = libxml_disable_entity_loader (እውነት); $dom = አዲስ DOMDocument (); $dom->loadXML($xml); libxml_disable_entity_loader($oldValue);

    ይህ ኤክስኤምኤልን ከሕብረቁምፊዎች፣ ፋይሎች ወይም ከርቀት ዩአርአይዎች መጫንን ለሚያካትቱ ሁሉም ስራዎች መደረግ አለበት።


    አፕሊኬሽኑ መቼም የውጭ አካላትን የማይፈልግ ከሆነ እና ለአብዛኛዎቹ ጥያቄዎቹ የውጪ ሀብቶችን መጫን በአጠቃላይ በአለምአቀፍ ደረጃ ሊሰናከል ይችላል። በአብዛኛዎቹ ሁኔታዎች፣ ብዙ ቤተ-መጻሕፍት ለXXE ጥቃቶች ተፈጥሯዊ ተጋላጭነት ስላላቸው ሁሉንም የኤክስኤምኤል መጫኛ ነጥቦችን ለመግለጽ ይህ በጣም ተመራጭ ነው።


    libxml_disable_entity_loader (እውነት);

    ከእያንዳንዱ ጊዜያዊ የውጪ ሀብቶች ጭነት በኋላ TRUE መመለስን ያስታውሱ። የXSL ቅጦች አተገባበር በውጫዊ አካላት ላይ የሚመረኮዝ እንደ ዶክቡክ ኤክስኤምኤልን ወደ ኤችቲኤምኤል እንደመቀየር የማይጎዳ ነገር ሊፈልጉት ይችላሉ።


    ሆኖም፣ የlibxml2 ማሰናከል ተግባር ፓናሲያ አይደለም። ኤክስኤምኤልን የሚተነተኑ ወይም በሌላ መንገድ የሚያስኬዱ ሌሎች ቅጥያዎችን እና ፒኤችፒ ቤተ-መጻሕፍትን ይተንትኑ ውጫዊ አካላትን ለመጠቀም “መቀየሪያዎቻቸውን” ለማግኘት።


    ይህ የማይቻል ከሆነ፣ ከዚያ በተጨማሪ የኤክስኤምኤል ሰነዱ DOCTYPEን ማወጁን ያረጋግጡ። እንደዚያ ከሆነ እና የውጭ አካላት ከተሰናከሉ፣ በቀላሉ የኤክስኤምኤል ሰነዱን ይጣሉት፣ ያልታመነ የኤክስኤምኤል ተደራሽነት ተጋላጭ ሊሆን የሚችለውን ተንታኝ በመከልከል እና እንደ ጥቃት ሊደርስበት ይችላል። ይህ አስፈላጊ እርምጃ ነው, ምክንያቱም ሌሎች ምልክቶች አይኖሩም - ምንም ስህተቶች, ልዩ ሁኔታዎች የሉም. ይህንን ቼክ በመደበኛ የግቤት ማረጋገጫዎ ውስጥ ይገንቡ። ነገር ግን ይህ ዘዴ ከተገቢው የራቀ ነው, ስለዚህ የውጭ አካላትን ችግር በመሠረቱ ለመፍታት በጣም ይመከራል.


    /** * ፈጣን ለማወቅ ሞክር */ $collapsedXML = preg_replace("/[:space:]/", "", $xml); ከሆነ(preg_match("/)