Selamlar,
LiteLLM 1.107.0 olayından sonra birçok ekip aynı soruyu soruyor: "pip install litellm" gibi yüzen sürümler üretimde nasıl kilitlenir? Cevabın büyük kısmı pip'in resmi Secure installs rehberinde: hash-checking mode ve yalnızca ikili paket (binary) kurulum. Bu yazıda kendi labınızda adım adım uygulayabileceğiniz bir sabitleme düzeni kuruyoruz.
Konuda anlatılacaklar
- Hash-checking mode ne yapar, ne yapmaz?
- Gereksinim dosyasına hash nasıl eklenir?
- --only-binary :all: ile kaynak dağıtımları kapatmak
- Sık yapılan hatalar
Hash-checking mode
pip varsayılan olarak uzak müdahaleye karşı kontrol yapmaz ve dağıtımdaki kodu çalıştırır. Hash-checking mode açıldığında requirements.txt içine gömdüğünüz yerel hash'ler hem uzaktan oynama hem ağ sorunlarına karşı koruma sağlar. pip belgelerine göre bu bir "hepsi ya da hiç" düzenidir: herhangi bir gereksinime --hash eklemek modu global olarak etkinleştirir.
Ek kısıtlar:
- Tüm gereksinimlerin hash'i olmalı (kısmi hashed dosya, hash'siz bir bağımlılıktan kötü kod sokulmasına izin verir).
- Tüm bağımlılıkların da hash'i olmalı.
- Gereksinimler sabitlenmeli (==, URL veya dosya yolu); aksi halde yeni bir sürüm yayınlandığında hash uyuşmazlığı sürprizi yaşarsınız.
Lab: hash'li requirements üretmek
# Temiz bir venv
python3 -m venv /tmp/secpip && source /tmp/secpip/bin/activate
python -m pip install -U pip
# Once surumleri sabitle
cat > /tmp/reqs.in <<'E'
requests==2.32.3
urllib3==2.2.3
certifi==2026.10.19
E
# Hash'leri bootstrap etmek icin --require-hashes ile deneme;
# pip, indirdigi paketlerin hash'ini gosterir
python -m pip download -r /tmp/reqs.in -d /tmp/wheels
python -m pip hash /tmp/wheels/*.whlElde ettiğiniz hash'leri requirements.txt'ye şöyle yazarsınız:
requests==2.32.3 \
--hash=sha256:<requests_hash>
urllib3==2.2.3 \
--hash=sha256:<urllib3_hash>
certifi==2026.10.19 \
--hash=sha256:<certifi_hash>python -m pip install --require-hashes --only-binary :all: -r requirements.txtLiteLLM bağlamı
LiteLLM olayında zararlı, wheel içindeki .data/purelib/ yoluyla site-packages'e düşmüştü. Hash sabitleme, beklediğiniz wheel'in bayt-bayt aynısı gelmesini sağlar; farklı bir wheel aynı sürüm numarasıyla gelse bile hash uyuşmazlığı kurulumunu durdurur. "latest" Docker etiketinden kaçınmak da aynı disiplinin konteyner karşılığıdır: imajı digest ile çekin.
Sık hatalar
- Yalnızca üst düzey paketi sabitleyip bağımlılıkları açık bırakmak
- python setup.py install / easy_install kullanmak (pip'in kontrollerini baypas eder)
- Hash'i PyPI URL fragment'ındaki uzak hash'e güvenmek; pip bunu indirme bütünlüğü için kullanır ama yerel --require-hashes talebini karşılamaz
- Geliştirme ortamında hash kullanıp CI/CD'de unutmak
Sizin CI pipeline'ınızda --require-hashes var mı? Yoksa engel nedir?
Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.
Kaynaklar