requirements.txt - pip install requirements.txt - pip freeze requirements.txt

Bahaya Tersembunyi dari Requirements.txt: Bagaimana Penguncian Ketergantungan Dapat Menyelamatkan Anda

requirements.txt: Alat Inti atau Ancaman Tersembunyi?

Setiap proyek Python memilikinya. Yang tampak polos itu. requirements.txt Berlokasi di direktori utama repositori Anda, file tersebut pip install requirements.txt `consumes` memang merupakan daftar dependensi, tetapi jika Anda tidak hati-hati, itu juga bisa menjadi pintu terbuka lebar untuk build yang tidak stabil, paket yang rentan, dan masalah keamanan yang serius.

Pada intinya, requirement.txt Mengontrol paket pihak ketiga apa yang diunduh aplikasi Anda. Saat Anda menjalankannya pip install -r requirements.txtManajer paket Python menginstal setiap dependensi yang tercantum. Tapi masalahnya adalah: jika Anda tidak menentukan versi yang tepat, Anda akan mempercayai PyPI Untuk selalu menyajikan versi yang aman, kompatibel, dan tidak dimodifikasi, setiap saat. Bukan seperti itu cara kerja AppSec modern.

Tanpa penguncian (pinning), build dapat gagal. Lebih buruk lagi, aplikasi Anda mungkin tanpa sadar menyerap paket berbahaya. Pengelolaan versi terbuka (open-ended versioning)Labu >=1.0, misalnya) atau batasan versi yang longgar (django~=3.2) merupakan lahan subur untuk menyuntikkan kode yang tidak aman. Inilah mengapa pengelolaan yang tepat sangat penting. requirement.txt merupakan tugas keamanan inti.

Di mana pip freeze dan pip install requirements.txt Penjelasan

pembekuan pip Hal ini praktis, tetapi juga berbahaya jika digunakan tanpa memahami apa yang ditangkapnya. Pengembang sering kali menghasilkan requirement.txt menggunakan pip freeze requirements.txt, dengan harapan hal itu akan mengamankan lingkungan mereka. Tetapi freeze tidak memvalidasi keamanan atau asal usul dependensi; ia hanya menghapus semua yang saat ini terinstal, termasuk paket transisi dan yang berpotensi usang.

Sekarang bayangkan seorang rekan tim, atau CI Anda, menjalankan perintah secara membabi buta. pip install -r requirements.txtJika file tersebut berisi kode yang sudah usang, rentan, atau bahkan paket yang diambil karena kesalahan ketikAnda baru saja mengotomatiskan insiden keamanan.

Contoh cepat:

# Developer's freeze output pip freeze > requirements.txt boto3==1.24.20 requests==2.27.1 

⚠️ Contoh yang tidak aman, jangan digunakan dalam produksi.

Sekarang tambahkan ini ke CI Anda. pipeline:

- name: Install dependencies run: pip install -r requirements.txt

Anda percaya bahwa lingkungan tersebut dapat direproduksi, bahwa tidak ada yang berubah di PyPI, dan bahwa setiap ketergantungan masih aman. Itu adalah asumsi yang sangat besar ketika mengandalkan pip freeze requirements.txt alur kerja.

Ancaman Keamanan Aplikasi yang Sesungguhnya: Typosquatting & Kebingungan Ketergantungan dalam requirements.txt

Para penyerang menyukai ekosistem sumber terbuka. Mengapa? Karena pengembang sering mengandalkan pengaturan default dan kepercayaan implisit. Berikut cara mereka menyerang menggunakan requirement.txt:

  • typosquattingMengunggah paket berbahaya dengan nama seperti permintaan alih-alih permintaanSatu karakter saja yang salah dan build Anda akan kalah.

permintaan # ⚠️ Contoh ilustratif, bukan paket sungguhan untuk diinstal

  • Kebingungan KetergantunganJika paket internal Anda tidak dikunci atau memiliki cakupan privat, penyerang dapat mempublikasikan versi berbahaya ke PyPI dengan nama yang sama. Jika CI Anda tidak memvalidasi sumber, Anda akan menginstal paket mereka, bukan paket Anda.

Kedua serangan tersebut memanfaatkan kurangnya penguncian ketat dan kontrol sumber pada requirement.txtJika milikmu hanya mengatakan beberapa pustaka internal, dan kamu berlari pip install requirements.txt Dalam CI, mungkin saja mengambil paket yang salah dari tempat yang salah.

Mengamankan requirements.txt di CI/CD Pipelinedengan Hash dan Pinning

