package.json - package-lock.json - ታይፕስኩዊቲንግ

በ package.json ውስጥ የፊደል አጻጻፍ ታይፕ አንድ የሚመስል ፓኬጅ ስምምነት ያድርጉ Pipeline

ማልዌርን የላከ አንድ ባህሪ ያለው ስህተት

በፊደል አጻጻፍ ጀመረ። በከፍተኛ የባህሪ ግፊቶች እና የህዝብ ግንኙነት ውህደት ውስጥ የሆነ ቦታ፣ አንድ ሰው ተተየበ @utils_core ከሱ ይልቅ @utils-core ወደ package.jsonያ ነጠላ ቁምፊ ስህተት አልፈጠረም። በምትኩ፣ በጸጥታ ወደ በሚቀጥለው ጊዜ ተንኮል አዘል የሚመስል ጥቅል CI/CD አሂድ፣ በተሰኩ ስሪቶች እና አውቶሜሽን ላይ እምነትን በመጠቀም። ወደ ክፍት ምንጭ የፊደል አጻጻፍ ዓለም እንኳን በደህና መጡ።

የታይፖስኩዊቲንግ፡ በሰው ስህተት ላይ የሚያድግ የጥቃት ቬክተር

የታይፕስኩዌርቲንግ በትክክል የሚመስለው ይህ ነው፡ ተንኮል አዘል ተዋናዮች ከህጋዊ ስሞች ጋር ተመሳሳይ የሆኑ ስሞችን በመመዝገብ ላይ ናቸው። በፍጥነት በሚጓዙ አካባቢዎች፣ ይህ የሚሰራው ገንቢዎች የእነሱን ስም እንደሚያምኑ ስለሚያምኑ ነው። package.json ና ጥቅል-መቆለፊያ.json የሚጠብቁትን ያንፀባርቃል። አንድ ገፀ ባህሪ ጠፍቶ ይሆን? በህዝብ ግንኙነት ልዩነት ውስጥ የማይታይ ሊሆን ይችላል።

NPM በፊደል አጻጻፍ የመጠቀም ታሪክ አለው። እንደ ክሮስኤንቭ ከሱ ይልቅ ተሻጋሪ-ኢንቪ or የክስተት ዥረት የኋላ በሮች እነዚህ የሚመስሉ ነገሮች ምን ያህል ውጤታማ ሊሆኑ እንደሚችሉ አሳይተዋል። እነዚህ የውሸት ፓኬጆች ብዙውን ጊዜ ግምገማዎችን የሚያልፉት ትክክል ስለሚመስሉ እና ወዲያውኑ የሩጫ ጊዜ ስህተቶችን ስለማይጥሉ ብቻ ነው።

የተለመዱ ወጥመዶች የሚከተሉትን ያካትታሉ:

  • ሰረዝ ከስር ከስር ጋር፡ lኦዳሽ-ኮር vs lodash_core
  • ብዙ ቁጥር፡ ጥያቄ vs ጥያቄዎች
  • የተተኩ ቁምፊዎች፡ ኤክስፕረስ ከሱ ይልቅ ለመግለጽ

package-lock.json የት ዓይነ ስውር ቦታ ይሆናል

ገንቢው የፊደል አጻጻፍ ስህተትን ያስተካክላል። ወይም እንደዚያ ያስባሉ። ግን እስካሁን ጥቅል-መቆለፊያ.json በአጥቂው ጥቅል ውስጥ ቀድሞውንም ተቆልፏል። እናም እውነተኛው አደጋ የሚደበቀው እዚህ ነው።

የማይመሳስል package.jsonበእጅ የሚስተካከል እና የበለጠ ምርመራ የሚደረግበት፣ ጥቅል-መቆለፊያ.json በራስ-ሰር የሚመነጨው በ NPMበዚህም ምክንያት፣ ብዙውን ጊዜ እንደ መደበኛ ነገር ይቆጠራል፣ ይዘለላል ወይም ብቻ ተደብቋል pull request ግምገማዎች። ቡድኖች “በጣም ጫጫታ” ብለው ምልክት ማድረጋቸው ወይም ጥልቅ እይታ ሳያደርጉ በተዘዋዋሪ ማመን የተለመደ ነው።

