Güvenli Kodlama Kontrol Kartları

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ç)

Kart 7: Diğer Kritik Web Zafiyetleri

Bunu Yap
  • SSRF: URL girdilerinde scheme + domain + IP kontrolü
  • AWS IMDSv2 zorunlu (metadata servisi token gerektirir)
  • Mass assignment: whitelist/DTO ile alan seçimi
  • Asla pickle/güvenilmeyen deserialize yok
  • Production'da DEBUG kapalı
  • Frontend'de bypass (v-html, dangerouslySetInnerHTML) yok
  • CORS: wildcard değil, specific origin + credentials
Bunu Yapma
  • User input pickle/eval/exec ile işleniyor
  • Framework bypass (v-html vb.) kullanılıyor
  • Production DEBUG=True kalmış
  • CORS wildcard "*" set edilmiş
  • Yönetim panelleri internete açık

Kart 8: Bulut Güvenliği

Bunu Yap
  • AWS root / Azure Global Admin MFA zorunlu
  • IAM policy'ler least privilege, Access Analyzer çalışıyor
  • S3 / Blob / GCS bucket'lar private, Block Public Access açık
  • AWS IMDSv2 zorunlu (metadata servisi token'lı)
  • CloudTrail / Cloud Audit Logging açık
  • CSPM aracı (Prowler, ScoutSuite veya ticari) çeyreklik
  • Veri at-rest şifreli (S3 SSE-KMS, EBS, RDS)
  • Secret'lar Secrets Manager / Key Vault'ta, env var'da değil
Bunu Yapma
  • IAM policy Action: *, Resource: *
  • Cloud credentials koda/env'ye hard-coded
  • S3 bucket public (static hosting değilse)
  • Logging kapalı (maliyet gerekçesiyle)
  • 0.0.0.0/0 Security Group tüm portlar

Kart 9: Mobil Uygulama Güvenliği

Bunu Yap
  • Certificate pinning (iOS + Android) aktif, backup pin ile
  • Tüm secret'lar Keychain / Keystore'da, hardcoded yok
  • Jailbreak / root detection (finansal apps)
  • FLAG_SECURE / isSecureTextEntry hassas ekranlarda
  • ProGuard / R8 obfuscation aktif
  • OWASP MASVS L1 audit (L2 finansal için)
  • App Attest (iOS) / Play Integrity (Android) entegre
  • Sadece HTTPS, plain HTTP kapatılmış
Bunu Yapma
  • Hardcoded API key / parola koda gömülü
  • TrustManager tüm sertifikaları kabul ediyor
  • Plain SharedPreferences / UserDefaults ile token sakla
  • Production'da log'da token / parola
  • Exported component'ler (gerek olmadıkça dışa açık)

Kart 10: Tedarik Zinciri Güvenliği

Bunu Yap
  • Lock file commit ediliyor (package-lock.json, poetry.lock, go.sum)
  • npm ci / pip install --require-hashes ile reproducible install
  • SBOM üretiliyor (CycloneDX/SPDX)
  • Dependency vulnerability taraması CI'da (Trivy/Grype)
  • GitHub Actions action'ları commit SHA ile pin'li
  • Cosign ile container/binary imzalanıyor
  • SLSA Level 2-3 provenance üretiliyor
  • Private registry veya proxy kullanılıyor
Bunu Yapma
  • npm install (lock'a sadık değil)
  • Action'lar @v3 gibi tag ile (SHA değil)
  • Transitive dependency'ler görünmüyor (SBOM yok)
  • latest tag kullan
  • Bildiğiniz popüler paketlerin bakımcılarını hiç doğrulamadınız

Kart 11: LLM ve AI Güvenliği

Bunu Yap
  • System/user/tool prompt rolleri net ayrılmış
  • Output validation: LLM yanıtı eyleme dökülmeden doğrulanıyor
  • Tool'lar en az ayrıcalıkla, spesifik fonksiyonlar
  • Guardrail (NeMo/Lakera) prompt injection için
  • RAG'da user-level ACL (yetkisiz belge gelmesin)
  • İnsan-in-the-loop: kritik kararlarda onay
  • API key'ler secret manager'da, rotasyonlu
  • Audit log'lar SIEM'de, anomali tespiti
Bunu Yapma
  • LLM DB'ye direkt yazma/silme yetkili
  • User input doğrudan prompt'a yapıştırılıyor
  • Sistem promptu "asla ifşa etme" güvene alınmış
  • Fine-tuning verisi denetlenmeden kullanıldı
  • Kritik kararda AI'ya körü körüne güven

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