Berikut cara mengeraskannya requirement.txt menghadapi ancaman di dunia nyata:

  • Pin versi persisnya: Selalu gunakan == untuk setiap paket di dalam requirement.txtTidak ada karakter pengganti, tidak ada rentang.
  • penggunaan –membutuhkan-hashIni membuat pip install -r requirements.txt Verifikasi integritas setiap paket yang diunduh.

Contoh:

flask==2.2.5 \ --hash=sha256:<actual_hash_here> 

⚠️ Contoh demonstratif, ganti dengan hash sebenarnya di proyek nyata.

  • Pisahkan bangunan AndaSelalu bangun dalam kontainer yang bersih dan minimalis. Jangan pernah mempercayai image dasar secara memb盲盲.
  • Gunakan indeks PyPI pribadi: Hosting proxy/cache Anda sendiri dan hanya melakukan mirroring pada paket-paket tepercaya.

Jalankan pemindaian dependensiIntegrasikan alat-alat seperti: pip-audit atau penggunaan SBOManalisis berbasis di Anda pipelines.

Contoh cuplikan GitHub Actions:

- name: Secure install   run: pip install --require-hashes -r requirements.txt

⚠️ Pendidikan pipeline Contohnya, beradaptasi dengan lingkungan Anda.

Penanganan ketat terhadap pip install -r requirements.txt in CI/CD adalah salah satu cara termudah untuk mengurangi risiko open-source.

Pembuatan Versi yang Dapat Direproduksi: Menjaganya Tetap Stabil di Berbagai Lingkungan

Jika aplikasi Anda berfungsi secara lokal tetapi gagal di lingkungan staging atau produksi, kemungkinan penyebabnya adalah dependensi yang tidak konsisten. requirement.txt adalah tersangka utama. Bahkan pergeseran kecil pun dapat menyebabkan masalah besar.

Gunakan strategi berikut:

  • alat pip: Gunakan kompilasi pip untuk menghasilkan requirement.txt dari persyaratan.inIni menyelesaikan dependensi dengan pengikatan yang tepat.
  • Penanda lingkunganUntuk paket khusus OS atau dependensi khusus versi Python, gunakan penanda seperti platform_system == 'Linux'.
  • Caching DockerDalam CI, lakukan caching pada layer Docker Anda setelah menginstal dependensi dari requirement.txt untuk mengurangi variabilitas pembangunan.

Contoh dengan pip-tools:

# requirements.in flask  # Compile pip-compile requirements.in 

⚠️ Contoh demonstratif, hasil sebenarnya bergantung pada lingkungan Anda.

Outputnya adalah pin yang terpasang sepenuhnya. requirement.txt.

Alat-alat seperti pembekuan pip, bila digabungkan dengan pip install -r requirements.txt Selama proses pembangunan, diperlukan disiplin dan pengamanan tambahan.

Kesimpulan: Menetapkan Persyaratan Anda dengan Percaya Diri

Salah kelola requirement.txt Ini bukan hanya praktik yang buruk; ini adalah risiko keamanan aktif. Pengaturan pin yang longgar, instalasi yang tidak terverifikasi, dan kepercayaan buta pada registri terbuka adalah cara penyerang mengeksploitasi sistem Anda. CI/CD pipelineIni bukan sekadar kelemahan teoretis; kelemahan ini dieksploitasi setiap hari.

Pengikatan dependensi lebih dari sekadar praktik terbaik. Ini adalah garis pertahanan pertama Anda terhadap serangan rantai pasokan di Python. Gabungkan itu dengan –membutuhkan-hash, membangun isolasi, dan alat yang dapat direproduksi seperti alat pip, dan Anda mendapatkan a pipeline Itu lebih sulit untuk dikompromikan.

Apakah Anda menggunakan pip install requirements.txt Baik secara lokal maupun di CI, selalu verifikasi dan pantau apa yang masuk ke dalam build Anda. Alat-alat seperti... Xygeni Memberikan visibilitas, penegakan kebijakan, dan pemeriksaan otomatis yang mengamankan rantai pasokan Python Anda dari pip freeze requirements.txt sepanjang proses produksi.

perangkat lunak analisis komposisi sca
Prioritaskan, perbaiki, dan amankan risiko perangkat lunak Anda.
Dapatkan Akun Gratis Anda.
Tidak perlu kartu kredit.

Amankan Pengembangan dan Pengiriman Perangkat Lunak Anda

dengan Rangkaian Produk Xygeni