Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kodunuzu Daha Güvenli Hale Getirmenin 5 Temel Adımı 🔐

websterx

Üye
Katılım
14 Mart 2026
Mesajlar
8
Kodunuzu Daha Güvenli Hale Getirmenin 5 Temel Adımı 🔐

Selam dostlar! Bugün, projelerimizde sıklıkla gözden kaçırdığımız ama aslında her şeyden önce gelmesi gereken bir konuya değineceğiz: Kod Güvenliği. Hepimiz özellikleri yetiştirmeye, kodu çalışır hale getirmeye odaklanıyoruz. Ancak, güvenlik açıklarıyla dolu bir uygulama, temeli çürük bir bina gibidir. İşte size, başlangıç seviyesinden ileri seviyeye kadar her projede uygulayabileceğiniz 5 pratik adım. 🛡️

1. Girdilerinize Asla Güvenmeyin: Doğrulama ve Temizleme
Kullanıcıdan, bir dosyadan veya bir API'den gelen her veri, potansiyel bir tehdittir. Bu yüzden ilk kuralımız: "Tüm girdiler şüphelidir!"
  • Doğrulama (Validation): Gelen verinin formatının, uzunluğunun, tipinin beklentinize uygun olduğundan emin olun. E-posta adresi mi bekliyorsunuz? Gerçekten e-posta formatında mı?
  • Temizleme (Sanitization): Veriyi kullanmadan önce, zararlı olabilecek kısımlarından arındırın. Özellikle veritabanı sorgularında (SQL Injection) veya HTML çıktısında (XSS - Cross-Site Scripting) kullanılacak veriler için bu hayati önem taşır.

2. Hassas Bilgileri Asla Düz Metin Olarak Saklamayın
Kullanıcı şifreleri, API anahtarları, bağlantı dizeleri... Bunlar asla kod içine sabitlenmemeli veya düz metin olarak kaydedilmemeli.
  • Şifreler için Hashleme: Şifreleri veritabanında asla düz metin olarak saklamayın. Bunun yerine bcrypt, Argon2 gibi güçlü hash algoritmaları kullanın. Hash, geri döndürülemez bir şifrelemedir.
  • Gizli Anahtarlar için Ortam Değişkenleri: API anahtarı gibi bilgileri kodunuzdan ayırın ve `.env` dosyaları veya işletim sistemi ortam değişkenleri gibi güvenli yerlerde tutun.

3. Minimum Ayrıcalık Prensibini Benimseyin
Bu prensip, bir kullanıcının, prosesin veya sistemin, görevini yerine getirmesi için gereken minimum yetkiye sahip olması gerektiğini söyler.
  • Veritabanı kullanıcınız sadece `SELECT` ve `INSERT` yapması gerekiyorsa, ona `DELETE` veya `DROP` yetkisi vermeyin.
  • Uygulamanızın çalıştığı kullanıcı hesabı, sistemde süper yönetici haklarına sahip olmamalı.
Bu, olası bir saldırının zararını büyük ölçüde sınırlar. ⚙️

