package.json - package-lock.json - ការវាយអក្សរខុស

កំហុសវាយអក្សរនៅក្នុង package.json អនុញ្ញាតឱ្យកញ្ចប់ដែលមើលទៅដូចគ្នាសម្របសម្រួល Pipeline

កំហុសមួយតួអក្សរដែលបានបញ្ជូនមេរោគ

វាបានចាប់ផ្តើមជាមួយនឹងកំហុសវាយអក្សរ។ នៅកន្លែងណាមួយនៅក្នុងការប្រញាប់ប្រញាល់យ៉ាងខ្លាំងនៃការជំរុញមុខងារ និងការរួមបញ្ចូលគ្នានៃ PR មាននរណាម្នាក់បានវាយបញ្ចូល @utils_core ជំនួស​អោយ @utils-core ចូលទៅក្នុង កញ្ចប់ការ​រអិល​តួអក្សរ​តែមួយ​នោះ​មិន​បាន​បោះ​កំហុស​ទេ។ ផ្ទុយទៅវិញ វា​បាន​ទាញ​ចូល​ដោយ​ស្ងាត់ៗ កញ្ចប់ដែលមើលទៅដូចជាមានគំនិតអាក្រក់ក្នុងអំឡុងពេលបន្ទាប់ CI/CD ដំណើរការ ដោយទាញយកអត្ថប្រយោជន៍ពីទំនុកចិត្តលើកំណែដែលបានខ្ទាស់ និងស្វ័យប្រវត្តិកម្ម។ សូមស្វាគមន៍មកកាន់ពិភពនៃ typosquatting ក្នុងប្រភពបើកចំហ។

ការវាយអក្សរខុស៖ វ៉ិចទ័រវាយប្រហារដែលរីកចម្រើនលើកំហុសរបស់មនុស្ស

ការវាយអក្សរខុស (typosquatting) គឺពិតជាអ្វីដែលវាស្តាប់ទៅដូចជា៖ ជនអាក្រក់ចុះឈ្មោះកញ្ចប់ដែលមានឈ្មោះស្ទើរតែដូចគ្នាបេះបិទទៅនឹងកញ្ចប់ស្របច្បាប់។ នៅក្នុងបរិយាកាសដែលមានល្បឿនលឿន វាដំណើរការដោយសារតែអ្នកអភិវឌ្ឍន៍ជឿជាក់ថា កញ្ចប់ និង កញ្ចប់-lock.json ឆ្លុះបញ្ចាំងពីអ្វីដែលពួកគេរំពឹងទុក។ តួអក្សរមួយត្រូវបានដកចេញ? វាប្រហែលជាមើលមិនឃើញនៅក្នុងភាពខុសគ្នានៃ PR។

NPM មានប្រវត្តិនៃការកេងប្រវ័ញ្ចតាមរយៈការវាយអក្សរខុស។ កញ្ចប់ដូចជា crossenv ជំនួស​អោយ ឆ្លង​បរិស្ថាន or ស្ទ្រីមព្រឹត្តិការណ៍ ទ្វារក្រោយបានបង្ហាញរួចហើយពីប្រសិទ្ធភាពនៃកម្មវិធីស្រដៀងគ្នាទាំងនេះ។ កញ្ចប់ក្លែងក្លាយទាំងនេះច្រើនតែឆ្លងកាត់ការវាយតម្លៃ ដោយសារតែវាមើលទៅត្រឹមត្រូវ ហើយមិនបង្កកំហុសពេលដំណើរការភ្លាមៗ។

អន្ទាក់ទូទៅរួមមាន៖

  • សហសញ្ញាទល់នឹងសញ្ញាគូសក្រោម៖ lអូដាស-ស្នូល vs lodash_core
  • ពហុវចនៈ៖ request vs សំណើ
  • តួអក្សរជំនួស៖ រហ័ស ជំនួស​អោយ បង្ហាញ

កន្លែងដែល package-lock.json ក្លាយជាចំណុចខ្វាក់

អ្នកអភិវឌ្ឍន៍បានជួសជុលកំហុសវាយអក្សររបស់ពួកគេ។ ឬពួកគេគិតដូច្នេះ។ ប៉ុន្តែឥឡូវនេះ កញ្ចប់-lock.json បានចាក់សោកញ្ចប់របស់អ្នកវាយប្រហាររួចហើយ។ ហើយនេះជាកន្លែងដែលហានិភ័យពិតប្រាកដលាក់ខ្លួន។