አጥቂዎች ይህንን ያውቃሉ። በእሱ ላይ ይተማመናሉ። አንድ ጊዜ ተንኮል አዘል ጥቅል በስህተት ምክንያት ተጠቅሷል package.json, package-lock.json የተፈታውን ስሪት ይመዘግባል። የፊደል አጻጻፉ በኋላ ቢስተካከልም እንኳ የመቆለፊያ ፋይሉ በግልጽ እንደገና ካልተፈጠረ በስተቀር ተንኮል አዘል ግቤቱ ሊቀጥል ይችላል።

ሁኔታውን የባሰው ደግሞ፣ ወጥነትን ለማረጋገጥ የታሰበው የስሪት ፒንንግ ወደ ኋላ ሊመለስ ይችላል። አጥቂዎች የውሸት ፓኬጃቸውን ከትክክለኛው ጋር በተመሳሳይ መልኩ ሊቀይሩት ይችላሉ። CI/CD ስርዓቱ የተሰኩ ስሪቶችን በጭፍን ያምናል፣ የታወቀ የስሪት ቁጥር ያለው ፓኬጅ እየጫነ መሆኑን አያገኝም ነገር ግን ከሌላ ተንኮል አዘል ምንጭ።

ይህ ዝምተኛ ጽናት የሚያደርገው ነገር ነው ጥቅል-መቆለፊያ.json በጣም አደገኛ ነው። ትክክለኛ ግንባታዎችን ያረጋግጣል፣ አዎ፣ ነገር ግን በእጅ ካልተያዘ እና ካልተጸዳ በስተቀር መጥፎ ጥቅል በአካባቢው እንደሚቆይ ያረጋግጣል።

CI/CD፦ ማልዌር የት እንደሚመታ - package.json

በተለመደው ውስጥ CI/CD pipelineተንኮል አዘል ፓኬጁ እስኪሰራ ድረስ መጠበቅ አያስፈልገውም። በፍሰቱ ውስጥ በጣም ቀደም ብሎ ይፈታል እና ይቀሰቀሳል፡

የጥገኝነት ጥራት
የ pipeline ትክክለኛውን የጥገኝነት ስሪቶች ከ p ይጎትታልackage-lock.jsonአሁን የሚያካትተው በስህተት ስህተት ምክንያት የተሳሳቱ ፓኬጆች package.json.

የመጫኛ ደረጃ
በnpm ci ጊዜ፣ ሁሉም ጥገኛዎች ይጫናሉ፣ ተንኮል አዘል የሆነውን ጨምሮ። ማስጠንቀቂያዎች የሉም፣ ምንም ጥያቄዎች የሉም፣ ዝም ብሎ መጫን ብቻ።

ከተጫነ በኋላ የስክሪፕት አፈፃፀም
የሚመስለው ፓኬጅ ጭነቱ ከተጠናቀቀ በኋላ በራስ-ሰር የሚሰራ የድህረ-ጭነት ስክሪፕት ያካትታል። ስምምነቱ የሚፈጸመው እዚህ ነው።

የውሸት ኮድ ምሳሌ፡

				
					if (installation_phase_active) {
runHiddenPayload()
}
				
			

የውሸት ኮድ መግለጫ፡
በመጫኛ ደረጃው ወቅት፣ የድህረ-ጭነት የህይወት ዑደት መንጠቆ ካለ፣ የውሸት ፓኬጁ የተደበቀውን አመክንዮ ያስነሳል - ብዙውን ጊዜ ግንባታዎች ወይም ሙከራዎች ከመከናወናቸው በፊት። ይህ ውጫዊ ጥያቄዎችን ማቅረብ፣ የኋላ በሮችን ማስገባት ወይም ሌሎች ያልተፈቀዱ እርምጃዎችን ሊያካትት ይችላል።

⚠️ ማስጠንቀቂያ፡ ይህ የውሸት ኮድ ለማሳያ ዓላማዎች ብቻ የተዘጋጀ ሲሆን በእውነተኛ አካባቢዎች ጥቅም ላይ መዋል የለበትም።

