Güvenli Kodlama Kontrol Kartları
Güvenli kodlama eğitimi bölümlerinin en kritik yap / yapma kurallarını tek kart boyutunda özetleyen yazdırılabilir şablonlar.
Kart 1: Güvenli Kodlama Temelleri
Bunu Yap
- ✓ Güvenliği tasarım aşamasında planla, sonraya bırakma
- ✓ Her kod inceleme isteğinde (PR) güvenlik odaklı inceleme yap
- ✓ Geliştiricilere düzenli güvenli kodlama eğitimi ver
- ✓ SBOM oluştur ve güncel tut
- ✓ Saltzer-Schroeder prensiplerini uygula (en az yetki, derinlemesine savunma)
Bunu Yapma
- ✗ Güvenliği sadece test aşamasına bırak
- ✗ Geliştiriciye eğitim vermeden "güvenli yaz" de
- ✗ Karmaşık mimariyi "daha güvenli" san
- ✗ Güvenlik belirsizliğine (obscurity) güven
Kart 2: Enjeksiyon Saldırıları ve Savunma
Bunu Yap
- ✓ SQL sorgularında parametreli sorgu (parameterized query) kullan
- ✓ Komut çalıştırmada subprocess.run(shell=False) kullan
- ✓ Template engine otomatik escaping açık olsun
- ✓ Her formda CSRF token ve SameSite cookie kullan
- ✓ Girdi doğrulamayı beyaz liste (whitelist) ile yap
Bunu Yapma
- ✗ SQL sorgusunda string birleştirme veya f-string kullan
- ✗ os.system() veya shell=True kullan
- ✗ innerHTML ile kullanıcı verisini yaz
- ✗ eval() veya exec() ile kullanıcı verisi çalıştır
Kart 3: Kimlik Doğrulama ve Oturum Yönetimi
Bunu Yap
- ✓ Parolaları bcrypt (rounds=12+) veya Argon2 ile hash'le
- ✓ Oturum ID'leri secrets.token_urlsafe ile üret
- ✓ Cookie'lerde HttpOnly + Secure + SameSite bayrakları açık
- ✓ JWT'de algorithms parametresi zorunlu, alg:none kabul edilmesin
- ✓ MFA için TOTP kullan, rate limiting açık olsun
Bunu Yapma
- ✗ MD5 veya SHA-256 ile parola hash'le
- ✗ Girişte yeni oturum ID üretmeyi unut (session fixation)
- ✗ JWT payload'a hassas veri (parola, kart) koy
- ✗ SMS tabanlı MFA kullan (SIM swap açığı)
Kart 4: Erişim Kontrolü ve API Güvenliği
Bunu Yap
- ✓ Her endpoint için yetki kontrolü (authorization) yap
- ✓ IDOR koruması: kullanıcı sadece kendi kaynaklarına erişsin
- ✓ Dosya yollarında Path.resolve() + taban dizin kontrolü yap
- ✓ CORS'ta sadece güvenilir origin listesine izin ver
- ✓ Hassas endpoint'larda sıkı rate limiting uygula
Bunu Yapma
- ✗ Kimlik doğrulama yaptım diye yetki kontrolünü atla
- ✗ Access-Control-Allow-Origin: * + credentials: true kullan
- ✗ Kullanıcı girdisini doğrudan dosya yolunda kullan
- ✗ Artan sayısal ID kullan (UUID tercih et)
Kart 5: Kriptografi ve Secret Yönetimi
Bunu Yap
- ✓ AES-256-GCM veya Fernet ile veri şifrele
- ✓ Secret'ları environment variable veya Vault'ta sakla
- ✓ .env dosyasını .gitignore'a ekle
- ✓ Anahtar rotasyon politikası tanımla (örn. 90 günde bir)
- ✓ Kriptografik rastgelelik için secrets modülü kullan
Bunu Yapma
- ✗ MD5, SHA-1, DES, RC4 veya ECB mod kullan
- ✗ Koda secret (API key, parola) göm
- ✗ Python random modülünü kriptografi için kullan
- ✗ Şifreleme anahtarını veritabanında sakla
Kart 6: Güvenlik Testi ve DevSecOps
Bunu Yap
- ✓ SAST (Bandit) her PR'da otomatik çalışsın
- ✓ SCA (pip-audit) bağımlılıkları CVE ile kontrol etsin
- ✓ Docker image'ları Trivy ile tara
- ✓ Container'da non-root kullanıcı kullan
- ✓ Her build'de SBOM üret ve sakla
Bunu Yapma
- ✗ GitHub Actions'ı @main veya @master ile pinle (SHA kullan)
- ✗ Dockerfile'da .env dosyasını image'a kopyala
- ✗ Latest tag kullan (sürüm sabit değil)
- ✗ Pipeline'ı sadece report modda bırak (enforced'a geç)
Baskı ve Kullanım
- Her kart A4 boyutunda (210 x 297 mm) yazdırılabilir
- Çift yüzlü renkli baskı önerilir (yeşil: yap, kırmızı: yapma)
- Geliştirici ekip toplantılarında ve kod incelemelerinde dağıt
- Laminate ederek dayanıklı hale getirebilirsin
- Geliştirici masasında görünür yerde asılı tut
İlgili Bölümler
- Farkındalık Kontrol Kartları: bireysel güvenlik ve KVKK için yap/yapma kuralları
- Kurumsal Kontrol Kartları: risk yönetimi ve tehdit modelleme için yap/yapma kuralları
- Eğitimler: kurumsal ve bireysel güvenlik eğitimleri