ເປັນຫຍັງ Package-Lock.JSON ຈຶ່ງມີຄວາມສຳຄັນຕໍ່ນັກພັດທະນາ
ໃນໂຄງການ Node.js, package-lock.json ບໍ່ພຽງແຕ່ເປັນໄຟລ໌ຄູ່ກັບ package.json ເທົ່ານັ້ນ. ມັນລັອກລຸ້ນທີ່ແນ່ນອນຂອງທຸກໆ dependency ທີ່ຕິດຕັ້ງໄວ້, ລວມທັງລຸ້ນທີ່ຊ້ອນກັນ. ໄຟລ໌ນີ້ຮັບປະກັນຄວາມສາມາດໃນການສ້າງຊ້ຳໄດ້ໃນທົ່ວສະພາບແວດລ້ອມ ແລະ ປ້ອງກັນການປ່ຽນແປງທີ່ບໍ່ຄາດຄິດເມື່ອລຸ້ນແພັກເກດໃໝ່ຖືກເຜີຍແຜ່. ຖ້າບໍ່ມີມັນ, ນັກພັດທະນາຈະມີຄວາມສ່ຽງຕໍ່ພຶດຕິກຳທີ່ແຕກຕ່າງກັນໃນຂັ້ນຕອນການພັດທະນາ, ການທົດສອບ, ແລະ ການຜະລິດເນື່ອງຈາກການປ່ຽນແປງຕົ້ນໄມ້ dependency, ແລະ ແມ່ນແຕ່ເປີດໂອກາດໃຫ້ການພິມຜິດ npm ຖ້າຄວາມຜິດພາດເກີດຂຶ້ນໃນ lockfile.
ເມື່ອໃຊ້ຢ່າງຖືກຕ້ອງ, package-lock.json ຈະຮັບປະກັນທຸກຄົນໃນທີມ ແລະ ທີມຂອງທ່ານ CI/CD pipeline ຕິດຕັ້ງ ລະຫັດດຽວກັນ. ແຕ່ການພິມຜິດທີ່ງຽບໆພຽງຄັ້ງດຽວໃນໄຟລ໌ນີ້ສາມາດປ່ຽນເສັ້ນທາງແອັບຯຂອງທ່ານໄປສູ່ກັບດັກໄດ້ໂດຍກົງ.
ການພິມຜິດນຳໄປສູ່ການໂຈມຕີ Typosquatting ຂອງ NPM ແນວໃດ?
ສົມມຸດວ່າແພັກເກດທີ່ຖືກຕ້ອງຕາມກົດໝາຍໃນ ຊຸດ .json ຖືກສະກົດຖືກຕ້ອງ, ຄື lodashແຕ່ມີລາຍການທີ່ພິມຜິດ package-lock.json, ເຊັ່ນວ່າ ໂລດາສ, ຍັງສາມາດລັກລອບເຂົ້າໄປໃນຕົ້ນໄມ້ການເພິ່ງພາອາໄສຂອງທ່ານໄດ້, ໂດຍສະເພາະຖ້າມີຄົນແກ້ໄຂມັນດ້ວຍຕົນເອງ ຫຼື ເຄື່ອງມືທີ່ມີຂໍ້ບົກຜ່ອງຂຽນມັນ.
ຜູ້ໂຈມຕີໃຊ້ເຕັກນິກທີ່ເອີ້ນວ່າ npm typosquatting ເພື່ອກວດສອບຄວາມຜິດພາດເຫຼົ່ານີ້. ພວກເຂົາອັບໂຫລດແພັກເກດທີ່ເປັນອັນຕະລາຍທີ່ມີຊື່ຄ້າຍຄືກັບແພັກເກດທີ່ນິຍົມ (ຕົວຢ່າງ, ປະຕິກິລິຍາ-ໂດມ, ສະແດງອອກ, ເປັນລ່ຽມ). ຖ້າ JSON ລັອກແພັກເກດຂອງເຈົ້າມີການພິມຜິດແບບນັ້ນ, npm ຈະຕິດຕັ້ງແພັກເກດຂອງຜູ້ໂຈມຕີໂດຍບໍ່ມີຄຳຖາມ, ເພາະວ່າເຈົ້າໄດ້ບອກມັນຢ່າງຊັດເຈນ.
ການໂຈມຕີ typosquatting npm ໃນໂລກຕົວຈິງໄດ້ກາຍເປັນຫົວຂໍ້ຂ່າວ. ຕົວຢ່າງໜຶ່ງດັ່ງກ່າວແມ່ນ ການປະນີປະນອມແພັກເກດ Coa, ບ່ອນທີ່ ລະຫັດທີ່ເປັນອັນຕະລາຍ ຖືກສົ່ງຜ່ານການອັບເດດຂອງແພັກເກດທີ່ເຊື່ອຖືໄດ້. ຄວາມແຕກຕ່າງແມ່ນວ່າດ້ວຍການພິມຜິດ npm, ນັກພັດທະນາໄດ້ເຊີນຜູ້ໂຈມຕີເຂົ້າມາໂດຍບັງເອີນໂດຍການພິມຜິດ dependency.
ຄວາມສ່ຽງທີ່ແທ້ຈິງໃນ CI/CD Pipelineເກີດຈາກຄວາມຜິດພາດ json ລັອກແພັກເກດ
ທີ່ທັນສະໄຫມ CI/CD pipelineການປິ່ນປົວ package-lock.json ເປັນແຫຼ່ງຄວາມຈິງ. ໃນລະຫວ່າງການສ້າງ ຫຼື ການນຳໃຊ້, pipeline ແລ່ນ npm ci or npm ຕິດຕັ້ງ, ເຊິ່ງທັງສອງຢ່າງນີ້ອ່ານຈາກໄຟລ໌ລັອກ. ຖ້າມີການພິມຜິດ, ແພັກເກດທີ່ເປັນອັນຕະລາຍຈະຖືກດຶງເຂົ້າມາໂດຍອັດຕະໂນມັດ. ບໍ່ມີການແຈ້ງເຕືອນ. ບໍ່ມີການກະຕຸ້ນເຕືອນ.
ນັ້ນໝາຍຄວາມວ່າການພິມຜິດທີ່ນຳສະເໜີໃນລະຫວ່າງການພັດທະນາທ້ອງຖິ່ນສາມາດແຜ່ລາມໄປຢ່າງງຽບໆຈົນເຖິງຂັ້ນຕອນການຜະລິດ ຫຼື ແມ່ນແຕ່ການຜະລິດ. ຜູ້ໂຈມຕີສາມາດຝັງຕົວລັກຂໍ້ມູນປະຈຳຕົວ, ຜູ້ຂຸດຄົ້ນ crypto, ຫຼື backdoors ທີ່ເປີດໃຊ້ງານຫຼັງການນຳໃຊ້. ທັງໝົດນີ້ສາມາດເກີດຂຶ້ນໄດ້ໂດຍບໍ່ຕ້ອງກະຕຸ້ນເຄື່ອງມືຄວາມປອດໄພ, ເພາະວ່າການເພິ່ງພາອາໄສໄດ້ຖືກ "ປະກາດ" ໃນ package-lock.json.
ນີ້ບໍ່ແມ່ນພຽງແຕ່ຄວາມຜິດພາດເທົ່ານັ້ນ. ມັນເປັນການລະເມີດລະບົບຕ່ອງໂສ້ການສະໜອງທີ່ລໍຖ້າໃຫ້ເກີດຂຶ້ນ, ແລະການພິມຜິດ npm ເຮັດໃຫ້ມັນກາຍເປັນໄພຂົ່ມຂູ່ທີ່ແທ້ຈິງ.
ການກວດຫາ ແລະ ການປ້ອງກັນການພິມຜິດ Dependency ເພື່ອຫຼຸດຜ່ອນການພິມຜິດ NPM
ການພິມຜິດ package-lock.json ຈະເບິ່ງບໍ່ເຫັນ ເວັ້ນເສຍແຕ່ວ່າທ່ານຈະຊອກຫາພວກມັນຢ່າງຕັ້ງໜ້າ. ນີ້ແມ່ນວິທີການເລີ່ມຕົ້ນ:
- ການວິເຄາະສະຖິດ: ບາງເຄື່ອງມືບໍ່ສາມາດແກ້ໄຂບັນຫາເຫຼົ່ານີ້ໄດ້, ແຕ່ເຄື່ອງສະແກນ dependency ທີ່ອຸທິດຕົນສາມາດເຮັດໄດ້. ລວມເຄື່ອງມືທີ່ສະແກນຫາຮູບແບບການພິມຜິດ npm ແລະກວດສອບຂອງທ່ານ package-lock.json ສຳລັບຄວາມບໍ່ສອດຄ່ອງ.
- ໄຟລ໌ລັອກ Lintingໃຊ້ກົດລະບຽບ linting ທີ່ກຳນົດເອງ ຫຼື plugins ເພື່ອກວດສອບຄວາມຖືກຕ້ອງ package-lock.json ລາຍການທຽບກັບບັນຊີລາຍຊື່ທີ່ປອດໄພທີ່ຮູ້ຈັກ.
- ການທົບທວນຄືນລະຫັດການທົບທວນຄືນຈາກເພື່ອນຮ່ວມງານແມ່ນມີຄວາມສຳຄັນຫຼາຍ. ຄວາມແຕກຕ່າງຂອງ Lockfile ແມ່ນມີສຽງດັງ, ແຕ່ສອນທີມງານຂອງທ່ານໃຫ້ທົບທວນຄືນພວກມັນຄືກັນກັບລະຫັດ.
- ການກວດສອບອັດຕະໂນມັດ: ຕັ້ງຄ່າ pre-commit hooks ຫຼື ວຽກ CI ເພື່ອປະຕິເສດລາຍການທີ່ບໍ່ໄດ້ຮັບການຢືນຢັນ ຫຼື ໜ້າສົງໄສໃນ package-lock.json.
ນີ້ແມ່ນຕົວຢ່າງທີ່ໃຊ້ໄດ້ຈິງໂດຍໃຊ້ GitHub Actions:
ອັນນີ້ບໍ່ສາມາດປ້ອງກັນໄດ້, ແຕ່ມັນໝາຍເຖິງຊື່ແພັກເກດແປກໆທີ່ອາດຈະເປັນສັນຍານຂອງການພິມຜິດ npm.
ການຮັກສາຄວາມປອດໄພຂອງໂຄງການ Node.js ຕໍ່ກັບການໂຈມຕີ NPM Typosquatting ແລະ Supply Chain
ເພື່ອລັອກແອັບ Node.js ຂອງທ່ານ ແລະ ປ້ອງກັນການໂຈມຕີຜ່ານ package-lock.json:
- ການປັກໝຸດເວີຊັນທີ່ເຂັ້ມງວດຫຼີກລ່ຽງຊ່ວງເວີຊັນ (^, ~in ຊຸດ .jsonລັອກ dependencies ທັງໝົດໃຫ້ເປັນເວີຊັນທີ່ແນ່ນອນເພື່ອຫຼຸດຜ່ອນການອັບເດດ ແລະ ການເລື່ອນລອຍທີ່ບໍ່ຄາດຄິດ.
- ການກວດສອບລາຍເຊັນໃຊ້ປະໂຫຍດຈາກເຄື່ອງມືຕ່າງໆເຊັ່ນ Sigstore ແລະ ຄຸນສົມບັດຕົ້ນກຳເນີດຂອງ npm ເພື່ອກວດສອບຄວາມຖືກຕ້ອງ ແລະ ຕົ້ນກຳເນີດຂອງແພັກເກດຕ່າງໆ.
- ການສ້າງທີ່ບໍ່ປ່ຽນແປງ: ໃຊ້ສະເໝີ npm ci ດ້ວຍການກວດສອບແລ້ວ package-lock.json ໄຟລ໌ໃນສະພາບແວດລ້ອມການຜະລິດ. ຢ່າອີງໃສ່ npm ຕິດຕັ້ງ ໃນລະຫວ່າງການນຳໃຊ້, ຍ້ອນວ່າມັນສາມາດນຳສະເໜີການປ່ຽນແປງທີ່ບໍ່ໄດ້ຮັບການກວດສອບ.
- ຕິດຕາມຢ່າງຕໍ່ເນື່ອງໃຊ້ວິທີແກ້ໄຂການຕິດຕາມກວດກາທີ່ແຈ້ງເຕືອນທ່ານເມື່ອ:
- ແພັກເກດໃໝ່ຈະປາກົດຢູ່ໃນຂອງທ່ານ package-lock.json
- ແພັກເກດທີ່ມີຢູ່ແລ້ວຈະປ່ຽນແປງໂດຍບໍ່ຄາດຄິດ
- ຮູບແບບທີ່ໜ້າສົງໄສ (ຕົວຢ່າງ, ຊື່ແພັກເກດເຊັ່ນ ສະແດງອອກ, ປະຕິກິລິຍາ-ໂດມ, ເປັນລ່ຽມ) ຖືກກວດພົບ
- ເຄື່ອງມືກວດສອບການເພິ່ງພາອາໄສ: ປະສົມປະສານເຄື່ອງມືອັດຕະໂນມັດເຊັ່ນ: npm ການກວດສອບ, Snyk, ຫຼື ຊີເກນີ ເຂົ້າໄປໃນ CI ຂອງທ່ານ pipeline ເພື່ອສະແກນຫາຈຸດອ່ອນ ແລະ ຕົວຊີ້ບອກການພິມຜິດ.
- ສຸຂະອະນາໄມ Lockfile: ປິ່ນປົວ package-lock.json ເປັນລະຫັດ. ກວດສອບມັນໃນລະຫວ່າງ pull requests, ໂດຍສະເພາະເມື່ອ dependencies ຖືກອັບເດດ ຫຼື ເພີ່ມເຂົ້າມາ.
- ອັດຕະໂນມັດ Pre-Commit ການກວດສອບ: ໃຊ້ pre-commit hooks ເພື່ອກວດສອບຄວາມຖືກຕ້ອງຂອງໄຟລ໌ລັອກຂອງທ່ານກ່ອນທີ່ມັນຈະຮອດການຄວບຄຸມເວີຊັນ.
package-lock.json ເປັນເປົ້າໝາຍທີ່ມີມູນຄ່າສູງໃນການໂຈມຕີການພິມຜິດ npm. ການພິມຜິດຄ້າຍຄືກັບ ປະຕິກິລິຍາ-ໂດມ or ໂລດາສ ໃຫ້ເສັ້ນທາງໂດຍກົງແກ່ຜູ້ໂຈມຕີເຂົ້າໄປໃນການສ້າງຂອງທ່ານ pipelineການລະມັດລະວັງກ່ຽວກັບເອກະສານນີ້ແມ່ນສິ່ງຈໍາເປັນສໍາລັບການຮັກສາຄວາມສົມບູນຂອງລະບົບຕ່ອງໂສ້ການສະໜອງ.
ສະນັ້ນ, ການພິມຜິດພຽງຄັ້ງດຽວສາມາດເຮັດໃຫ້ຜົນງານຂອງເຈົ້າລົ້ມໄດ້. ຢ່າປ່ອຍໃຫ້ມັນ!
ມີການພິມຜິດ package-lock.json ບໍ່ພຽງແຕ່ເປັນການຂຽນໂປຣແກຣມທີ່ບໍ່ລະມັດລະວັງເທົ່ານັ້ນ; ມັນເປັນເວັກເຕີໄພຂົ່ມຂູ່ທີ່ແທ້ຈິງສຳລັບການພິມຜິດ npm. ໄຟລ໌ນີ້ແມ່ນຕົວຮັກສາປະຕູ, ແລະຖ້າມັນຖືກໂຈມຕີ, ຂອງທ່ານ pipeline ກໍ່ຄືກັນ. ການແກ້ໄຂບໍ່ໄດ້ດຶງດູດຄວາມສົນໃຈ: ຊ້າລົງ, ກວດສອບໄຟລ໌ລັອກ, ກວດສອບອັດຕະໂນມັດ, ແລະ ຕິດຕາມການປ່ຽນແປງ. ແຕ່ມັນກໍ່ຄຸ້ມຄ່າ.
ເພື່ອຍົກລະດັບການປ້ອງກັນຂອງທ່ານ, ລອງພິຈາລະນາໃຊ້ເຄື່ອງມືຕ່າງໆເຊັ່ນ Xygeni, ເຊິ່ງຖືກອອກແບບມາເພື່ອກວດຫາການພິມຜິດ, ກວດສອບ JSON ລັອກແພັກເກດ ໄຟລ໌, ແລະ ປົກປ້ອງຄວາມສົມບູນຂອງແພັກເກດຕະຫຼອດທັງຊຸດຂອງທ່ານ CI/CD pipelineໃນຍຸກຂອງແຫຼ່ງເປີດ, ຄວາມໄວ້ວາງໃຈແມ່ນໄດ້ຮັບ ແລະ ໄດ້ຮັບການຢືນຢັນ.