មិន​ដូច កញ្ចប់ដែលត្រូវបានកែសម្រួលដោយដៃ និងទទួលបានការត្រួតពិនិត្យយ៉ាងម៉ត់ចត់ជាងមុន កញ្ចប់-lock.json ត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិដោយ NPMជាលទ្ធផល វាត្រូវបានចាត់ទុកដូចជាពិធីផ្លូវការមួយ រំលង ឬគ្រាន់តែរំលងបន្តិចបន្តួចប៉ុណ្ណោះ។ pull request ការវាយតម្លៃ។ វាមិនមែនជារឿងចម្លែកទេដែលក្រុមនានាសម្គាល់វាថា "មានសំឡេងរំខានពេក" ឬទុកចិត្តវាដោយប្រយោលដោយមិនបានមើលឱ្យស៊ីជម្រៅ។

អ្នកវាយប្រហារដឹងរឿងនេះ។ ពួកគេពឹងផ្អែកលើវា។ នៅពេលមួយ កញ្ចប់ព្យាបាទ ត្រូវបានយោង ដោយសារកំហុសវាយអក្សរ package.json, package-lock.json កត់ត្រាកំណែដែលបានដោះស្រាយ។ ទោះបីជាកំហុសវាយអក្សរត្រូវបានកែតម្រូវនៅពេលក្រោយក៏ដោយ ការបញ្ចូលព្យាបាទអាចនៅតែបន្តកើតមាន លុះត្រាតែឯកសារចាក់សោត្រូវបានបង្កើតឡើងវិញយ៉ាងច្បាស់លាស់។

អ្វីដែលធ្វើឲ្យស្ថានការណ៍កាន់តែអាក្រក់ទៅទៀតនោះគឺ ការភ្ជាប់កំណែ (version pinning) ដែលត្រូវបានគេសន្មត់ថាធានាបាននូវភាពស៊ីសង្វាក់គ្នា (summary) អាចបង្កផលវិបាកត្រឡប់មកវិញ។ អ្នកវាយប្រហារអាចធ្វើកំណែ (version) កញ្ចប់ក្លែងក្លាយរបស់ពួកគេដូចគ្នាបេះបិទទៅនឹងកញ្ចប់ស្របច្បាប់។ ប្រសិនបើ CI/CD ប្រសិនបើប្រព័ន្ធទុកចិត្តលើកំណែដែលបានខ្ទាស់ដោយងងឹតងងល់ វានឹងមិនរកឃើញថាវាកំពុងដំឡើងកញ្ចប់ដែលមានលេខកំណែដែលគេស្គាល់ល្អ ប៉ុន្តែមកពីប្រភពដែលមានគំនិតអាក្រក់ផ្សេងនោះទេ។

ការអត់ធ្មត់ស្ងៀមស្ងាត់នេះហើយ ដែលធ្វើឲ្យ កញ្ចប់-lock.json គ្រោះថ្នាក់ណាស់។ វាធានានូវការសាងសង់ដែលមានការកំណត់ទុកជាមុន មែនហើយ ប៉ុន្តែវាក៏ធានាថាកញ្ចប់មិនល្អនឹងនៅជាប់នឹងវាដែរ លុះត្រាតែវាត្រូវបានចាប់ និងសម្អាតដោយដៃ។

CI/CDកន្លែងដែលមេរោគវាយប្រហារ – package.json

នៅក្នុងធម្មតា CI/CD pipelineកញ្ចប់​ព្យាបាទ​មិនចាំបាច់រង់ចាំរហូតដល់ពេលដំណើរការទេ។ វាត្រូវបានដោះស្រាយ និងបង្កឡើងលឿនជាងនេះទៅទៀតនៅក្នុងលំហូរ៖

ដំណោះស្រាយភាពអាស្រ័យ
ចំពោះ pipeline ទាញយកកំណែអាស្រ័យពិតប្រាកដពី package-lock.jsonដែលឥឡូវនេះរួមបញ្ចូលទាំង កញ្ចប់​ដែល​មាន​កំហុស​វាយអក្សរ​ដោយសារ​កំហុស​វាយអក្សរ package.json។

