requirements.txt: ឧបករណ៍ស្នូល ឬ ការគំរាមកំហែងដែលលាក់កំបាំង?
គម្រោង Python នីមួយៗមានវា។ រូបរាងស្លូតត្រង់នោះ requirements.txt ស្ថិតនៅជា root នៃ repo របស់អ្នក ឯកសារ pip install requirements.txt consumes គឺជាបញ្ជីនៃការពឹងផ្អែក ពិតណាស់ ប៉ុន្តែប្រសិនបើអ្នកមិនប្រយ័ត្ន វាក៏អាចជាទ្វារបើកចំហរមួយទៅកាន់ការបង្កើតដែលមិនស្ថិតស្ថេរ កញ្ចប់ងាយរងគ្រោះ និងបញ្ហាសុវត្ថិភាពធ្ងន់ធ្ងរផងដែរ។
នៅស្នូលរបស់វា, តម្រូវការ.txt។ គ្រប់គ្រងកញ្ចប់ភាគីទីបីដែលកម្មវិធីរបស់អ្នកទាញយក។ នៅពេលអ្នកដំណើរការ pip ដំឡើង -r requirements.txtកម្មវិធីគ្រប់គ្រងកញ្ចប់របស់ Python ដំឡើងរាល់ការពឹងផ្អែកដែលបានរាយបញ្ជី។ ប៉ុន្តែនេះជាចំណុចសំខាន់៖ ប្រសិនបើអ្នកមិនដាក់កូដកំណែពិតប្រាកដទេ អ្នក... ទុកចិត្ត PyPI ដើម្បីផ្តល់ជូនកំណែដែលមានសុវត្ថិភាព ឆបគ្នា និងមិនកែប្រែជានិច្ច រាល់ពេល។ នោះមិនមែនជារបៀបដែល AppSec ទំនើបដំណើរការទេ។
បើគ្មានការភ្ជាប់ទេ ការបង្កើតអាចខូច។ អ្វីដែលអាក្រក់ជាងនេះទៅទៀត កម្មវិធីរបស់អ្នកអាចស្រូបយកកញ្ចប់ព្យាបាទដោយមិនដឹងខ្លួន។ ការកំណត់កំណែបើកចំហ (ដប >=1.0, ឧទាហរណ៍) ឬការរឹតបន្តឹងកំណែរលុង (ឌីចាងហ្គោ~=៣.២) គឺជាដីមានជីជាតិសម្រាប់ការចាក់បញ្ចូលកូដដែលមិនមានសុវត្ថិភាព។ នេះជាមូលហេតុដែលការគ្រប់គ្រងឱ្យបានត្រឹមត្រូវ តម្រូវការ.txt។ គឺជាភារកិច្ចសន្តិសុខស្នូលមួយ។
កន្លែងដែល pip freeze និង pip install requirements.txt ការវិភាគ
បង្កកបំពង់ ងាយស្រួលប្រើ ប៉ុន្តែក៏មានគ្រោះថ្នាក់ផងដែរ នៅពេលប្រើប្រាស់ដោយមិនយល់ពីអ្វីដែលវាចាប់យក។ អ្នកអភិវឌ្ឍន៍ច្រើនតែបង្កើត តម្រូវការ.txt។ ការប្រើ pip freeze requirements.txtដោយរំពឹងថាវានឹងចាក់សោរបរិស្ថានរបស់ពួកគេ។ ប៉ុន្តែ freeze មិនផ្ទៀងផ្ទាត់សុវត្ថិភាព ឬប្រភពដើមនៃ dependencies ទេ។ វាគ្រាន់តែ dump អ្វីគ្រប់យ៉ាងដែលបានដំឡើងបច្ចុប្បន្ន រួមទាំងកញ្ចប់ transitive និងកញ្ចប់ដែលអាចហួសសម័យ។
ឥឡូវស្រមៃមើលមិត្តរួមក្រុម ឬ CI របស់អ្នក រត់ដោយងងឹតងងល់ pip ដំឡើង -r requirements.txtប្រសិនបើឯកសារនោះរួមបញ្ចូលឯកសារដែលលែងប្រើ ងាយរងគ្រោះ ឬសូម្បីតែ កញ្ចប់ដែលមានកំហុសវាយអក្សរអ្នកទើបតែបានធ្វើស្វ័យប្រវត្តិកម្មឧប្បត្តិហេតុសុវត្ថិភាពមួយ។
ឧទាហរណ៍រហ័ស៖
# Developer's freeze output
pip freeze > requirements.txt
boto3==1.24.20
requests==2.27.1
⚠️ ឧទាហរណ៍មិនមានសុវត្ថិភាព សូមកុំប្រើក្នុងផលិតកម្ម
ឥឡូវនេះ បន្ថែមវាទៅក្នុង CI របស់អ្នក pipeline:
- name: Install dependencies
run: pip install -r requirements.txt
អ្នកកំពុងជឿជាក់ថាបរិស្ថានអាចបង្កើតឡើងវិញបាន គ្មានអ្វីផ្លាស់ប្តូរនៅក្នុង PyPI ទេ ហើយថា រាល់ការពឹងផ្អែក នៅតែមានសុវត្ថិភាព។ នោះជាការសន្មត់ដ៏ធំមួយនៅពេលពឹងផ្អែកលើ pip freeze requirements.txt លំហូរការងារ។
ការគំរាមកំហែង AppSec ពិតប្រាកដ៖ ការវាយអក្សរខុស និងការភាន់ច្រឡំអំពីការពឹងផ្អែកនៅក្នុង requirements.txt
អ្នកវាយប្រហារចូលចិត្តប្រព័ន្ធអេកូឡូស៊ីប្រភពបើកចំហ។ ហេតុអ្វី? ដោយសារតែអ្នកអភិវឌ្ឍន៍ច្រើនតែពឹងផ្អែកលើលំនាំដើម និងការជឿទុកចិត្តដោយប្រយោល។ នេះជារបៀបដែលពួកគេវាយប្រហារដោយប្រើ តម្រូវការ.txt។:
- បន្លំ: ផ្ទុកឡើងកញ្ចប់ព្យាបាទដែលមានឈ្មោះដូចជា សំណើ ជំនួសអោយ សំណើតួអក្សរមួយត្រូវបានដកចេញ ហើយការបង្កើតរបស់អ្នកនឹងក្លាយជាកម្មសិទ្ធិ។
សំណើ # ⚠️ ឧទាហរណ៍បង្ហាញ មិនមែនជាកញ្ចប់ពិតប្រាកដសម្រាប់ដំឡើងទេ
- ភាពច្របូកច្របល់នៃការពឹងផ្អែកប្រសិនបើកញ្ចប់ខាងក្នុងរបស់អ្នកមិនត្រូវបានខ្ទាស់ ឬកំណត់វិសាលភាពជាឯកជនទេ អ្នកវាយប្រហារអាចបោះពុម្ពផ្សាយកំណែព្យាបាទទៅកាន់ PyPI ដែលមានឈ្មោះដូចគ្នា។ ប្រសិនបើ CI របស់អ្នកមិនផ្ទៀងផ្ទាត់ប្រភពទេ អ្នកនឹងដំឡើងកញ្ចប់របស់ពួកគេជំនួសឱ្យរបស់អ្នក។
ការវាយប្រហារទាំងពីរនេះ ទាញយកប្រយោជន៍ពីកង្វះនៃការភ្ជាប់ម្ជុល និងការគ្រប់គ្រងប្រភពយ៉ាងតឹងរ៉ឹងនៅក្នុង តម្រូវការ.txt។ប្រសិនបើរបស់អ្នក គ្រាន់តែនិយាយថា បណ្ណាល័យខាងក្នុងខ្លះហើយអ្នករត់ តម្រូវការដំឡើង pip.txt នៅក្នុង CI វាអាចនឹងទាញយកកញ្ចប់ខុសពីកន្លែងខុស។
ការធានាសុវត្ថិភាព requirements.txt នៅក្នុង CI/CD Pipelines ជាមួយ Hashes និងការ Pinning
នេះជារបៀបធ្វើឱ្យរឹង តម្រូវការ.txt។ ប្រឆាំងនឹងការគំរាមកំហែងក្នុងពិភពពិត៖
- ខ្ទាស់កំណែពិតប្រាកដ៖ ប្រើជានិច្ច == សម្រាប់កញ្ចប់នីមួយៗនៅក្នុងរបស់អ្នក តម្រូវការ.txt។គ្មានតួអក្សរជំនួស គ្មានជួរ។
- ការប្រើ –require-hashes: នេះធ្វើឱ្យ pip ដំឡើង -r requirements.txt ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវនៃកញ្ចប់ដែលបានទាញយកនីមួយៗ។
ឧទាហរណ៍ ៖
flask==2.2.5 \
--hash=sha256:
⚠️ ឧទាហរណ៍បង្ហាញ ជំនួសដោយហាសពិតប្រាកដនៅក្នុងគម្រោងជាក់ស្តែង
- ញែកសំណង់របស់អ្នកចេញពីគ្នា៖ តែងតែសាងសង់ក្នុងធុងស្អាត និងតិចតួចបំផុត។ កុំទុកចិត្តរូបភាពមូលដ្ឋានដោយងងឹតងងល់។
- ប្រើលិបិក្រម PyPI ឯកជន៖ បង្ហោះប្រូកស៊ី/ឃ្លាំងសម្ងាត់ផ្ទាល់ខ្លួនរបស់អ្នក ហើយចម្លងតែកញ្ចប់ដែលទុកចិត្តប៉ុណ្ណោះ។
អនុវត្តការស្កេនភាពអាស្រ័យ: រួមបញ្ចូលឧបករណ៍ដូចជា ការត្រួតពិនិត្យ pip ឬប្រើ SBOMការវិភាគផ្អែកលើរបស់អ្នក pipelines.
ឧទាហរណ៍នៃ GitHub Actions៖
- name: Secure install
run: pip install --require-hashes -r requirements.txt
⚠️ ការអប់រំ pipeline ឧទាហរណ៍ សម្របខ្លួនទៅនឹងបរិស្ថានរបស់អ្នក
ការដោះស្រាយយ៉ាងតឹងរ៉ឹង pip ដំឡើង -r requirements.txt in CI/CD គឺជាវិធីមួយក្នុងចំណោមវិធីងាយស្រួលបំផុតដើម្បីកាត់បន្ថយហានិភ័យប្រភពបើកចំហ។
ការបង្កើតឡើងវិញដែលអាចបង្កើតឡើងវិញបាន៖ រក្សាវាឱ្យមានស្ថេរភាពនៅទូទាំងបរិស្ថាន
ប្រសិនបើកម្មវិធីរបស់អ្នកដំណើរការក្នុងមូលដ្ឋាន ប៉ុន្តែបរាជ័យក្នុងដំណាក់កាល ឬការផលិត នោះភាពអាស្រ័យមិនស៊ីសង្វាក់គ្នានៅក្នុង តម្រូវការ.txt។ ជាជនសង្ស័យធម្មតា។ សូម្បីតែការរសាត់បាត់នៃកំណែតូចមួយក៏បង្កបញ្ហាធំៗដែរ។
ប្រើយុទ្ធសាស្ត្រទាំងនេះ៖
- pip-ឧបករណ៍: ប្រើ pip-compile ដើម្បីបង្កើត។ តម្រូវការ.txt។ ពីមួយ requirements.inវាដោះស្រាយភាពអាស្រ័យជាមួយនឹងការភ្ជាប់ត្រឹមត្រូវ។
- សញ្ញាសម្គាល់បរិស្ថានសម្រាប់កញ្ចប់ជាក់លាក់នៃប្រព័ន្ធប្រតិបត្តិការ ឬការពឹងផ្អែកជាក់លាក់នៃកំណែ Python សូមប្រើសញ្ញាសម្គាល់ដូចជា ប្រព័ន្ធ_វេទិកា == 'លីនុច'.
- ការ caching Docker: នៅក្នុង CI សូមរក្សាទុកស្រទាប់ Docker របស់អ្នកបន្ទាប់ពីដំឡើង dependency ពី តម្រូវការ.txt។ ដើម្បីកាត់បន្ថយភាពប្រែប្រួលនៃការសាងសង់។
ឧទាហរណ៍ជាមួយ pip-tools៖
# requirements.in
flask
# Compile
pip-compile requirements.in
⚠️ ឧទាហរណ៍បង្ហាញ លទ្ធផលជាក់ស្តែងអាស្រ័យលើបរិស្ថានរបស់អ្នក
លទ្ធផលគឺជាចំណុចទាញដែលខ្ទាស់យ៉ាងពេញលេញ តម្រូវការ.txt។.
ឧបករណ៍ដូចជា បង្កកបំពង់នៅពេលផ្សំជាមួយ pip ដំឡើង -r requirements.txt ក្នុងអំឡុងពេលសាងសង់ តម្រូវឱ្យមានវិន័យ និងការការពារបន្ថែម។
សេចក្តីសន្និដ្ឋាន៖ ចាក់សោរតម្រូវការរបស់អ្នកដោយទំនុកចិត្ត
ការគ្រប់គ្រងមិនត្រឹមត្រូវ តម្រូវការ.txt។ មិនមែនគ្រាន់តែជាការអនុវត្តមិនល្អនោះទេ។ វាជាហានិភ័យសុវត្ថិភាពសកម្មមួយ។ ការភ្ជាប់ឯកសារមិនច្បាស់លាស់ ការដំឡើងដែលមិនបានផ្ទៀងផ្ទាត់ និងការជឿទុកចិត្តដោយងងឹតងងល់នៅក្នុងបញ្ជីឈ្មោះបើកចំហ គឺជារបៀបដែលអ្នកវាយប្រហារកេងប្រវ័ញ្ចអ្នក CI/CD pipelineទាំងនេះមិនមែនជាគុណវិបត្តិខាងទ្រឹស្តីទេ ពួកវាត្រូវបានគេកេងប្រវ័ញ្ចជារៀងរាល់ថ្ងៃ។
ការដាក់ចំណង Dependency Pinning គឺមានច្រើនជាងការអនុវត្តល្អបំផុត។ វាជាខ្សែការពារដំបូងរបស់អ្នកប្រឆាំងនឹងការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់នៅក្នុង Python។ ផ្សំវាជាមួយ –require-hashes, សាងសង់អ៊ីសូឡង់ និងឧបករណ៍ដែលអាចផលិតឡើងវិញបានដូចជា pip-ឧបករណ៍ហើយអ្នកទទួលបាន a pipeline វាពិបាកជាងក្នុងការសម្របសម្រួល។
ថាតើអ្នកកំពុងប្រើ តម្រូវការដំឡើង pip.txt នៅក្នុងស្រុក ឬនៅក្នុង CI តែងតែផ្ទៀងផ្ទាត់ និងតាមដានអ្វីដែលចូលទៅក្នុងការសាងសង់របស់អ្នក។ ឧបករណ៍ដូចជា ស៊ីហ្គេនី ផ្តល់នូវភាពមើលឃើញ ការអនុវត្តគោលនយោបាយ និងការត្រួតពិនិត្យដោយស្វ័យប្រវត្តិដែលចាក់សោរខ្សែសង្វាក់ផ្គត់ផ្គង់ Python របស់អ្នកពី pip freeze requirements.txt ពេញមួយដំណើរការផលិត។







