ይህ wikiHow በ PHP ውስጥ የተዘጋጁ መግለጫዎችን በመጠቀም የ SQL መርፌን እንዴት መከላከል እንደሚችሉ ያስተምርዎታል። የ SQL መርፌ ዛሬ በድር መተግበሪያዎች ውስጥ በጣም የተለመዱ ተጋላጭነቶች አንዱ ነው። የተዘጋጁ መግለጫዎች የታሰሩ ግቤቶችን ይጠቀማሉ እና ተለዋዋጮችን ከ SQL ሕብረቁምፊዎች ጋር አያዋህዱም ፣ ይህም አጥቂ የ SQL መግለጫውን መለወጥ አይችልም።
የተዘጋጁ መግለጫዎች ተለዋዋጭውን ከተሰበሰበው የ SQL መግለጫ ጋር ያዋህዳል ፣ ስለሆነም SQL እና ተለዋዋጮች ለየብቻ ይላካሉ። ተለዋዋጮቹ እንደ ተራ ሕብረቁምፊዎች ይተረጎማሉ እና የ SQL መግለጫ አካል አይደሉም። ከዚህ በታች ባሉት ደረጃዎች ውስጥ ያሉትን ዘዴዎች በመጠቀም እንደ mysql_real_escape_string () ያሉ ማንኛውንም ሌላ የ SQL መርፌ ማጣሪያ ዘዴዎችን መጠቀም አያስፈልግዎትም።
ደረጃዎች
የ 2 ክፍል 1 የ SQL መርፌን መረዳት
ደረጃ 1. የ SQL መርፌ በ SQL የመረጃ ቋት በሚጠቀሙ መተግበሪያዎች ውስጥ የተጋላጭነት አይነት ነው።
በ SQL መግለጫ ውስጥ የተጠቃሚ ግብዓት ጥቅም ላይ ሲውል ተጋላጭነቱ ይከሰታል።
$ name = $ _GET ['የተጠቃሚ ስም']; $ መጠይቅ = "ከ tbl_user WHERE ስም = '$ name'" የይለፍ ቃል ይምረጡ ፤
ደረጃ 2. አንድ ተጠቃሚ ወደ ዩአርኤል ተለዋዋጭ የተጠቃሚ ስም የገባው እሴት ለተለዋዋጭ $ ስም ይመደባል።
ከዚያ በቀጥታ ወደ SQL መግለጫ ውስጥ እንዲገባ ይደረጋል ፣ ይህም ተጠቃሚው የ SQL መግለጫውን እንዲያስተካክል ያስችለዋል።
$ name = "አስተዳዳሪ" ወይም 1 = 1 - "; $ መጠይቅ = "ከ tbl_user WHERE ስም = '$ name'" የይለፍ ቃል ይምረጡ ፤
ደረጃ 3. የ SQL የመረጃ ቋቱ የ SQL መግለጫውን እንደሚከተለው ይቀበላል።
ከ tbl_users WHERE ስም = 'አስተዳዳሪ' ወይም 1 = 1 - 'የይለፍ ቃል ይምረጡ
-
ይህ የሚሰራ SQL ነው ፣ ግን ለተጠቃሚው አንድ የይለፍ ቃል ከመመለስ ይልቅ ፣ መግለጫው በ tbl_user ሰንጠረዥ ውስጥ ያሉትን ሁሉንም የይለፍ ቃሎች ይመልሳል። ይህ በድር መተግበሪያዎችዎ ውስጥ የሚፈልጉት ነገር አይደለም።
የ 2 ክፍል 2 - የተዘጋጁ መግለጫዎችን ለመፍጠር mySQLi ን መጠቀም
ደረጃ 1. የ MySQLi SELECT ጥያቄን ይፍጠሩ።
MySQLi የተዘጋጁ መግለጫዎችን በመጠቀም ከሠንጠረዥ ውሂብን ለመምረጥ ከዚህ በታች ያለውን ኮድ ይጠቀሙ።
$ name = $ _GET ['የተጠቃሚ ስም']; ($ stmt = $ mysqli-> ካዘጋጁ ("የይለፍ ቃል ከ tbl_users WHERE ስም =?")) {// ተለዋጩን እንደ ልኬት እንደ ገመድ ያያይዙ። $ stmt-> bind_param ("s" ፣ $ name); // መግለጫውን ያስፈጽሙ። $ stmt-> ማስፈጸም (); // ተለዋዋጮችን ከጥያቄው ያግኙ። $ stmt-> bind_result ($ ማለፊያ); // ውሂቡን ያምጡ። $ stmt-> አምጣ (); // ውሂቡን ያሳዩ። printf ("የይለፍ ቃል ለተጠቃሚ %s %s / n" ፣ $ name ፣ $ pass) ፤ // የተዘጋጀውን መግለጫ ይዝጉ። $ stmt-> መዝጋት (); }
ማስታወሻ: ተለዋዋጭ $ mysqli የ mySQLi የግንኙነት ነገር ነው።
ደረጃ 2. የ MySQLi INSERT ጥያቄን ይፍጠሩ።
MySQLi የተዘጋጁ መግለጫዎችን በመጠቀም መረጃን ወደ ሰንጠረዥ ለማስገባት ከዚህ በታች ያለውን ኮድ ይጠቀሙ።
$ name = $ _GET ['የተጠቃሚ ስም']; $ ይለፍ ቃል = $ _GET ['ይለፍ ቃል']; ($ stmt = $ mysqli-> ካዘጋጁ ("አስገባ tbl_users (ስም ፣ የይለፍ ቃል) እሴቶች (?,?)")) {// ተለዋዋጮችን ወደ ልኬቱ እንደ ሕብረቁምፊ ያያይዙ። $ stmt-> bind_param ("ss" ፣ $ name ፣ $ password) ፤ // መግለጫውን ያስፈጽሙ። $ stmt-> ማስፈጸም (); // የተዘጋጀውን መግለጫ ይዝጉ። $ stmt-> መዝጋት (); }
ማሳሰቢያ: ተለዋዋጭ $ mysqli የ mySQLi የግንኙነት ነገር ነው።
ደረጃ 3. የ MySQLi UPDATE ጥያቄን ይፍጠሩ።
MySQLi የተዘጋጁ መግለጫዎችን በመጠቀም በሰንጠረዥ ውስጥ መረጃን ለማዘመን ከዚህ በታች ያለውን ኮድ ይጠቀሙ።
$ name = $ _GET ['የተጠቃሚ ስም']; $ ይለፍ ቃል = $ _GET ['ይለፍ ቃል']; ከሆነ ($ stmt = $ mysqli-> አዘጋጅ ("tPD-tbl_users SET password =? የት ስም =?")) {// ተለዋዋጮችን ወደ ልኬቱ እንደ ሕብረቁምፊ ያያይዙ። $ stmt-> bind_param ("ss" ፣ $ password ፣ $ name) ፤ // መግለጫውን ያስፈጽሙ። $ stmt-> ማስፈጸም (); // የተዘጋጀውን መግለጫ ይዝጉ። $ stmt-> መዝጋት (); }
ማስታወሻ: ተለዋዋጭ $ mysqli የ mySQLi የግንኙነት ነገር ነው።
ደረጃ 4. የ MySQLi DELETE ጥያቄን ይፍጠሩ።
ከዚህ በታች ያለው ስክሪፕት የ MySQLi የተዘጋጁ መግለጫዎችን በመጠቀም መረጃን ከጠረጴዛ እንዴት መሰረዝ እንደሚቻል ነው።
$ name = $ _GET ['የተጠቃሚ ስም']; $ ይለፍ ቃል = $ _GET ['ይለፍ ቃል']; ከሆነ ($ stmt = $ mysqli-> አዘጋጅ ("ከ tbl_users WHERE ስም =?")) {// ተለዋጩን እንደ ልኬት እንደ ገመድ ያያይዙት። $ stmt-> bind_param ("s" ፣ $ name); // መግለጫውን ያስፈጽሙ። $ stmt-> ማስፈጸም (); // የተዘጋጀውን መግለጫ ይዝጉ። $ stmt-> መዝጋት (); }