ដំណាក់កាលដំឡើង
ក្នុងអំឡុងពេល npm ci ការ dependencies ទាំងអស់ត្រូវបានដំឡើង រួមទាំងមេរោគព្យាបាទផងដែរ។ គ្មានការព្រមាន គ្មាន prompts គ្រាន់តែដំឡើងដោយស្ងៀមស្ងាត់។

ការប្រតិបត្តិស្គ្រីបក្រោយការដំឡើង
កញ្ចប់ lookalike រួមមានស្គ្រីបក្រោយការដំឡើងដែលដំណើរការដោយស្វ័យប្រវត្តិនៅពេលដែលការដំឡើងបានបញ្ចប់។ នេះជាកន្លែងដែលការសម្របសម្រួលកើតឡើង។

ឧទាហរណ៍​នៃ​កូដ​ក្លែងក្លាយ៖

				
					if (installation_phase_active) {
runHiddenPayload()
}
				
			

ការពិពណ៌នាអំពីកូដក្លែងក្លាយ៖
ក្នុងអំឡុងពេលដំណាក់កាលដំឡើង ប្រសិនបើទំពក់វដ្តជីវិតក្រោយការដំឡើងមានវត្តមាន កញ្ចប់ក្លែងក្លាយនឹងបង្កឱ្យមានតក្កវិជ្ជាលាក់កំបាំងរបស់វា — ជាញឹកញាប់មុនពេលការបង្កើត ឬការធ្វើតេស្តដំណើរការ។ នេះអាចពាក់ព័ន្ធនឹងការធ្វើសំណើខាងក្រៅ ការចាក់បញ្ចូលទ្វារក្រោយ ឬសកម្មភាពដែលគ្មានការអនុញ្ញាតផ្សេងទៀត។

⚠️ ការព្រមាន៖ pseudocode នេះគឺសម្រាប់គោលបំណងបង្ហាញតែប៉ុណ្ណោះ ហើយមិនត្រូវប្រើក្នុងបរិស្ថានពិតទេ។

គ្មានការជូនដំណឹងណាមួយត្រូវបានបង្កឡើងទេ។ គ្មានអ្វីបរាជ័យទេ។ បរិស្ថានត្រូវបានគំរាមកំហែងរួចហើយ មុនពេលដែលអ្នក pipeline សូម្បីតែឈានដល់ដំណាក់កាលសាកល្បងក៏ដោយ។

រកឃើញភាពខុសគ្នាមុនពេលវាយឺតពេល

កំហុសទូទៅមួយ៖ ការសន្មត់ កញ្ចប់ ប្រាប់រឿងរ៉ាវទាំងមូល។ វាមិនដូច្នោះទេ។ អំណាចពិតប្រាកដស្ថិតនៅក្នុងការរួមបញ្ចូលគ្នានៃ package.json + package-lock.json ។

នេះជាអ្វីដែលត្រូវរកមើល៖

  • តើ កញ្ចប់-lock.json រួមបញ្ចូលកញ្ចប់ដែលមិននឹកស្មានដល់?
  • តើ​មាន​ dependencies ណាមួយ​ដែល​មាន​ប្រភព​មក​ពី​ registry ដែល​មិន​ស្គាល់ ឬ​មាន​វិសាលភាព​ចម្លែក​ដែរ​ឬទេ?
  • តើលេខកំណែជាក់លាក់ពេក ឬមិនត្រឹមត្រូវ?

ប្រើឧបករណ៍ CLI ដូចជា៖

  • npm សវនកម្ម ដើម្បីសម្គាល់បញ្ហាដែលគេស្គាល់
  • npm ls ដើម្បីមើលដើមឈើអាស្រ័យពេញលេញ
  • ខុស ដើម្បីប្រៀបធៀបកំណែរវាង កញ្ចប់ និង កញ្ចប់-lock.json

ធ្វើឱ្យអ្នករឹងមាំ Pipeline: ការការពារដែលមានប្រសិទ្ធភាព

