package.json - package-lock.json - чопкунӣ

Хатои хато дар package.json Бигзор бастаи монанд вайрон шавад Pipeline

Хатои як аломат, ки нармафзори зарароварро фиристодааст

Он бо хатои чопӣ оғоз шуд. Дар ҷое дар байни таблиғоти бузурги мақолаҳо ва омезиши PR, касе чоп кард. @utils_core ба ҷои @utils-core ба дар бастаи.jsonОн хатои ягонаи аломат хато накард. Ба ҷои ин, он оҳиста-оҳиста як бастаи шабеҳи зараровар дар давоми навбатӣ CI/CD иҷро кунед, аз эътимод ба версияҳои пиншуда ва автоматизатсия истифода баред. Хуш омадед ба ҷаҳони хатогиҳои чопӣ дар манбаъҳои кушода.

Навиштани матн: Вектори ҳамлае, ки аз хатогиҳои инсонӣ сарчашма мегирад

Typosquatting маҳз ҳамон чизест, ки ба назар мерасад: шахсони зараровар бастаҳоеро бо номҳои қариб якхела бо бастаҳои қонунӣ ба қайд мегиранд. Дар муҳитҳои босуръат ин кор мекунад, зеро таҳиягарон ба онҳо эътимод доранд бастаи.json ва package-lock.json инъикоси он чизест, ки онҳо интизоранд. Як қаҳрамон кам аст? Он метавонад дар дифференсияи PR ноаён бошад.

NPM таърихи истифода аз тариқи типосквотингро дорад. Бастаҳо ба монанди кроссвенв ба ҷои муҳаррики байнисоҳавӣ or ҷараёни чорабинӣ Дарҳои пуштибон аллакай нишон додаанд, ки ин бастаҳои қалбакӣ то чӣ андоза муассир буда метавонанд. Ин бастаҳои қалбакӣ аксар вақт танҳо аз он сабаб, ки онҳо дуруст ба назар мерасанд ва хатогиҳои фаврӣ дар вақти иҷро намедиҳанд, аз баррасиҳо мегузаранд.

Доруҳои маъмулӣ инҳоянд:

  • Дефис ва зерхат: lОдаш-аслӣ vs lodash_core
  • Ҷамъҳо: дархост vs дархостҳо
  • Аломатҳои ивазшуда: экспресс ба ҷои баён

Ҷое ки package-lock.json ба нуқтаи ноаён табдил меёбад

Таҳиягар хатои худро ислоҳ мекунад. Ё онҳо чунин фикр мекунанд. Аммо ҳоло, package-lock.json аллакай бастаи ҳамлагарро баста кардааст. Ва ин ҷоест, ки хатари воқеӣ пинҳон аст.

Баръакси бастаи.json, ки дастӣ таҳрир карда мешавад ва бодиққаттар баррасӣ мешавад, package-lock.json аз ҷониби худкор тавлид мешавад NPMДар натиҷа, он аксар вақт мисли расмият муносибат карда мешавад, сарфи назар карда мешавад ё танҳо дар қисматҳои он аз назар гузаронида мешавад. pull request баррасиҳо. Барои дастаҳо қайд кардани он ҳамчун "хеле пурғавғо" ё бе нигоҳи амиқ ба таври ноаён ба он бовар кардан чизи нодир нест.

Ҳамлагарон инро медонанд. Онҳо ба он такя мекунанд. Як бор бастаи зараровар ба шарофати хатои чопӣ истинод карда мешавад баста.json, бастабандии қулф.json версияи ҳалшударо сабт мекунад. Ҳатто агар хатои чопӣ баъдтар ислоҳ карда шавад ҳам, вуруди зараровар метавонад боқӣ монад, агар файли қулф ба таври возеҳ аз нав тавлид нашавад.

Бадтараш, пинкунии версия, ки бояд мувофиқатро таъмин кунад, метавонад натиҷаи баръакс диҳад. Ҳамлагарон метавонанд версияи бастаи қалбакии худро ба версияи аслӣ монанд кунанд. Агар CI/CD Агар система ба версияҳои пиншуда кӯр-кӯрона эътимод кунад, он муайян намекунад, ки бастаеро бо рақами хуби версияи маълум, вале аз манбаи дигари зараровар насб мекунад.