ምንም ማንቂያዎች አልተቀሰቀሱም። ምንም ነገር አይሳካም። አካባቢው አስቀድሞ ተጎድቷል፣ ከእርስዎ በፊት pipeline የሙከራ ደረጃ ላይ እንኳን ይደርሳል።

ጊዜው ከማለፉ በፊት ልዩነቱን መለየት

የተለመደ ስህተት፡ መገመት package.json ታሪኩን በሙሉ ይናገራል። አይናገርም። እውነተኛው ኃይል የሚገኘው በ package.json + package-lock.json.

ምን መፈለግ እንዳለበት እነሆ

  • ይህ ጥቅል-መቆለፊያ.json ያልተጠበቁ ፓኬጆችን ያካትታል?
  • ከማይታወቁ መዝገቦች የተገኙ ጥገኝነቶች አሉ ወይስ እንግዳ የሆኑ ስኮፖች አሏቸው?
  • የስሪት ቁጥሮች ከልክ በላይ የተወሰኑ ናቸው ወይስ የተሳሳቱ ናቸው?

እንደ: የCLI መሳሪያዎችን ይጠቀሙ

  • npm ኦዲት የታወቁ ጉዳዮችን ምልክት ማድረግ
  • npm ls ሙሉውን የጥገኝነት ዛፍ ለማየት
  • ልዩነት መካከል ያሉትን ስሪቶች ለማነፃፀር package.json ና ጥቅል-መቆለፊያ.json

የእርስዎን ያጠናክሩ Pipeline፦ የሚሰሩ መከላከያዎች

የፊደል አጻጻፍን ለመከላከል፡

  • የወሰን ገደቦችን በ ውስጥ ተግባራዊ ማድረግ package.json.
  • ቅድመ-ውህደት ያክሉ hooks ጥገኛዎችን ለማጣራት እና ለማረጋገጥ።
  • ጥቅም npm ci ያልታሰበ የስሪት መንሸራተትን ለማስወገድ።
  • በመደበኛነት ይቃኙ ጥቅል-መቆለፊያ.json ለአናሎሚዎች።

እና ከሁሉም በላይ አስፈላጊው ነገር፡ ያልተረጋገጡ ግቤቶችን በ ውስጥ ያስተናግዱ ጥቅል-መቆለፊያ.json እንደ ሊሆኑ የሚችሉ አደጋዎች። እያንዳንዱ commit የአቅርቦት ሰንሰለት የፍተሻ መስመር ተደርጎ መታየት አለበት።

አውቶማቲክ ምርመራ፡ መሳሪያዎች እንደ Xygeni እንዴት እንደሚረዱ

እንደ ብር ጥይት ባይሆንም፣ አውቶማቲክ መሳሪያዎች እንደ ዚጌኒ የፊደል አጻጻፍ ስልት የሚያብብበትን የሰው ልጅ የስህተት ምክንያት በመቀነስ ረገድ ወሳኝ ሚና ይጫወታሉ። Xygeni በቀጥታ ከ DevOps የስራ ፍሰትዎ ጋር ይዋሃዳል፣ ይህም ከጥገኝነት ጠለፋ አፈፃፀም በፊት በእውነተኛ ጊዜ የመከላከያ ንብርብር ይጨምራል።