ដើម្បីការពារប្រឆាំងនឹងការវាយអក្សរខុស៖

  • អនុវត្តការរឹតបន្តឹងវិសាលភាពនៅក្នុង package.json។
  • បន្ថែម​ការ​បញ្ចូល​មុន hooks ដើម្បី​ធ្វើ​ឲ្យ​មាន​ភាព​ត្រឹមត្រូវ​នៃ​ការ​ពឹងផ្អែក (dependencies)។
  • ការប្រើ npm ស៊ី ដើម្បីជៀសវាងការរសាត់បាត់នៃកំណែដោយអចេតនា។
  • ស្កេនជាប្រចាំ កញ្ចប់-lock.json ចំពោះភាពមិនប្រក្រតី។

ហើយសំខាន់បំផុត៖ ដោះស្រាយធាតុដែលមិនបានផ្ទៀងផ្ទាត់នៅក្នុង កញ្ចប់-lock.json ជាហានិភ័យដែលអាចកើតមាន។ រាល់ commit គួរតែត្រូវបានចាត់ទុកថាជាចំណុចត្រួតពិនិត្យខ្សែសង្វាក់ផ្គត់ផ្គង់។

ការរកឃើញដោយស្វ័យប្រវត្តិ៖ របៀបដែលឧបករណ៍ដូចជា Xygeni ជួយ

ទោះបីជាមិនមែនជារឿងងាយស្រួលក៏ដោយ ឧបករណ៍ស្វ័យប្រវត្តិដូចជា ស៊ីហ្គេនី ដើរតួនាទីយ៉ាងសំខាន់ក្នុងការកាត់បន្ថយកត្តាកំហុសរបស់មនុស្សដែលបណ្តាលមកពីការវាយអក្សរខុស។ Xygeni រួមបញ្ចូលដោយផ្ទាល់ទៅក្នុងលំហូរការងារ DevOps របស់អ្នក ដោយបន្ថែមស្រទាប់នៃការការពារពេលវេលាជាក់ស្តែងប្រឆាំងនឹងការលួចចូលការពឹងផ្អែកមុនពេលវាឈានដល់ការអនុវត្ត។

នេះជារបៀបដែល Xygeni ជួយ៖

  • ការរកឃើញឈ្មោះកញ្ចប់គួរឱ្យសង្ស័យ៖
    ប្រើប្រាស់​វិធីសាស្ត្រ​ឆ្លាតវៃ​ដើម្បី​រក​ឃើញ​លំនាំ​វាយអក្សរ​ខុស​ក្នុង កញ្ចប់កំពុងស្វែងរកបំរែបំរួលតិចតួចនៅក្នុងឈ្មោះកញ្ចប់ដែលគេស្គាល់យ៉ាងច្បាស់ (ដូចជាការបន្ថែមសញ្ញាគូសក្រោម ការប្តូរទីតាំង ឬការប្តូរអក្សរ)។
  • ការផ្ទៀងផ្ទាត់ហាសដែលមិនស្គាល់៖
    ប្រៀបធៀបហាសនៃការពឹងផ្អែកនីមួយៗនៅក្នុង កញ្ចប់-lock.json ប្រឆាំងនឹងមូលដ្ឋានទិន្នន័យនៃវត្ថុបុរាណដែលគេស្គាល់ល្អពីបញ្ជីឈ្មោះដែលទុកចិត្ត។ ទោះបីជាឈ្មោះកញ្ចប់ និងកំណែមើលទៅល្អក៏ដោយ ភាពមិនស៊ីគ្នានៃហាសនឹងលើកឡើងនូវទង់ក្រហម។
  • ការទប់ស្កាត់មុនពេលសាងសង់៖
    ស្ទាក់ចាប់ និងរារាំងការដំឡើងកញ្ចប់ដែលមិនទាន់បានផ្ទៀងផ្ទាត់ ឬគួរឱ្យសង្ស័យណាមួយ មុនពេលពួកវាឈានដល់ដំណាក់កាលដំឡើង ឬក្រោយការដំឡើងនៅក្នុង CI/CD pipeline.
  • ការវិភាគក្រាហ្វភាពអាស្រ័យ៖
    ត្រួតពិនិត្យជាបន្តបន្ទាប់នូវដើមឈើអាស្រ័យពេញលេញសម្រាប់ការប៉ុនប៉ងវាយអក្សរដោយប្រយោល ឬការពឹងផ្អែកអន្តរកាលដែលមានគំនិតអាក្រក់។
  • ការជូនដំណឹង និងការរាយការណ៍៖
    ផ្តល់នូវការជូនដំណឹងលម្អិត និងអាចអនុវត្តបាន ដោយបង្ហាញពីអ្វីដែលត្រូវបានដាក់ទង់ ហេតុអ្វី និងកន្លែងដែលវាមកពីក្នុងខ្សែសង្វាក់អាស្រ័យ។