Ин истодагарии хомӯшона он чизест, ки package-lock.json хеле хатарнок. Бале, он сохторҳои детерминистиро кафолат медиҳад, аммо инчунин кафолат медиҳад, ки бастаи бад дар он ҷо мемонад, агар он дастгир ва дастӣ тоза карда нашавад.

CI/CD: Ҷое, ки нармафзори зараровар ба он ворид мешавад – package.json

Дар маъмулӣ CI/CD pipeline, бастаи зараровар набояд то анҷоми кор интизор шавад. Он хеле барвақттар ҳал ва фаъол мешавад:

Ҳалли вобастагӣ
Дар pipeline версияҳои дақиқи вобастагиро аз p мегирадaccage-lock.json, ки ҳоло онро дар бар мегирад бастаи typosquatted аз сабаби хатои чопӣ баста.json.

Марҳилаи насб
Дар давоми npm ci, ҳамаи вобастагиҳо, аз ҷумла нармафзори зараровар, насб карда мешаванд. Бе огоҳӣ, бе дархост, танҳо насби хомӯш.

Иҷрои скрипти пас аз насб
Бастаи lookalike скрипти пас аз насбро дар бар мегирад, ки пас аз анҷоми насб ба таври худкор кор мекунад. Дар ин ҷо созиш рух медиҳад.

Намунаи псевдокод:

				
					if (installation_phase_active) {
runHiddenPayload()
}
				
			

Тавсифи псевдокод:
Дар марҳилаи насб, агар қалмоқи давраи ҳаёти пас аз насб мавҷуд бошад, бастаи қалбакӣ мантиқи пинҳонии худро ба кор медарорад - аксар вақт пеш аз он ки сохтаҳо ё озмоишҳо оғоз шаванд. Ин метавонад дархостҳои беруна, ворид кардани дарвозаҳои қафо ё дигар амалҳои беиҷозатро дар бар гирад.

⚠️ Огоҳӣ: Ин псевдокод танҳо барои мақсадҳои намоишӣ аст ва набояд дар муҳитҳои воқеӣ истифода шавад.

Ҳеҷ огоҳие фаъол намешавад. Ҳеҷ чиз хато намекунад. Муҳити зист аллакай зери хатар қарор дорад, пеш аз он ки шумо... pipeline ҳатто ба марҳилаи озмоишӣ мерасад.

Муайян кардани фарқият пеш аз он ки хеле дер шавад

Хатои маъмулӣ: тахмин кардан бастаи.json тамоми қиссаро нақл мекунад. Ин тавр нест. Қудрати воқеӣ дар комбинатсияи баста.json + баста-қуфл.json.

Ин аст он чизе, ки бояд ҷустуҷӯ кард:

  • Оё ин package-lock.json бастаҳои ғайричашмдоштро дар бар мегирад?
  • Оё ягон вобастагӣ аз феҳристҳои номаълум сарчашма мегирад ё доираи аҷибе дорад?
  • Оё рақамҳои версия аз ҳад зиёд мушаххас ё нодуруст ҷойгир шудаанд?

Аз абзорҳои CLI истифода баред, ба монанди:

  • аудити npm қайд кардани мушкилоти маълум
  • npm ls барои дидани дарахти пурраи вобастагӣ
  • diff муқоисаи версияҳо байни бастаи.json ва package-lock.json

Сахт кунед Pipeline: Мудофиаҳое, ки кор мекунанд

Барои муҳофизат аз чопкунӣ:

  • Маҳдудиятҳои фарогириро дар амал татбиқ кунед баста.json.
  • Илова кардани пешакӣ якҷоякунӣ hooks барои линт кардан ва тасдиқи вобастагӣ.
  • истифода бурдан npm ci барои пешгирӣ аз тағйири тасодуфии версияҳо.
  • Мунтазам скан кунед package-lock.json барои аномалияҳо.

Ва аз ҳама муҳимтар: вурудоти тасдиқнашударо коркард кунед package-lock.json ҳамчун хатарҳои эҳтимолӣ. Ҳар commit бояд ҳамчун нуқтаи назорати занҷираи таъминот баррасӣ карда шавад.

Ошкоркунии автоматӣ: Чӣ тавр абзорҳо ба монанди Xygeni кӯмак мекунанд

