Güvenli Python kodlama: sık yapılan hatalar
Python projelerinde en sık görülen güvenlik hatalarını kendi lab uygulamanda bulur, nedenini anlar, düzeltir ve tekrarını testle engellersin.
Seviye 401 · 21 ders · 24 pratik lab
Dersler
Enjeksiyon ve kod çalıştırma
- Python uygulamasında tehdit modeli
- eval, exec ve güvenilmeyen girdi
- Komut enjeksiyonu: os.system ve shell=True
- SQL enjeksiyonu: f-string ile sorgu kurmak
- Şablon enjeksiyonu: Jinja2 ve format dizgileri
- Kısa görev: uygulamadaki üç enjeksiyonu kapat
Dosya, veri ve ağ
- Yol aşımı: kullanıcının verdiği dosya adı
- Güvensiz serileştirme: pickle, yaml, marshal
- XML dış varlıkları
- Sunucu taraflı istek sahteciliği ve URL doğrulama
- Geçici dosyalar ve yarış durumları
- Düzenli ifadeyle hizmet engelleme
- Kısa görev: dosya yükleme servisini güvenli hâle getir
Kriptografi, sırlar ve bağımlılıklar
- random ile secrets farkı
- Parola saklamak: hashlib yetmez, argon2 ve scrypt
- Kriptografi hataları: ECB, sabit anahtar, zamanlama
- Koddaki sırlar ve ortam yönetimi
- Tedarik zinciri: typosquatting, pip-audit, hash ile kurulum
- bandit ve semgrep ile otomatik tarama
- Kısa görev: kimlik doğrulama modülünü gözden geçir ve düzelt
Bitirme
- Bitirme görevi: bir uygulamanın tam güvenlik incelemesi ve düzeltme raporu
Pratik lablar
- Arşivi açmadan önce boyutunu denetlemek: Yüklenen zip dosyasını açmadan önce dosya sayısını ve bildirilen toplam boyutu sınırla; aşırı şişen arşivi reddeden denetimi yaz.
- Dosya adıyla gelen seçenek enjeksiyonunu kapatmak: Tire ile başlayan dosya adlarının komuta seçenek gibi geçtiği arşivleme sarmalayıcısını '--' ayırıcı ve ad doğrulamasıyla sertleştir, regresyon testi ekle.
- Hesap makinesindeki eval çağrısını kaldırmak: Kullanıcı ifadesini eval ile hesaplayan fonksiyonu ast tabanlı güvenli bir hesaplayıcıyla değiştir; ad ve çağrı içeren girdiler reddedilsin.
- Yedekleme komutunda kabuk enjeksiyonunu kapatmak: Dosya adını shell=True ile komuta ekleyen yedekleme fonksiyonunu argüman listesiyle yeniden yaz ve ; içeren adla test et.
- Giriş sorgusundaki SQL enjeksiyonunu düzeltmek: f-string ile kurulan giriş sorgusunu parametreli hale getir ve tırnaklı girdiyle girişin artık başarısız olduğunu testle göster.
- E-posta şablonunda şablon enjeksiyonunu kapatmak: Kullanıcı metnini şablon kaynağına katan kodu, metni yalnızca değişken olarak veren korumalı bir Jinja2 ortamıyla düzelt.
- str.format ile sızan ayarları kapatmak: Kullanıcının verdiği biçim dizgisiyle nesne özniteliklerine ulaşılabilen bildirim kodunu güvenli yer tutucularla yeniden yaz.
- İndirme uç noktasında dizin atlamayı engellemek: Dosya adını doğrudan yola ekleyen indirme fonksiyonunu resolve ve kök dizin denetimiyle düzelt.
- pickle ile saklanan oturumu JSON'a taşımak: Çerezden pickle yükleyen oturum kodunu imzalı JSON'a geçir; bozulmuş çerezler reddedilsin.
- XML içe aktarmada dış varlıkları kapatmak: Ürün içe aktarma fonksiyonunu dış varlık ve varlık genişlemesi içeren örneklere karşı defusedxml ile sağlamlaştır.
- Tahmin edilebilir geçici dosyayı düzeltmek: /tmp altında sabit adla dosya açan rapor kodunu tempfile ile güvenli oluşturma ve dar izinlerle yeniden yaz.
- Yüklenen dosyanın adını ve türünü doğrulamak: Yükleme işleyicisine boyut sınırı, sihirli bayt denetimi ve rastgele ad üretimi ekle; çift uzantılı dosya reddedilsin.
- Önizleme servisinde hedef adresi sınırlamak: Kullanıcının verdiği adrese istek atan önizleme fonksiyonuna şema ve izinli alan adı listesi denetimi ekle.
- İç ağ adreslerine yönlenen istekleri engellemek: Çözümlenen IP'yi denetleyerek yerel ve özel ağ adreslerine giden istekleri ve yönlendirmeyle atlatmayı engelle.
- E-posta doğrulamasındaki yavaş deseni değiştirmek: Uzun girdide takılan e-posta desenini uzunluk sınırı ve basit bir desenle değiştir; süre testi geçsin.
- Davet kodunu secrets ile üretmek: random ile üretilen davet kodlarını secrets ile değiştir ve karşılaştırmayı compare_digest ile yap.
- Parolaları scrypt ile saklamak: Tuzsuz MD5 kullanan parola modülünü scrypt, kullanıcı başına tuz ve parametreleri saklayan biçimle yeniden yaz.
- Koda gömülü anahtarı ve sabit IV'yi düzeltmek: Sabit anahtar ve IV ile şifreleyen modülü ortamdan anahtar alan ve her mesajda rastgele nonce kullanan kimlik doğrulamalı şifrelemeye geçir.
- Açıklı bağımlılıkları güncellemek: pip-audit'in bulduğu açıklı paketleri güvenli sürümlere yükselt ve testlerin hâlâ geçtiğini göster.
- Bağımlılıkları özetle sabitlemek: requirements dosyasını özetli hale getir, --require-hashes ile kur ve adı benzeyen sahte paketi listeden ayıkla.
- Kendi semgrep kuralını yazmak: Projede doğrulaması kapatılmış HTTP çağrılarını yakalayan bir semgrep kuralı yaz ve doğru çağrılarda yanlış alarm vermediğini sına.
- YAML içe aktarmada güvenli yükleyiciye geçmek: İçe aktarma kodundaki güvensiz YAML yüklemesini güvenli yükleyiciyle değiştir; nesne etiketi taşıyan belgeler reddedilsin, olağan belgeler aynen yüklensin.
- İstek gövdesinin boyutunu ve derinliğini sınırlamak: JSON kabul eden uç noktaya gövde boyutu, iç içe derinlik ve öğe sayısı sınırları ekle; sınırı aşan istekler ayrıştırılmadan anlaşılır bir hata koduyla reddedilsin.
- Yönlendirmelerde hedefi yeniden denetlemek: Önizleme servisinde otomatik yönlendirme izlemeyi kapat; her yönlendirme adımında hedef adresi izin listesine göre yeniden denetle ve adım sayısını sınırla.
Kurs hakkında
Python projelerinde en sık görülen güvenlik hatalarını kendi lab uygulamanda bulur, nedenini anlar, düzeltir ve tekrarını testle engellersin.
Ne öğreneceksin
- Enjeksiyon ve kod çalıştırma
- Dosya, veri ve ağ
- Kriptografi, sırlar ve bağımlılıklar
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde ve ona bağlı özel bir lab ağında geçer. Kurulum gerekmez.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.