នៅពេលដែលប្រព័ន្ធអេកូឡូស៊ីកញ្ចប់កាន់តែស្មុគស្មាញ ឧបករណ៍ដូចជា Xygeni កាន់តែមានសារៈសំខាន់។ ការពិនិត្យដោយដៃមិនមានទំហំធំជាមួយនឹងការរីករាលដាលនៃការពឹងផ្អែក ឬការធ្វើម្តងទៀតយ៉ាងឆាប់រហ័សនោះទេ។ Xygeni ចូលមកធ្វើស្វ័យប្រវត្តិកម្មការត្រួតពិនិត្យសំខាន់ៗទំនើបៗ។ pipelineតម្រូវការរបស់ បិទគម្លាតរវាងការជឿទុកចិត្ត និងការផ្ទៀងផ្ទាត់។

តួអង្គមួយ។ ផលវិបាកពិតប្រាកដ។

នេះមិនមែនជារឿងកម្រនិងអសកម្មទេ ថ្ងៃសូន្យវាជាកំហុសវាយអក្សរ។ តួអក្សរមួយខុសកន្លែងនៅក្នុង កញ្ចប់, បានពង្រឹងដោយស្ងាត់ៗដោយ កញ្ចប់-lock.jsonហើយមេរោគត្រូវបានដឹកជញ្ជូនដោយស្វ័យប្រវត្តិក្នុងអំឡុងពេលទម្លាប់មួយ CI/CD រត់។

នោះជាគ្រោះថ្នាក់ពិតប្រាកដនៃការវាយអក្សរខុស៖ វាមិនត្រូវការភាពស្មុគស្មាញទេ។ វាកេងចំណេញពីល្បឿន ការជឿទុកចិត្ត និងស្វ័យប្រវត្តិកម្ម។ ការសម្របសម្រួលនេះអាចត្រូវបានរារាំង ប្រសិនបើមានការគ្រប់គ្រងត្រឹមត្រូវ៖

  • ការស្កេនដោយស្វ័យប្រវត្តិ ដើម្បីចាប់ឈ្មោះកញ្ចប់ និងកំណែគួរឱ្យសង្ស័យមុនពេលដំឡើង។
  • ការត្រួតពិនិត្យឯកសារចាក់សោ ដើម្បីរកឃើញធាតុដែលមិនទាន់បានពិនិត្យ ឬមិនបានរំពឹងទុកនៅក្នុង កញ្ចប់-lock.json.
  • ការវិភាគ​ផ្ទៀងផ្ទាត់​ឈ្មោះ ដើម្បីសម្គាល់ការផ្គូផ្គងជិតដល់កញ្ចប់ដែលគួរឱ្យទុកចិត្ត។

តួអក្សរមួយគឺគ្រប់គ្រាន់ហើយ។ ការត្រួតពិនិត្យត្រឹមត្រូវនឹងអាចបញ្ឈប់វាបានមុនពេលវាប៉ះអ្នក។ pipelineទំនុកចិត្តមិនគ្រប់គ្រាន់ទេ។ នៅក្នុង DevSecOps ទំនើប អ្នកត្រូវផ្ទៀងផ្ទាត់អ្វីៗគ្រប់យ៉ាង ឬប្រថុយនឹងអ្វីៗគ្រប់យ៉ាង។

ឧបករណ៍វិភាគសមាសភាពកម្មវិធី sca
ផ្តល់អាទិភាព ដោះស្រាយ និងធានាសុវត្ថិភាពហានិភ័យផ្នែកទន់របស់អ្នក
ទទួលបានគណនីឥតគិតថ្លៃរបស់អ្នក។
មិនតម្រូវឱ្យមានកាតឥណទានទេ។

ធានាសុវត្ថិភាពនៃការអភិវឌ្ឍន៍ និងការដឹកជញ្ជូនកម្មវិធីរបស់អ្នក

ជាមួយឈុតផលិតផល Xygeni