ហេតុអ្វីបានជា Package-Lock.JSON មានសារៈសំខាន់សម្រាប់អ្នកអភិវឌ្ឍន៍
នៅក្នុងគម្រោង Node.js កញ្ចប់ package-lock.json មិនមែនគ្រាន់តែជាឯកសារភ្ជាប់ជាមួយកញ្ចប់ package.json នោះទេ។ វាចាក់សោកំណែពិតប្រាកដនៃអថេរដែលបានដំឡើងនីមួយៗ រួមទាំងកំណែដែលដាក់ក្នុងស្រទាប់ខាងក្នុងផងដែរ។ ឯកសារនេះធានានូវភាពអាចបង្កើតឡើងវិញបាននៅទូទាំងបរិស្ថាន និងការពារការផ្លាស់ប្តូរដែលមិននឹកស្មានដល់នៅពេលដែលកំណែកញ្ចប់ថ្មីត្រូវបានបោះពុម្ពផ្សាយ។ បើគ្មានវាទេ អ្នកអភិវឌ្ឍន៍នឹងប្រថុយនឹងឥរិយាបថផ្សេងៗគ្នានៅក្នុងដំណាក់កាលអភិវឌ្ឍន៍ ការធ្វើតេស្ត និងផលិតកម្មដោយសារតែការផ្លាស់ប្តូរដើមឈើអថេរ ហើយថែមទាំងបើកទ្វារឱ្យមានការវាយអក្សរ npm ប្រសិនបើកំហុសរអិលចូលទៅក្នុងឯកសារចាក់សោ។
នៅពេលប្រើប្រាស់បានត្រឹមត្រូវ package-lock.json ធានាដល់មនុស្សគ្រប់គ្នានៅក្នុងក្រុមរបស់អ្នក និង CI/CD pipeline ដំឡើង កូដដូចគ្នា។ ប៉ុន្តែកំហុសវាយអក្សរស្ងាត់ៗមួយនៅក្នុងឯកសារនេះអាចបញ្ជូនបន្តកម្មវិធីរបស់អ្នកទៅក្នុងអន្ទាក់ភ្លាមៗ។
តើ Typos នាំឱ្យមានការវាយប្រហារ NPM Typosquatting យ៉ាងដូចម្តេច?
ចូរនិយាយថាកញ្ចប់ស្របច្បាប់មួយនៅក្នុង កញ្ចប់ ត្រូវបានសរសេរបានត្រឹមត្រូវ ដូចជា lodashប៉ុន្តែធាតុដែលបានវាយខុសនៅក្នុង កញ្ចប់-lock.json, ដូចជា ឡូដាសនៅតែអាចលួចចូលទៅក្នុងដើមឈើអាស្រ័យរបស់អ្នក ជាពិសេសប្រសិនបើមាននរណាម្នាក់កែសម្រួលវាដោយដៃ ឬឧបករណ៍មានបញ្ហាបានសរសេរវាឡើង។
អ្នកវាយប្រហារពឹងផ្អែកលើកំហុសវាយអក្សរទាំងនេះដោយប្រើបច្ចេកទេសមួយហៅថា npm typosquatting។ ពួកគេផ្ទុកឡើងកញ្ចប់ព្យាបាទដែលមានឈ្មោះស្រដៀងនឹងកញ្ចប់ពេញនិយម (ឧ. ប្រតិកម្ម-ដូម, បញ្ចេញមតិ, មុំ) ប្រសិនបើ JSON ចាក់សោកញ្ចប់របស់អ្នករួមបញ្ចូលកំហុសវាយអក្សរបែបនោះ npm នឹងដំឡើងកញ្ចប់របស់អ្នកវាយប្រហារដោយគ្មានសំណួរ ពីព្រោះអ្នកបានប្រាប់វាយ៉ាងច្បាស់។
ការវាយអក្សរខុសប្រភេទ npm មិនមែនគ្រាន់តែជាទ្រឹស្តីនោះទេ។ ការវាយប្រហារវាយអក្សរខុសប្រភេទ npm ក្នុងពិភពពិតបានក្លាយជាចំណងជើងព័ត៌មាន។ ឧទាហរណ៍មួយក្នុងចំណោមឧទាហរណ៍ទាំងនោះគឺ ការសម្របសម្រួលកញ្ចប់ Coa, ដែលជាកន្លែងដែល កូដព្យាបាទ ត្រូវបានដឹកជញ្ជូនតាមរយៈការអាប់ដេតកញ្ចប់ដែលទុកចិត្ត។ ភាពខុសគ្នាគឺថា ជាមួយនឹងកំហុស npm typosquatting អ្នកអភិវឌ្ឍន៍អញ្ជើញអ្នកវាយប្រហារចូលដោយចៃដន្យដោយវាយខុសភាពអាស្រ័យ។
ហានិភ័យពិតប្រាកដនៅក្នុង CI/CD Pipelines បណ្តាលមកពីកំហុស json ចាក់សោកញ្ចប់
សម័យទំនើប CI/CD pipelineការព្យាបាល កញ្ចប់-lock.json ជាប្រភពនៃសេចក្តីពិត។ ក្នុងអំឡុងពេលសាងសង់ ឬការដាក់ពង្រាយ pipeline ការរត់ npm ស៊ី or ល្ងាចដំឡើងដែលទាំងពីរអានចេញពីឯកសារចាក់សោ។ ប្រសិនបើមានកំហុសវាយអក្សរ កញ្ចប់ព្យាបាទនឹងត្រូវបានទាញចូលដោយស្វ័យប្រវត្តិ។ គ្មានការជូនដំណឹង។ គ្មានការជំរុញទេ។
នោះមានន័យថា កំហុសវាយអក្សរដែលបានណែនាំក្នុងអំឡុងពេលអភិវឌ្ឍន៍ក្នុងស្រុកអាចរីករាលដាលដោយស្ងៀមស្ងាត់រហូតដល់ដំណាក់កាល ឬសូម្បីតែផលិតកម្ម។ អ្នកវាយប្រហារអាចបង្កប់ឧបករណ៍លួចអត្តសញ្ញាណ អ្នកជីកយករ៉ែគ្រីបតូ ឬទ្វារខាងក្រោយដែលធ្វើឱ្យសកម្មក្រោយពេលដាក់ពង្រាយ។ ទាំងអស់នេះអាចកើតឡើងដោយមិនចាំបាច់បង្កឱ្យមានឧបករណ៍សុវត្ថិភាពទេ ពីព្រោះការពឹងផ្អែកត្រូវបាន "ប្រកាស" នៅក្នុង កញ្ចប់-lock.json.
នេះមិនមែនគ្រាន់តែជាកំហុសនោះទេ។ វាជាការបំពានខ្សែសង្វាក់ផ្គត់ផ្គង់ដែលកំពុងរង់ចាំកើតឡើង ហើយការវាយអក្សរ npm ធ្វើឱ្យវាក្លាយជាការគំរាមកំហែងពិតប្រាកដ។
ការរកឃើញ និងការទប់ស្កាត់កំហុសវាយអក្សរ Dependency Typos ដើម្បីកាត់បន្ថយកំហុសវាយអក្សរ NPM Typosquatting
កំហុសវាយអក្សរ កញ្ចប់-lock.json ពួកវាមើលមិនឃើញទេ លុះត្រាតែអ្នកស្វែងរកពួកវាយ៉ាងសកម្ម។ នេះជារបៀបចាប់ផ្តើម៖
- ការវិភាគឋិតិវន្ត: ឧបករណ៍មួយចំនួនមិនចាប់បញ្ហាទាំងនេះទេ ប៉ុន្តែម៉ាស៊ីនស្កេនភាពអាស្រ័យដែលឧទ្ទិសដល់អាចធ្វើបាន។ រួមបញ្ចូលឧបករណ៍ដែលស្កេនរកលំនាំវាយអក្សរ npm ហើយពិនិត្យមើលរបស់អ្នក កញ្ចប់-lock.json ចំពោះភាពមិនស៊ីសង្វាក់គ្នា។
- ឯកសារចាក់សោ Linting: ប្រើច្បាប់ linting ផ្ទាល់ខ្លួន ឬកម្មវិធីជំនួយដើម្បីផ្ទៀងផ្ទាត់ កញ្ចប់-lock.json ធាតុទល់នឹងបញ្ជីសុវត្ថិភាពដែលគេស្គាល់។
- ការពិនិត្យកូដការវាយតម្លៃពីមិត្តភក្ដិគឺមានសារៈសំខាន់ណាស់។ ភាពខុសគ្នារបស់ Lockfile មានសំឡេងរំខាន ប៉ុន្តែត្រូវបង្រៀនក្រុមរបស់អ្នកឱ្យពិនិត្យមើលវាដូចជាកូដដែរ។
- ការត្រួតពិនិត្យដោយស្វ័យប្រវត្តិ៖ រៀបចំ pre-commit hooks ឬការងារ CI ដើម្បីបដិសេធធាតុដែលមិនបានផ្ទៀងផ្ទាត់ ឬគួរឱ្យសង្ស័យនៅក្នុង កញ្ចប់-lock.json.
នេះជាឧទាហរណ៍ជាក់ស្តែងមួយដោយប្រើ GitHub Actions៖
នេះមិនមែនជារឿងងាយស្រួលនោះទេ ប៉ុន្តែវាបង្ហាញពីឈ្មោះកញ្ចប់ចម្លែកៗ ដែលអាចបង្ហាញពីកំហុសក្នុងការវាយអក្សរលើ npm។
ការធានាសុវត្ថិភាពគម្រោង Node.js ប្រឆាំងនឹងការវាយប្រហារ NPM Typosquatting និង Supply Chain
ដើម្បីចាក់សោកម្មវិធី Node.js របស់អ្នក និងការពារការវាយប្រហារតាមរយៈ កញ្ចប់-lock.json:
- ការដាក់កូដកំណែតឹងរ៉ឹងជៀសវាងជួរកំណែ (^, ~) នៅ កញ្ចប់ចាក់សោការពឹងផ្អែកទាំងអស់ទៅកំណែពិតប្រាកដ ដើម្បីកាត់បន្ថយការអាប់ដេត និងការរសាត់ដែលមិនបានរំពឹងទុក។
- ការផ្ទៀងផ្ទាត់ហត្ថលេខាប្រើប្រាស់ឧបករណ៍ដូចជា Sigstore និងលក្ខណៈពិសេសនៃប្រភពដើមរបស់ npm ដើម្បីផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ និងប្រភពដើមនៃកញ្ចប់។
- សំណង់ដែលមិនអាចផ្លាស់ប្តូរបាន៖ ប្រើជានិច្ច npm ស៊ី ដែលមានការផ្ទៀងផ្ទាត់ កញ្ចប់-lock.json ឯកសារនៅក្នុងបរិយាកាសផលិតកម្ម។ កុំពឹងផ្អែកលើ ល្ងាចដំឡើង ក្នុងអំឡុងពេលដាក់ពង្រាយ ព្រោះវាអាចណែនាំការផ្លាស់ប្តូរដែលមិនទាន់បានត្រួតពិនិត្យ។
- តាមដានបន្ត៖ ប្រើដំណោះស្រាយត្រួតពិនិត្យដែលជូនដំណឹងអ្នកនៅពេល៖
- កញ្ចប់ថ្មីលេចឡើងនៅក្នុងរបស់អ្នក កញ្ចប់-lock.json
- កញ្ចប់ដែលមានស្រាប់ផ្លាស់ប្តូរដោយមិននឹកស្មានដល់
- លំនាំគួរឱ្យសង្ស័យ (ឧទាហរណ៍ ឈ្មោះកញ្ចប់ដូចជា បញ្ចេញមតិ, ប្រតិកម្ម-ដូម, មុំ) ត្រូវបានរកឃើញ
- ឧបករណ៍ត្រួតពិនិត្យភាពអាស្រ័យ: រួមបញ្ចូលឧបករណ៍ស្វ័យប្រវត្តិដូចជា npm សវនកម្ម, សេនីកឬ ស៊ីហ្គេនី ចូលទៅក្នុង CI របស់អ្នក pipeline ដើម្បីស្កេនរកចំណុចខ្សោយ និងសូចនាករកំហុសវាយអក្សរ។
- អនាម័យឯកសារចាក់សោ៖ ព្យាបាល កញ្ចប់-lock.json ជាកូដ។ ពិនិត្យមើលវាក្នុងអំឡុងពេល pull requestsជាពិសេសនៅពេលដែលភាពអាស្រ័យត្រូវបានធ្វើបច្ចុប្បន្នភាព ឬបន្ថែម។
- ស្វ័យប្រវត្តិ Pre-Commit ពិនិត្យ: ប្រើ pre-commit hooks ដើម្បីផ្ទៀងផ្ទាត់ឯកសារចាក់សោរបស់អ្នក មុនពេលវាឈានដល់ការគ្រប់គ្រងកំណែ។
កញ្ចប់-lock.json គឺជាគោលដៅតម្លៃខ្ពស់នៅក្នុងការវាយប្រហារវាយអក្សរ npm។ កំហុសវាយអក្សរដូចជា ប្រតិកម្ម-ដូម or ឡូដាស ផ្តល់ឱ្យអ្នកវាយប្រហារនូវផ្លូវផ្ទាល់ចូលទៅក្នុងការសាងសង់របស់អ្នក pipelineការប្រុងប្រយ័ត្នជុំវិញឯកសារនេះគឺចាំបាច់សម្រាប់ការរក្សាបាននូវសុចរិតភាពនៃខ្សែសង្វាក់ផ្គត់ផ្គង់។
ដូច្នេះ កំហុសវាយអក្សរតែមួយអាចធ្វើឱ្យសំណង់របស់អ្នកលិច។ កុំឱ្យវាកើតឡើង!
កំហុសវាយអក្សរ កញ្ចប់-lock.json មិនមែនគ្រាន់តែជាការសរសេរកូដមិនស្អាតនោះទេ។ វាជាវ៉ិចទ័រគំរាមកំហែងពិតប្រាកដសម្រាប់ការវាយអក្សរ npm typosquatting។ ឯកសារនេះគឺជាអ្នកយាមទ្វារ ហើយប្រសិនបើវាត្រូវបានលួចចូល របស់អ្នក pipeline ក៏ដូចគ្នាដែរ។ ការជួសជុលនេះមិនទាក់ទាញទេ៖ បន្ថយល្បឿន ពិនិត្យមើលឯកសារចាក់សោ ធ្វើឱ្យការត្រួតពិនិត្យដោយស្វ័យប្រវត្តិ និងតាមដានការផ្លាស់ប្តូរ។ ប៉ុន្តែវាមានតម្លៃណាស់។
ដើម្បីបង្កើនកម្រិតការពាររបស់អ្នក សូមពិចារណាប្រើឧបករណ៍ដូចជា Xygeni ដែលត្រូវបានរចនាឡើងដើម្បីរកឃើញការវាយអក្សរខុស ត្រួតពិនិត្យ សោកញ្ចប់ JSON ឯកសារ និងការពារភាពសុចរិតនៃកញ្ចប់ពេញមួយរបស់អ្នក CI/CD pipelineនៅក្នុងយុគសម័យនៃប្រភពបើកចំហ ទំនុកចិត្តត្រូវបានទទួលបាន និងផ្ទៀងផ្ទាត់។





