እርስዎ የሚጠቀሙ ከሆነ ስትሪፕቻር የተጠቃሚ ግብዓትን ለማጽዳት፣ እርስዎ ብቻዎን አይደሉም። ብዙ ገንቢዎች በዚህ አይነት ላይ ይተማመናሉ የግብዓት ማጽጃ የመርፌ ሙከራዎችን ለማገድ። በመጀመሪያ ሲታይ ምክንያታዊ ይመስላል፣ አደገኛ ገጸ-ባህሪያትን ያስወግዳል፣ እና የክፍያ ጭነቱ ይጠፋል። ሆኖም፣ ይህ አካሄድ የተሳሳተ የደህንነት ስሜት ይሰጣል። እንደ እውነቱ ከሆነ፣ አጥቂዎች እንደ ቀላል ማጣሪያዎች ሊያልፉ ይችላሉ ስትሪፕቻር በመጠቀም የተደበቁ የክፍያ ጭነቶች, ኮዶች ወይም ብልህ የአውድ መቀያየር። ለዚህም ነው ስማርት ገንቢዎች እዚያ የማያቆሙት። በምትኩ፣ ይጠቀማሉ የተመጣጠነ መጠይቆች, ይህም በመርፌ ስር የሚሰነዘሩ ጥቃቶችን ይከላከላል።
በዚህ ጽሑፍ ውስጥ ለምን እንደሆነ ይማራሉ ስትሪፕቻር በእውነተኛ ዓለም ሁኔታዎች ውስጥ አይሳካም፣ አጥቂዎች እነዚህን ማጣሪያዎች እንዴት አላግባብ እንደሚጠቀሙ እና ምን አይነት አስተማማኝ አማራጮች በትክክል እንደሚሰሩ። የኮድ ምሳሌዎችን እንመለከታለን፣ የተለመዱ የማለፊያ ቴክኒኮችን እናሳያለን እና እንዴት እንደሆነ እናብራራለን። የግብዓት ማጽጃ ሁልጊዜም ከእንደዚህ አይነት መዋቅራዊ ጥበቃዎች ጋር መጣጣም አለበት የተመጣጠነ መጠይቆችወይም ተጋላጭ ትሆናለህ።
ምንድን ስትሪፕቻር በእውነቱ ያደርጋል (እና አያደርግም)
ብዙ ገንቢዎች ይጠቀማሉ stripchar ወይም ከተጠቃሚ ግብዓት ላይ ደህንነታቸው ያልተጠበቁ ቁምፊዎችን ለማስወገድ ተመሳሳይ ተግባራት። በተለምዶ፣ ስርዓተ ነጥቦችን፣ ልዩ ምልክቶችን ወይም ፊደል ቁጥራዊ ያልሆነ ማንኛውንም ነገር ያስወግዳል። መጀመሪያ ላይ፣ ያ ይመስላል የግብዓት ማጽጃግን እውነተኛ ጥበቃ አይደለም።
እስቲ እንዘርዝረው። እንደዚህ አይነት ተግባር፡
function stripchar(input) {
return input.replace(/[^\w\s]/gi, '');
}
እንደዚህ ያሉ ገጸ-ባህሪያትን ያስወግዳል ', ", ወይም ;ስለዚህ፣ ከገቡ፦
'; DROP TABLE users; --
ሆነ፥
DROP TABLE users
የተጠቃሚ ግብዓት ንጹህ ቢመስልም፣ አጥቂዎች አሁንም የSQL የክፍያ ጭነቶችን በሎጂክ ብቻ ማስገባት ይችላሉ፣ በተለይም አፕሊኬሽኑ ጥያቄዎችን በክር ማያያዣ በኩል ሲገነባ። የ SQL መርፌን በእውነት ለመከላከልፓራሜትሪ የተደረገባቸውን ጥያቄዎች እና አውድ-ተኮር የግቤት አያያዝን መጠቀም አለብዎት። የቁምፊ ማጣሪያዎች እንደ stripchar() በቀላሉ በቂ አይደሉም።
እርግጥ ነው፣ የተነጠቀ ግብዓት በጨረፍታ ደህንነቱ የተጠበቀ ሊመስል ይችላል። ሆኖም፣ ይህ አካሄድ ተንኮል አዘል አመክንዮዎችን አያጠፋም፣ የሚጻፍበትን መንገድ ብቻ ይለውጣል። እንደ እውነቱ ከሆነ፣ አጥቂዎች ብዙውን ጊዜ የክፍያ ጭነቶችን በመቀየስ፣ ነጭ ቦታ በማስገባት ወይም የተወገዱ ገጸ-ባህሪያትን በስትራቴጂካዊ መንገድ በመጠቀም ማጣሪያዎን ሙሉ በሙሉ በማለፍ ይጠቀማሉ።
ከዚህም ባሻገር, ስትሪፕቻር ወሳኝ አውድ የለውም። ግብዓቱ ወደ ዳታቤዝ፣ ሼል ወይም አሳሽ እየሄደ መሆኑን አያውቅም። ይህ ማለት ትክክለኛውን ማምለጫ ወይም ኢንኮዲንግ መተግበር አይችልም ማለት ነው። መድረሻውን ሳያውቅ ግብዓትን ማፅዳት እውነተኛው አደጋ እያለ ከኤችቲኤምኤል ማምለጥ ነው። SQLi.
በስተመጨረሻ, ስትሪፕቻር ምንም ነገር አይተረጉምም ወይም አያረጋግጥም፣ ሕብረቁምፊዎችን ብቻ ያስተካክላል። እና አርትዖት ደህንነት አይደለም። እውነተኛ ጥበቃ ከፈለጉ፣ የተዋቀሩ፣ የተረጋገጡ እና ፓራሜትሪ የተደረገባቸውን ጥያቄዎች ይጠቀሙ። ሙሉ ማቆሚያ።
ልዩነቱን የበለጠ ግልጽ ለማድረግ፣ ስትሪፕቻር ከፓራሜትሪካል መጠይቆች ጋር እንዴት ጎን ለጎን እንደሚያወዳድር እነሆ፡
ስትሪፕቻር ከፓራሜትሪዝድ ጥያቄዎች ጋር፡- ኮድዎን በትክክል የሚጠብቀው የትኛው ነው?
| የባህሪ | stripchar() | ፓራሜትራዊ መጠይቆች |
|---|---|---|
| የጥበቃ ደረጃ | መሰረታዊ የሕብረቁምፊ ጽዳት። በኮድ ወይም በሎጂክ ዘዴዎች በቀላሉ ሊታለፍ ይችላል። | ከሁሉም የ SQL መርፌ ዓይነቶች ጠንካራ ጥበቃ። |
| የአውድ ግንዛቤ | አውድ (SQL፣ HTML፣ shell፣ ወዘተ) ዓይነ ስውር ነው። ተመሳሳይ ህግ በሁሉም ቦታ ይተገበራል። | ሙሉ በሙሉ አውድ-አውቆ። ለእያንዳንዱ አካባቢ ተገቢውን ማምለጫ ይጠቀማል። |
| የገንቢ ጥረት | ለመተግበር ፈጣን ቢሆንም ለረጅም ጊዜ ጥቅም ላይ የማይውል ነው። | ትክክለኛ ውህደትን ይፈልጋል፣ ግን ጠንካራ እና ለወደፊቱ አስተማማኝ ነው። |
| የማለፊያ መቋቋም | ዝቅተኛ - አጥቂዎች በነጭ ቦታ፣ በኮድ ወይም በሎጂክ በቀላሉ ይላመዳሉ። | ከፍተኛ - ኮዱን ከውሂብ ይለያል እና መርፌን በአስተማማኝ ሁኔታ ያግዳል። |
| የደህንነት መተማመን | የተሳሳተ የደህንነት ስሜት - ችግሩን ሳያስተካክል ሊደብቀው ይችላል። | የታመነ ኢንዱስትሪ standard ደህንነቱ የተጠበቀ የጥያቄ አፈፃፀም። |
አጥቂዎች የግቤት ማጽጃን እንዴት እንደሚያልፉ
ገንቢዎች በሚተማመኑበት ጊዜ የተለመደው ተጋላጭ ፍሰት እንደዚህ ይመስላል ስትሪፕቻር ለግብዓት ማጽጃ፡
አጥቂዎች ማጣሪያዎችዎን መስበር አያስፈልጋቸውም፣ የሚያስፈልጋቸው በዙሪያቸው ሂድገንቢዎች በሚከተሉት ላይ ሲተማመኑ ስትሪፕቻር ለግብዓት ማጽጃ፣ ብዙውን ጊዜ እንደ ጥቅሶች ወይም ሴሚኮሎን ያሉ ገጸ-ባህሪያትን ማስወገድ የመርፌ ሙከራዎችን እንደሚያግድ ያስባሉ። ሆኖም ግን፣ አጥቂዎች በፍጥነት ይላመዳሉ። የተደበቁ የክፍያ ጭነቶች በተለይም እነዚያ ማጣሪያዎች አውድ በማይኖራቸው ጊዜ፣ በ regex ላይ በተመሰረቱ ማጣሪያዎች ውስጥ የሚንሸራተቱ።
ለምሳሌ፣ ግብዓቱን እንደሚከተለው ለማጽዳት እንደሞከሩ እናስብ፦
const input = stripchar(userInput);
// safe to use? maybe not.
db.query("SELECT * FROM users WHERE name = '" + input + "'");
ተጠቃሚው ክላሲክ ማስገባት ባይችልም እንኳ ' OR 1=1 --, የዩኒኮድ ዘዴዎችን፣ የክር ማያያዣ ወይም አሁንም የሚሰራ የተሰበረ አገባብ መጠቀም ይችላሉ። እንደዚህ ያሉ የክፍያ ጭነቶች ብዙውን ጊዜ ይሰራሉ፡
0x27206F7220313D31--
ወይም:
'+UNION+SELECT+null,null,null--
ተግባርዎ ቃል ያልሆኑ ቁምፊዎችን ከሰረዘ፣ የሚከተሉትን ማድረግ ይችላሉ ትክክለኛ የSQL ትዕዛዝን በድንገት እንደገና ገነባይባስ ብሎ ደግሞ፣ አጥቂዎች እሴቶችን በማጣሪያዎ በኩል በሚያልፉ መንገዶች ሊመሰርቱ ይችላሉ ነገር ግን በዒላማው ስርዓት ሊፈቱ ይችላሉ።
ከ SQL ኢንጀክሽን በተጨማሪ፣ ስትሪፕቻር እንደ የሼል ትዕዛዞች፣ የፋይል ዱካዎች ወይም የጃቫስክሪፕት አፈፃፀም ባሉ ሌሎች አውዶችም እንዲሁ አይሳካም። ግብዓቱ የት ጥቅም ላይ እንደሚውል ምንም አይነት ግንዛቤ ስለሌለው፣ ተገቢውን ማምለጫ ወይም ማረጋገጫ መተግበር አይችልም።
ከዚህ የተነሳ, የግብዓት ማጽጃ ጋር ስትሪፕቻር ለማለፍ ቀላል ነው። እውነተኛ ደህንነት የሚመጣው ከ አውድ-ተኮር መቆጣጠሪያዎች, በተለይ የተመጣጠነ መጠይቆች የሎጂክ መርፌን ሙሉ በሙሉ የሚከላከሉ።
በምትኩ ለምን ፓራሜተራይዝድ ጥያቄዎችን መጠቀም አለብዎት
የመርፌ ጥቃቶችን በእውነት ለማስቆም ከፈለጉ፣ ያስፈልግዎታል በሕብረቁምፊዎች ጥያቄዎችን መገንባት አቁም. ያ ነው የተመጣጠነ መጠይቆች ግባ። በተለየ መልኩ ስትሪፕቻር፣ አያጣሩም፣ እነሱ ኮድ ከውሂብ የተለየ በሞተር ደረጃ።
የተሰበረውን ጥያቄ እንደገና እንመልከተው፡
const input = stripchar(userInput);
const query = "SELECT * FROM users WHERE name = '" + input + "'";
ይህ አደገኛ ነው ምክንያቱም ግብዓቱ በቀጥታ ወደ SQL ስለሚገባ። የቁምፊዎች መቆራረጥ ቢኖርም እንኳ፣ አላግባብ ጥቅም ላይ ሊውል የሚችል ሕብረቁምፊ እየገነቡ ነው። በምትኩ፣ እንደዚህ አይነት ፓራሜትሪዝድ የሆነ መጠይቅ ይጠቀሙ፡
const query = "SELECT * FROM users WHERE name = ?";
db.execute(query, [userInput]);
እዚህ፣ የውሂብ ጎታ አሽከርካሪው ያንን ያውቃል userInput ውሂብ ነው፣ ተፈጻሚ ያልሆነ ኮድ. ግብዓቱ ጥቅሶችን፣ ሰሚ ኮሎን ወይም በሄክስ ኮድ የተጻፉ የክፍያ ጭነቶችን ቢይዝም እንኳ በራስ-ሰር ያመልጣል እና መርፌን ያግዳል።
በፓይቶን ውስጥ፦
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
በ PHP ከ PDO ጋር፦
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $input]);
በእነዚህ ሁሉ ምሳሌዎች፣ የተመጣጠነ መጠይቆች የትኞቹ ገጸ-ባህሪያት አደገኛ ሊሆኑ እንደሚችሉ መገመት ሳያስፈልግ መርፌን ይከላከሉ። አያስፈልግዎትም ስትሪፕቻር፣ የተዋቀረ፣ አውድ-ተኮር የጥያቄ ግንባታ ያስፈልግዎታል።
በተጨማሪም፣ ይህ ዘዴ የተደበቁ የክፍያ ጭነቶችን፣ የዩኒኮድ ዘዴዎችን እና የኮድ ማለፊያዎችን ያግዳል፣ እነዚህም ተመሳሳይ የማምለጫ ቅጦች ይገኛሉ። የXSS ተጋላጭነቶችእንደ Xygeni ያሉ መሳሪያዎች እነዚህን ስጋቶች ቀደም ብለው ይቋቋማሉ SAST ትንታኔ.
ባጭሩ፣ እውነተኛ መከላከያዎች በማጣሪያዎች ላይ አይመሰረቱም። በፕሮቶኮሎች፣ በታመኑ ኤፒአይዎች እና ሙሉ አውድ ላይ የተመሰረቱ ናቸው። ማዕቀፎችን ወይም ተለዋዋጭ የአገልግሎት መርፌን የሚጠቀሙ ከሆነ፣ ግብዓቶች በኮድ ቤዝዎ ውስጥ እንዴት እንደሚሰራጩ ይወቁ። ደህንነቱ የተጠበቀ የጥገኝነት መርፌ ውስብስብ ፍሰቶች እንኳን አዳዲስ የጥቃት ቦታዎችን እንደማይከፍቱ ያረጋግጣል።
አትተማመን ስትሪፕቻርእውነተኛ መከላከያዎችን ለማስፈጸም Xygeniን ይጠቀሙ
ብትጠቀሙም እንኳን የተመጣጠነ መጠይቆች፣ የእርስዎ አጠቃላይ የኮድቤዝ ተመሳሳይ ነገር እንደሚከተል ምንም ዋስትና የለም standard. የቆየ አመክንዮ፣ የሶስተኛ ወገን ስክሪፕቶች ወይም በህዝብ ግንኙነት ውስጥ ችላ የተባሉ መስመሮች አሁንም የመርፌ አደጋዎችን ሊያስከትሉ ይችላሉ። Xygeni በትክክል የሚረዳው እዚህ ላይ ነው።
Xygeni የምንጭ ኮድዎን ይቃኛል፣ pull requestsእና ሲአይ pipelineለመያዝ፦
- SQLን ከኮኔቴሽን ጋር የሚገነቡ የጥያቄ ሕብረቁምፊዎች
- ደካማ ወይም በቤት ውስጥ የሚበቅሉ ማጣሪያዎች እንደ ስትሪፕቻር
- ከሚታወቁ የተደበቁ የክፍያ ጭነቶች ጋር የሚዛመድ አጠራጣሪ አመክንዮ
እያንዳንዱን መስመር ማጣመር አያስፈልግዎትም። Xygeni ደህንነታቸው ያልተጠበቁ ቅጦችን ቀደም ብሎ ያመላክታል፣ ይተገበራል ራስ-ሰር ጥገና የሚቻል ከሆነ፣ እና አደገኛ ውህዶችን ሊበጁ ከሚችሉ ጋር ማገድ ይችላል Guardrails.
በአጭሩ, Xygeni ፓራሜትሪ የተደረገላቸው መጠይቆች ጥሩ ልምምድ ብቻ ሳይሆን በመጠኑም ቢሆን ተግባራዊ መሆናቸውን ያረጋግጣል። ከእንግዲህ ግምታዊ ስራ የለም። ምንም አይነት ማጣሪያዎች የሉም። እውነተኛ ጥበቃ ብቻ።
Xygeni በኮድዎ ውስጥ ደህንነታቸው ያልተጠበቁ ጥያቄዎችን እንዴት እንደሚያገኝ ማየት ይፈልጋሉ?
ቁልፍ ነጥቦች፡ ስለ ምን ማስታወስ እንዳለቦት ስትሪፕቻር እና የመርፌ አደጋዎች
- ስትሪፕቻር የደህንነት ተግባር አይደለም — አደጋን ሳይሆን ገጸ-ባህሪያትን ያስወግዳል።
- የግብዓት ማጽጃ በቂ አይደለም በክር ማያያዣ ጥያቄዎችን ሲገነቡ።
- ፓራሜትሪ የተደረገላቸው ጥያቄዎች ትክክለኛው መከላከያ ናቸውእና እያንዳንዱ ዘመናዊ ቋንቋ ወይም ማዕቀፍ ይደግፋቸዋል።
- የተደበቁ የክፍያ ጭነቶች ማጣሪያዎችን ሊያልፉ ይችላሉበተለይም የኮድ ዘዴዎች ከተሳተፉ።
- የማይንቀሳቀስ ትንተና (SAST) መሳሪያዎች ሰዎች የሚጎድላቸውን ይይዛሉበአሮጌ ኮድ ውስጥ የተደበቁ ደህንነታቸው ያልተጠበቁ ቅጦችን ጨምሮ።
- Xygeni በራስ-ሰር ለይቶ ማወቅን፣ ቅድሚያ መስጠትን እና ሌላው ቀርቶ ማረምን ያከናውናል ስለዚህ ቡድንዎ ተጋላጭነቶችን በማሳደድ ሳይሆን በጽሑፍ ባህሪያት ላይ ማተኮር ይችላል።
ማጠቃለያ፡ ማጣሪያዎችን አትመኑ። በዲዛይን የተጠበቀ።
እንደሚከተሉት ባሉ ተግባራት ላይ በመመስረት ስትሪፕቻር ፈጣን መፍትሄ ሊመስል ይችላል፣ ነገር ግን የተሳሳተ የደህንነት ስሜት ይፈጥራሉ። አጥቂዎች ከክር ማጣሪያዎች በበለጠ ፍጥነት ይሻሻላሉ። የመርፌ ጥቃቶችን ለማስቆም ብቸኛው አስተማማኝ መንገድ በዲዛይን ደህንነቱ የተጠበቀ ኮድ በመጻፍ እና ያንን ዲዛይን በሁሉም ቦታ በማስፈጸም ነው።
እንደ Xygeni ያሉ መሳሪያዎች በራስ-ሰር እንዲያደርጉት ይረዱዎታል። pull request ወደ pipelineማጣሪያዎችዎ የማያገኙትን ይይዛሉ፣ እና ወደ ምርት ከመድረሱ በፊት ያስተካክላሉ።