Гарчанде ки ин як тири нуқра нест, абзорҳои автоматикунонидашуда ба монанди Ксигенӣ дар коҳиш додани омили хатои инсонӣ, ки чопкунӣ аз он рушд мекунад, нақши муҳим мебозанд. Xygeni мустақиман ба ҷараёни кории DevOps-и шумо ҳамгиро мешавад ва қабати муҳофизати вақти воқеиро аз рабудани вобастагӣ пеш аз расидан ба иҷро илова мекунад.

Ин аст, ки чӣ тавр Xygeni кӯмак мекунад:

  • Муайян кардани номи бастаи шубҳанок:
    Барои муайян кардани қолибҳои хатои чопӣ дар эвристикаи интеллектуалӣ истифода мебарад бастаи.json, дар ҷустуҷӯи тағйироти ночиз дар номҳои маъруфи бастаҳо (ба монанди хатҳои иловагии зерӣ, транспозицияҳо ё иваз кардани ҳарфҳо).
  • Тасдиқи ҳэши номаълум:
    Ҳеши ҳар як вобастагиро дар муқоиса мекунад package-lock.json бар зидди пойгоҳи додаҳои артефактҳои маъруфи хуб аз феҳристҳои боэътимод. Ҳатто агар ном ва версияи баста хуб ба назар расад ҳам, номувофиқатии хэш нишонаи сурхро ба миён меорад.
  • Блоккунӣ пеш аз сохтмон:
    Насби ҳама гуна бастаҳои тасдиқнашуда ё шубҳанокро пеш аз расидан ба марҳилаҳои насб ё пас аз насб боздошта ва масдуд мекунад CI/CD pipeline.
  • Таҳлили графи вобастагӣ:
    Дарахти пурраи вобастагиро пайваста аз кӯшишҳои чопкунии ғайримустақим ё вобастагиҳои зараровари транзитӣ тафтиш мекунад.
  • Огоҳӣ ва гузоришдиҳӣ:
    Огоҳиҳои муфассал ва амалӣ пешниҳод мекунад, ки нишон медиҳанд, ки чӣ қайд карда шудааст, чаро ва аз куҷо дар занҷири вобастагӣ пайдо шудааст.

Бо мураккабтар шудани экосистемаҳои бастабандӣ, абзорҳо ба монанди Xygeni муҳим мегарданд. Баррасии дастӣ бо паҳншавии вобастагӣ ё такрори босуръат миқёспазир намешавад. Xygeni барои автоматикунонии санҷишҳои муҳими муосир дахолат мекунад. pipelineниёз дорад, фосилаи байни эътимод ва тасдиқро аз байн барад.

Як қаҳрамон. Оқибатҳои воқеӣ.

Ин экзотикӣ набуд рӯзи сифрИн хатои чопӣ буд. Як аломати нодуруст ҷойгиршуда дар бастаи.json, хомӯшона тақвият дода шудааст package-lock.jsonва нармафзори зараровар ба таври худкор ҳангоми иҷрои муқаррарӣ фиристода мешуд CI/CD иҷро кунед.

Хатари воқеии хатогиҳои чопӣ дар он аст: он ба мураккабӣ ниёз надорад. Он аз суръат, эътимод ва автоматизатсия истифода мебарад. Ин созишро бо риояи чораҳои дурусти назоратӣ пешгирӣ кардан мумкин буд:

  • Сканкунии автоматӣ барои муайян кардани номҳо ва версияҳои шубҳаноки бастаҳо пеш аз насб.
  • Аудити файли қулф барои муайян кардани вурудоти баррасинашуда ё ғайричашмдошт дар package-lock.json.
  • Эвристикаи тасдиқи ном барои қайд кардани мувофиқатҳои наздик ба бастаҳои боэътимод.

Танҳо як аломат кифоя буд. Санҷишҳои дуруст онро пеш аз он ки ба шумо расад, бозмедоштанд. pipelineЭътимод кофӣ нест. Дар DevSecOps-и муосир, шумо ҳама чизро тафтиш мекунед ё ҳама чизро зери хатар мегузоред.

асбобҳои sca-tools-нармафзор-таҳлили таркиб
Хатарҳои нармафзори худро афзалият диҳед, ислоҳ кунед ва бехатар созед
Ҳисоби ройгони худро дастрас кунед.
Корти кредитӣ лозим нест.

Таҳия ва интиқоли нармафзори худро таъмин кунед

бо маҷмӯи маҳсулоти Xygeni