4. Bağımlılıklarınızı Güncel Tutun
Modern yazılım geliştirme, üçüncü parti kütüphaneler (bağımlılıklar) üzerine kurulu. Ancak bu kütüphanelerde keşfedilen güvenlik açıkları (CVE - Common Vulnerabilities and Exposures), sizin uygulamanızı da savunmasız hale getirebilir.
  • Düzenli olarak `npm audit` (JavaScript), `pip-audit` (Python), `dotnet list package --vulnerable` (C#) gibi komutlarla projenizi tarayın.
  • Mümkün olduğunca bağımlılık sayınızı az tutun ve güncellemeleri düzenli uygulayın.

5. Hata Mesajlarını Akıllıca Yönetin
Hata mesajları kullanıcı için yol gösterici olmalı, ancak saldırgan için bilgi sızdırmamalı.
  • Ayrıntılı Hataları Kullanıcıya Göstermeyin: Kullanıcıya "Bir hata oluştu, lütfen daha sonra tekrar deneyin" gibi genel bir mesaj gösterin. Ancak, ayrıntılı hata loglarını (hatanın tam metni, stack trace, zaman damgası) sadece geliştiricilerin/güvenlik ekiplerinin erişebileceği güvenli bir yere (log dosyası, log yönetim sistemi) kaydedin.
  • Bir veritabanı hatasında, veritabanı şema yapınızı, tablo isimlerinizi veya sorgularınızı içeren mesajlar asla tarayıcıda görünmemeli.

Uygulamanızın güvenliğini sağlamak, sonradan eklenen bir özellik değil, geliştirme sürecinin her aşamasına dahil edilmesi gereken bir düşünce tarzıdır. Bu adımlar, sağlam bir başlangıç yapmanızı sağlayacak. 🚀

**Peki ya siz?** Projelerinizde güvenliği nasıl ele alıyorsunuz? En sık karşılaştığınız güvenlik endişeleri neler? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!
 
Websterx abi, bu konu tam benlik değil ama yazılım güvenliği herkesin meselesi bence. Senin de dediğin gibi, temeli çürük bina gibi oluyor iş. Özellikle şu bağımlılıkları güncel tutma maddesi çok önemli. Biz havacılıkta da "checklist" vardır ya, yazılımda da bu adımlar bir nevi güvenlik checklist'i işte. Eksik bir nokta bırakmamak lazım.

En kritik gördüğüm nokta, hata mesajları. Bazen debug için her şeyi basıyoruz ama production'da o detaylar tam istihbarat bilgisi gibi. Rakip takımın oyun kurulumunu ele geçirmek gibi bir şey saldırgan için. Genel bir mesaj, loglama ise ayrı... Kesinlikle katılıyorum.
 
Güvenlik konusunda söylediklerine tamamen katılıyorum. Özellikle hata mesajları yönetimi, gözden kaçırılan ama kritik bir detay. Saldırganlar için bir sistemin iç yapısını anlamak, zayıf noktaları bulmak için en değerli veri kaynağı bazen bu ayrıntılı hatalar oluyor. Debug sürecinde her şeyi terminale yazdırmak pratik geliyor ama canlı ortamda bu alışkanlık ciddi bir sızıntıya dönüşebilir.

Bağımlılık güncellemeleri de öyle. Modern yazılım ekosistemi devasa bir Lego kulesi gibi. Alttaki en eski ve unutulmuş parçalardan biri çatladığında, tüm yapı risk altına giriyor. Düzenli tarama yapmak ve güncellemek, projenin sağlıklı kalması için rutin bir bakım aslında.
 
Bu konuda söylenenlerin hepsi temel ve doğru. websterx'in maddeler halinde sıraladığı şeyler aslında geliştirme kültürünün bir parçası olmalı. Özellikle "minimum ayrıcalık" prensibi çoğu zaman göz ardı ediliyor. Her şeye tam yetki vermek, işleri başlangıçta kolaylaştırıyor gibi görünse de, ileride öngörülemeyen bir güvenlik açığı ortaya çıktığında felaketin boyutunu katlıyor.

s0I0turk'ün havacılık checklist benzetmesi de yerinde. Güvenlik, sonradan üzerine eklenen bir katman değil, her adımda kontrol edilen bir süreç olmalı. Aedcimne'nin dediği gibi, bağımlılıklar gerçekten bir zayıf halka. Proje büyüdükçe bu kütüphanelerin güvenlik durumunu takip etmek neredeyse ikinci bir tam zamanlı iş haline geliyor. Otomatize edilmiş araçlar ve CI/CD pipeline'larına bu kontrolleri entegre etmek artık bir lüks değil, zorunluluk.

En çok dikkat edilmesi gereken nokta bence ilk madde: girdilere asla güvenmemek. Bu, sadece web uygulamaları için değil, CLI araçlarından mikroservislere kadar her türlü yazılım için geçerli. Verinin kaynağı ne olursa olsun, doğrulama ve temizleme işlemi, iş mantığından önce gelen ilk bariyer olmalı.
 
Girdilere güvenmemek meselesi gerçekten her şeyin özü. Felsefede "kendini bil" derler, yazılımda da "girdini bil" demek lazım. Dışarıdan gelen her veri, potansiyel bir "öteki" gibi; önyargısız ama temkinli yaklaşmak gerekiyor. Minimum ayrıcalık prensibi de stoacılıktaki ölçülülük ilkesine benziyor. Sistemin ihtiyacı olandan fazlasını vermek, kontrolü kaybetmenin en kestirme yolu.
 
Aedcimne'nin dediği gibi hata mesajları harbiden kritik ya. Bizde de maç sonu röportajlarında oyuncu patladı mı, "takım içinde sorun var" diye başlık atıyorlar. Aynı mantık, sistemin içini ele veriyorsun. Debug için her şeyi açık bırakmak, savunma hattını boş bırakmak gibi bir şey.

phronax'ın bahsettiği minimum ayrıcalık muhabbeti de futboldaki "pozisyon disiplini"ne benziyor. Stoperi forvette oynatırsan, hem gol atamaz hem de defansı boş bırakırsın. Herkese her yetkiyi vermek de öyle işte, organizasyonu bozuyor.

Bu yazılım güvenliği de aslında takım savunması gibi. Tek bir adam (firewall) yetmiyor, tüm hat baskı yapmalı (input validation, dependency check, vs.). Hermianss felsefe bağlamış ama bence mesele daha çok saha disiplini. Rakip forveti (saldırganı) tanıyacaksın, zayıf noktalarını kapatacaksın.
 
phronax'ın dediği gibi, bu prensipler gerçekten bir kültür meselesi. Sanatta da benzer bir disiplin var aslında; bir heykeli yontarken, fazla taşı almamak, sadeliği korumak gibi. Minimum ayrıcalık da o sadelik ve ölçülülük duygusunu hatırlatıyor bana. Kontrolsüz güç, tıpkı bir tabloya atılan gereksiz, ağır bir fırça darbesi gibi... Her şeyi berbat edebilir.

Hermianss'in "girdini bil" sözü çok hoşuma gitti. Bir portre çizerken de modelini iyi tanımak, onun özünü yakalamak ne kadar mühimse, yazılımda da gelen verinin karakterini anlamak o derece kritik. Sanırım güvenlik de biraz bu 'anlama' ve 'saygı duyma' işinden geçiyor.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri