Size daha iyi hizmet sunabilmek için çerezleri kullanıyoruz.
Web sitemizde gezinme deneyiminizi geliştirmek, size kişiselleştirilmiş içerik ve hedefli reklamlar göstermek, web sitesi trafiğimizi analiz etmek ve ziyaretçilerimizin nereden geldiğini anlamak için çerezleri ve diğer izleme teknolojilerini kullanıyoruz.
⚠️
KVKK ve Çerez Politikası Bilgilendirmesi
6698 sayılı Kişisel Verilerin Korunması Kanunu (KVKK) ve Aydınlatma Yükümlülüğü kapsamında; web sitemizin temel fonksiyonlarının çalışabilmesi, veri güvenliğinin sağlanması ve performans analizi yapılabilmesi için zorunlu çerezlerin kullanımı gerekmektedir. Çerez kullanımını reddetmeniz halinde, teknik imkansızlıklar ve veri senkronizasyonu kesintileri nedeniyle web sitemizdeki hizmetlerden yararlanmanız mümkün olmamaktadır. Sitemizdeki içeriklere erişebilmek için çerez kullanımını onaylamanız gerekmektedir.
DevSecOps ve Secure Coding: SDLC Süreçlerinde Güvenlik Otomasyonu ve ORM Güvenliği
Modern yazılım geliştirme dünyasında hız ve güvenlik artık birbirine rakip kavramlar değil, birbirini tamamlayan unsurlardır. “Shift-Left” (Güvenliği Sola Çekme) felsefesiyle şekillenen DevSecOps yaklaşımı, güvenlik denetimlerini Yazılım Geliştirme Yaşam Döngüsü’nün (SDLC) her aşamasına entegre ederek manuel hataları minimize etmeyi hedefler.
Şekil 1: DevSecOps ve Secure Coding: SDLC Süreçlerinde Güvenlik Otomasyonu ve ORM Güvenliği
1. DevSecOps: SDLC İçerisinde Güvenlik Otomasyonu
Geleneksel modellerde güvenlik, ürün yayına çıkmadan hemen önce yapılan bir “geçit” kontrolüydü. DevSecOps ise bu süreci otomatize edilmiş kontrol noktalarına böler.
1.1. CI/CD Entegrasyonunda Otomasyon Katmanları
Güvenlik otomasyonu üç ana sütun üzerine inşa edilir:
SAST (Static Application Security Testing): Kaynak kodun derlenmeden analiz edilmesidir. Kodun içindeki zafiyetler (hardcoded şifreler, SQL Injection riskleri vb.) bu aşamada yakalanır. SonarQube veya Snyk gibi araçlar bu aşamada kritik rol oynar.
SCA (Software Composition Analysis): Modern yazılımların %80’i açık kaynaklı kütüphanelerden oluşur. SCA, kullanılan npm, pip veya maven paketlerinin bilinen CVE (Common Vulnerabilities and Exposures) kayıtlarını tarar.
DAST (Dynamic Application Security Testing): Uygulama çalışma zamanında (runtime) test edilir. API uç noktalarına yapılan saldırı simülasyonları ile yapılandırma hataları tespit edilir.
1.2. Pre-Commit Hook Yapılandırması
Güvenlik, geliştiricinin terminalinde başlar. Git hooks kullanarak güvensiz kodun repoya girmesi engellenebilir.
Güvenli kodlama, sadece dışarıdan gelen veriyi temizlemek değil, sistem mimarisini “güvenli varsayılanlar” (secure by default) üzerine kurmaktır.
2.1. Input Validation vs. Output Encoding
Input Validation (Girdi Doğrulama), verinin beklenen tipte, uzunlukta ve formatta olduğunu kontrol ederken; Output Encoding (Çıktı Kodlama), verinin tarayıcı veya terminal tarafından “kod” olarak çalıştırılmasını engeller (XSS koruması).
2.2. Bellek Yönetimi ve Thread Safety
C++ veya Rust gibi dillerde bellek sızıntıları (memory leaks) veya buffer overflow zafiyetleri, sistemin tamamen ele geçirilmesine yol açabilir. Modern Java veya Go gibi dillerde ise “Concurrency” hataları veri sızıntılarına neden olabilir.
3. ORM Güvenliği: Soyutlamanın Getirdiği Riskler
ORM kütüphaneleri (Hibernate, Entity Framework, Sequelize, SQLAlchemy), geliştiricileri manuel SQL yazmaktan kurtarır ancak yanlış kullanımda “yalancı bir güvenlik hissi” yaratır.
3.1. SQL Injection ve Raw Query Tuzağı
ORM’ler genellikle “Parameterized Queries” kullanır, bu da SQL Injection’ı büyük ölçüde engeller. Ancak karmaşık sorgularda geliştiriciler sıklıkla raw query metoduna başvurur.
Hatalı Kullanım (Python/SQLAlchemy):
# Tehlikeli: String formatting ile sorgu oluşturmauser_id ="1; DROP TABLE users"session.execute(f"SELECT * FROM users WHERE id = {user_id}")
Modern ORM’ler, HTTP isteğinden gelen tüm veriyi doğrudan model nesnesine eşleyebilir. Eğer bir saldırgan isteğe is_admin: true parametresini eklerse ve bu alan “protected” değilse, yetki yükseltme (privilege escalation) gerçekleşir.
Örnek Koruma (Node.js/Sequelize):
// Sadece belirli alanların güncellenmesine izin verilmeli
User.update(
{ bio:req.body.bio, avatar:req.body.avatar },
{ where: { id:req.user.id } }
);
3.3. N+1 Sorgu Problemi ve DoS Riski
Teknik olarak bir güvenlik açığı gibi görünmese de, kötü yapılandırılmış ORM sorguları veri tabanı üzerinde aşırı yük oluşturarak Servis Dışı Bırakma (DoS) saldırılarına zemin hazırlar. Eager Loading kullanılarak bu risk minimize edilmelidir.
4. Güvenlik Odaklı Kütüphaneler ve Araçlar
Yazılım geliştirme sürecinde aşağıdaki kütüphanelerin entegrasyonu standart hale getirilmelidir:
Kategori
Araç/Kütüphane
Amaç
Secret Management
HashiCorp Vault
Şifre ve API anahtarlarının güvenli depolanması.
Web Security
Helmet.js (Node.js)
HTTP başlıklarını (CSP, HSTS) otomatik yapılandırır.
Auth
Passport.js / Keycloak
Standartlara uygun kimlik doğrulama.
ORM Sanitizer
SQLMap (Test için)
Veri tabanı katmanındaki zafiyetleri tespit eder.
5. Teknik Notlar ve Uygulama Stratejileri
Not 1: Least Privilege (En Düşük Yetki) Prensibi
Uygulamanın veri tabanına bağlandığı kullanıcı hesabı, asla root veya db_owner olmamalıdır. Sadece gerekli tablolar üzerinde SELECT, INSERT, UPDATE yetkilerine sahip olmalı; DROP veya ALTER gibi komutlar engellenmelidir.
Not 2: Logging ve Monitoring
Güvenlik olayları (başarısız login denemeleri, alışılmadık SQL hataları) mutlaka merkezi bir log sistemine (ELK Stack, Splunk) aktarılmalı ve anomali tespiti yapılmalıdır. Ancak loglara asla hassas veri (kredi kartı, şifre) yazılmamalıdır.
Not 3: Container Security
Uygulama Dockerize ediliyorsa, base image olarak “Distroless” veya “Alpine” gibi minimal imajlar seçilmelidir. Bu, saldırı yüzeyini (attack surface) daraltır.
Sonuç
DevSecOps, güvenliği bir “kontrol listesi” olmaktan çıkarıp yaşayan bir süreç haline getirir. Secure Coding prensiplerini özümsemiş bir geliştirici ekibi ve doğru yapılandırılmış ORM katmanı, organizasyonu sadece bilinen saldırılardan değil, karmaşık mantık hatalarından da korur. Unutulmamalıdır ki; en güvenli kod, yazılmamış koddur; yazılan kodun güvenliği ise sürekli denetime tabidir.