កំហុសមួយតួអក្សរដែលបានបញ្ជូនមេរោគ
វាបានចាប់ផ្តើមជាមួយនឹងកំហុសវាយអក្សរ។ នៅកន្លែងណាមួយនៅក្នុងការប្រញាប់ប្រញាល់យ៉ាងខ្លាំងនៃការជំរុញមុខងារ និងការរួមបញ្ចូលគ្នានៃ 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 ទំនើប អ្នកត្រូវផ្ទៀងផ្ទាត់អ្វីៗគ្រប់យ៉ាង ឬប្រថុយនឹងអ្វីៗគ្រប់យ៉ាង។