Xygeni እንዴት እንደሚረዳ እነሆ፡

  • አጠራጣሪ የጥቅል ስም መለየት፡
    የፊደል አጻጻፍ ስልቶችን ለመለየት ብልጥ ሂዩሪስቲክስን ይጠቀማል package.json፣ በታዋቂ የጥቅል ስሞች ላይ ጥቃቅን ልዩነቶችን እየፈለግን ነው (እንደ የተጨመሩ የስር መስመሮች፣ የትራንስፖዚሽን ወይም የፊደል መለዋወጥ ያሉ)።
  • ያልታወቀ የሃሽ ማረጋገጫ፡
    የእያንዳንዱን ጥገኝነት ሃሽ በ ውስጥ ያወዳድራል ጥቅል-መቆለፊያ.json ከታመኑ መዝገቦች የተገኙ የታወቁ ጥሩ ቅርሶችን የያዘ የውሂብ ጎታ ላይ። የጥቅል ስም እና ስሪት ጥሩ ቢመስሉም፣ የሃሽ አለመጣጣም ቀይ ባንዲራ ያነሳል።
  • ከግንባታው በፊት ማገድ፡
    ያልተረጋገጡ ወይም አጠራጣሪ ፓኬጆች በመጫኛ ወይም በድህረ-መጫኛ ደረጃዎች ላይ ከመድረሳቸው በፊት መጫኑን ያቋርጣል እና ያግዳል CI/CD pipeline.
  • የጥገኝነት ግራፍ ትንተና፡
    ቀጥተኛ ያልሆኑ የፊደል አጻጻፍ ሙከራዎችን ወይም ተንኮል አዘል ጊዜያዊ ጥገኝነቶችን ለማረጋገጥ የሙሉ ጥገኝነት ዛፉን ያለማቋረጥ ይመረምራል።
  • ማንቂያዎች እና ሪፖርት ማድረግ፦
    በጥገኝነት ሰንሰለቱ ውስጥ ምን እንደተጠቆመ፣ ለምን እንደሆነ እና ከየት እንደመጣ የሚያሳይ ዝርዝር፣ ተግባራዊ ሊሆኑ የሚችሉ ማንቂያዎችን ይሰጣል።

የጥቅል ሥነ-ምህዳሮች ይበልጥ ውስብስብ እየሆኑ ሲሄዱ፣ እንደ Xygeni ያሉ መሳሪያዎች አስፈላጊ ይሆናሉ። በእጅ የሚደረግ ግምገማ ከጥገኝነት መስፋፋት ወይም ፈጣን ድግግሞሽ ጋር አይመጣጠንም። Xygeni ዘመናዊ ወሳኝ ፍተሻዎችን በራስ-ሰር ለማድረግ ጣልቃ ገብቷል። pipelineአስፈላጊነት፣ በመተማመን እና በማረጋገጥ መካከል ያለውን ክፍተት መዝጋት።

አንድ ገፀ ባህሪ። እውነተኛ ውጤቶች።

ይህ እንግዳ ነገር አልነበረም ዜሮ-ቀንየተሳሳተ የፊደል አጻጻፍ ነበር። አንድ የተሳሳተ ቁምፊ በ package.jsonበጸጥታ የተጠናከረው በ ጥቅል-መቆለፊያ.jsonእና ተንኮል አዘል ዌር በተለመደው ጊዜ በራስ-ሰር ተልኳል CI/CD አሂድ.

የፊደል አጻጻፍ ትክክለኛ አደጋ ይህ ነው፡ ውስብስብነት አያስፈልገውም። ፍጥነትን፣ እምነትን እና አውቶሜሽንን ይጠቀማል። ይህ ስምምነት ትክክለኛ ቁጥጥሮች ሲኖሩ ሊከለከል ይችል ነበር፡

  • ራስ-ሰር ቅኝት ከመጫንዎ በፊት አጠራጣሪ የጥቅል ስሞችን እና ስሪቶችን ለመያዝ።
  • የመቆለፊያ ፋይል ኦዲቲንግ ያልተገመገሙ ወይም ያልተጠበቁ ግቤቶችን በ ውስጥ ለመለየት ጥቅል-መቆለፊያ.json.
  • የስም ማረጋገጫ ሂዩሪስቲክስ ቅርብ ግጥሚያዎችን ወደ ታማኝ ፓኬጆች መጠቆም።

አንድ ገፀ ባህሪ ብቻ ነው የሚያስፈልገው። ትክክለኛዎቹ ቼኮች የእርስዎን ከመንካትዎ በፊት ያስቆሙት ነበር። pipelineመተማመን ብቻውን በቂ አይደለም። በዘመናዊ DevSecOps ውስጥ፣ ሁሉንም ነገር ታረጋግጣለህ ወይም ሁሉንም ነገር አደጋ ላይ ትጥላለህ።

sca-tools-software-composition-analyse-tools
የሶፍትዌር አደጋዎችዎን ቅድሚያ ይስጡ፣ ያስተካክሉ እና ይጠብቁ
ነፃ መለያ ያግኙ።
ምንም ዱቤ ካርድ አያስፈልግም።

የሶፍትዌርዎን ልማት እና አቅርቦት ደህንነት ይጠብቁ

ከ Xygeni Product Suite ጋር