Güvenlik açıklarını önlemek, düzeltmekten daha kolaydır. Kod incelemesinde yakalanan bir SQL enjeksiyon açığı, düzeltilmesi dakikalar sürer. Ancak bir ihlalden sonra keşfedilen aynı açık, olay müdahalesi, düzenleyici soruşturma ve iyileştirme süreçlerinin yanı sıra arada sızdırılan verilerin maliyetini de haftalarca uzatır. Statik kod analizi, kaynak kod yapısını, veri akışını ve kalıplarını bilinen güvenlik açığı imzalarına karşı inceleyerek, kod çalışmadan önce bu sorunları bulma disiplinidir. Sistematik olarak uygulandığında, güvenliği reaktif bir uygulamadan geliştirme sürecinin yerleşik bir özelliğine dönüştürür.
OWASP Top 10, binlerce uygulamadaki gerçek dünya güvenlik açığı verilerine dayanarak Açık Web Uygulama Güvenliği Projesi (OWASP) tarafından güncellenen, en kritik web uygulaması güvenlik risklerinin yetkili kataloğudur. Listedeki her madde, statik analiz araçları tarafından farklı derecelerde tespit edilebilir. Bu kılavuz, her OWASP kategorisini statik analizin bulabileceği şeylerle eşleştirir, savunmasız kod kalıbını ve güvenli eşdeğerini gösterir ve hangi araçların hangi tekniği uyguladığını açıklar.
Saldırganlar yapmadan önce enjeksiyon noktasını bulun.
SMART TS XL JavaScript API'lerinden Java servislerine ve COBOL arka uçlarına kadar güvenlik açıklarını izler.
Daha fazla bilgiStatik Uygulama Güvenlik Testi (SAST) Nedir?
Statik Uygulama Güvenlik Testi (SAST), programı çalıştırmadan kaynak kodunu, bayt kodunu veya ikili dosyayı analiz eder. Analiz, verilerin uygulama içinde nasıl aktığını, verilerin hangi güvenlik açısından hassas işlemlere ulaştığını ve harici bir girdiden (kullanıcı girdisi, HTTP parametreleri, dosya içeriği, ortam değişkenleri) gelen herhangi bir yolun uygun doğrulama veya temizleme yapılmadan tehlikeli bir işleme (veritabanı sorgusu, sistem komutu, HTML çıktısı, kriptografik fonksiyon) yol açıp açmadığını inceler.
SAST, eksiksiz bir uygulama güvenliği programının bir katmanıdır. Nerede yer aldığını anlamak için alternatifleriyle karşılaştırmak gerekir:
| Yaklaşım | Çalıştığında | Neler Buluyor? | Neyi Eksik Bırakıyor? |
|---|---|---|---|
| SAST (Statik) | Çalıştırılmadan önce, kaynak kod üzerinde | Kod düzeyindeki güvenlik açıkları, enjeksiyon kalıpları, kriptografik suistimal, sabit kodlanmış sırlar | Yalnızca çalışma zamanında ortaya çıkan güvenlik açıkları, dağıtım sırasındaki yapılandırma sorunları |
| DAST (Dinamik) | Çalışmakta olan bir uygulamaya karşı | Çalışma zamanı davranışı, kimlik doğrulama hataları, sunucu yapılandırma sorunları | Test sırasında tetiklenmeyen kod seviyesi kalıpları |
| SCA (Yazılım Bileşimi Analizi) | Bağımlılık bildirimlerinde | Üçüncü taraf kütüphanelerde bilinen CVE'ler | Özel kod güvenlik açıkları |
| IAST (Etkileşimli) | Enstrümantasyon ile test yürütülmesi sırasında | Yüksek doğrulukla çalışma zamanı veri akışları | Uygulamanın çalışmasını gerektirir, geri bildirim daha yavaş olur. |
SAST, en erken geri bildirimi sağlar; güvenlik açığı test ortamına ulaşmadan önce, CI/CD hattında veya hatta IDE'de henüz dağıtılmamış kod üzerinde çalışır. Bu erkenlik, en önemli güvenlik değeridir.
Statik Kod Analizi Hangi Tür Tehditleri Azaltabilir?
Bu, SAST hakkında en çok aranan sorulardan biridir. Doğrudan cevap:
Statik kod analizi, kaynak kod kalıplarında ortaya çıkan tehditleri azaltabilir : enjeksiyon güvenlik açıkları (SQL, komut, XSS), kriptografik suistimal, sabit kodlanmış kimlik bilgileri, güvensiz kimlik doğrulama uygulamaları, kod mantığında bozuk erişim kontrolü ve veri bütünlüğü hataları. Çalışma zamanı yapılandırmasından, ağ topolojisinden veya altyapı kurulumundan kaynaklanan tehditleri azaltamaz; bunlar için DAST, sızma testi veya altyapı güvenlik taraması gereklidir.
OWASP Kapsamı için Statik Analiz ve Dinamik Analiz Karşılaştırması
Dinamik analiz (DAST) ve statik analiz (SAST), OWASP güvenlik açıklarının farklı alt kümelerini bulur. İkisi de her şeyi kapsamaz. OWASP Web Güvenlik Testi Kılavuzu (WSTG), dinamik test için metodoloji çerçevesidir; CodeQL, Semgrep ve SonarQube gibi SAST araçları ise kaynak kod katmanını ele alır.
| OWASP En İyi 10 Kategorisi | SAST Kapsamı | DAST Kapsamı |
|---|---|---|
| Bozuk Erişim Kontrolü | Kısmi, kod mantığı boşlukları | Güzel, çalışma zamanı davranış testi |
| Kriptografik Arızalar | Güçlü, algoritma tespiti | Zayıf, dışarıdan gözlemlemek zor. |
| Enjeksiyon | Güçlü, kirlilik analizi | Güçlü, aktif yük testi |
| Güvensiz Tasarım | Kısmi, desen tespiti | Zayıf, tasarım bilgisi gerektiriyor. |
| Yanlış Güvenlik Yapılandırması | Kısmi, kodda yapılandırma | Güçlü, gerçek ortam testleri |
| Hassas Bileşenler | Zayıf, SCA daha iyi. | Zayıf, SCA daha iyi. |
| Kimlik Doğrulama Hataları | Kısmi, sabit kodlu kimlik bilgileri, zayıf kalıplar | Güçlü, oturum ve kimlik doğrulama testleri |
| Veri Bütünlüğü Hataları | Kısmi, seri durumdan çıkarma kalıpları | Zayıf, dışarıdan tespit edilmesi zor. |
| Günlük Kayıt Hataları | Kısmi, eksik günlük kayıtları | Zayıf, gözlemlenmesi zor yokluk |
| SSRF | Güçlü, HTTP çağrısına yönelik olumsuz etki | Güçlü, aktif istek testi |
Sonuç: SAST ve DAST birbirini tamamlayıcıdır. Maksimum OWASP kapsamı için ikisini de çalıştırın. Sıfırdan başlayan ve bütçesi kısıtlı ekipler için öncelikle SAST'ı kullanın; çünkü bu, en hızlı geliştirici geri bildirimini ve en geniş enjeksiyon kapsamını sağlar.
OWASP İlk 10: Statik Analiz Neler Buluyor ve Nasıl
A01, Bozuk Erişim Kontrolü
Bozuk erişim kontrolü, OWASP'ın en büyük riski olarak değerlendirilmektedir. Statik analiz, kod düzeyindeki belirtileri ele alır: fonksiyonlarda ve uç noktalarda eksik yetkilendirme kontrolleri, doğrulama yapılmadan dahili kimlikleri açığa çıkaran nesne referansları ve amaçlanan izin yapılarını atlayan sabit kodlanmış rol atamaları.
Statik analizin tespit ettiği şeyler: İlgili yetkilendirme kontrolü yapılmadan hassas işlemleri gerçekleştiren yöntemler; erişim doğrulaması yapılmadan nesne kimliğinin kullanıcı girişinden geldiği doğrudan nesne referansları; kimlik doğrulama durumunun kontrol edildiği ancak nesne sahipliğinin kontrol edilmediği zorunlu tarama kalıpları.
Java
// Vulnerable: no ownership check -- any authenticated user can access any order
@GetMapping("/orders/{orderId}")
public Order getOrder(@PathVariable Long orderId) {
return orderRepository.findById(orderId).orElseThrow();
}
// Secure: verify the order belongs to the requesting user
@GetMapping("/orders/{orderId}")
public Order getOrder(@PathVariable Long orderId,
@AuthenticationPrincipal UserDetails user) {
Order order = orderRepository.findById(orderId).orElseThrow();
if (!order.getOwnerId().equals(user.getUserId())) {
throw new AccessDeniedException("Order does not belong to requesting user");
}
return order;
}
Statik analizin yakalayamadığı durumlar: Mantığın doğru olduğu ancak karar vermek için kullanılan verilerin tehlikeye girdiği çalışma zamanı erişim kontrolü hataları. Bunlar için DAST ve sızma testleri gereklidir.
A02, Kriptografik Hatalar
Zayıf şifreleme, statik analizle güvenilir bir şekilde tespit edilebilir çünkü savunmasız kalıplar (MD5, SHA-1, DES, ECB modu, sabit kodlanmış anahtarlar) kaynak kodda sözcüksel olarak tanımlanabilir.
piton
# Vulnerable: MD5 for password hashing (broken algorithm)
import hashlib
password_hash = hashlib.md5(password.encode()).hexdigest()
# Vulnerable: hardcoded encryption key
KEY = b"mysecretkey12345"
cipher = AES.new(KEY, AES.MODE_ECB) # ECB mode also vulnerable
# Secure: bcrypt for passwords, environment-sourced keys
import bcrypt, os
password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
# Secure: AES-GCM with environment-sourced key
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = os.environ["ENCRYPTION_KEY"].encode()
aesgcm = AESGCM(key)
Statik analiz kuralları bayrağı: Güvenlik açısından hassas amaçlar için MD5/SHA-1, DES/3DES/RC4/ECB modu, sabit kodlanmış kriptografik anahtarlar ve sırlar, hassas veri iletimi için HTTPS yerine HTTP ve devre dışı bırakılmış sertifika doğrulaması (verify=False Python requests kütüphanesinde, setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER) (Java dilinde).
A03, Enjeksiyon
Enjeksiyon, SQL, işletim sistemi komutları, LDAP, XSS, şablon enjeksiyonu, prosedürler arası kirlilik analizinin en doğrudan değerini sağladığı kategoridir. Güvenlik açığı, güvenilmeyen girdinin kaynağından tehlikeli bir hedefe yapılan fonksiyon çağrıları aracılığıyla izlenmesini gerektirir.
javascript
// Vulnerable: direct string interpolation in SQL (SQL injection)
app.get('/users', async (req, res) => {
const name = req.query.name;
const result = await db.query(`SELECT * FROM users WHERE name = '${name}'`);
res.json(result.rows);
});
// Secure: parameterized query
app.get('/users', async (req, res) => {
const name = req.query.name;
const result = await db.query('SELECT * FROM users WHERE name = $1', [name]);
res.json(result.rows);
});
php
// Vulnerable: unescaped output (XSS)
echo "Welcome, " . $_GET['username'];
// Secure: context-appropriate escaping
echo "Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8');
csharp
// Vulnerable: command injection in C#
var process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + userInput;
process.Start();
// Secure: avoid shell interpretation, validate and whitelist inputs
var allowedCommands = new HashSet<string> { "report", "export" };
if (!allowedCommands.Contains(userInput))
throw new ArgumentException("Invalid command");
Enjeksiyon saldırılarına karşı prosedürler arası kirlilik analizi yapan araçlar: CodeQL (en hassas olanı), kirlilik moduyla Semgrep, Snyk Code, güvenlik kurallarıyla SonarQube.
A04, Güvenli Olmayan Tasarım
Güvenliksiz tasarım, kod kalıplarından ziyade mimari kararlarla ilgili olduğu için statik analiz açısından OWASP'ın en zor kategorisidir. Statik analiz şu belirtileri ortaya çıkarabilir:
Kimlik doğrulama uç noktalarında eksik hız sınırlama mantığı, başarısız denemelerden sonra hesap kilitlemesinin olmaması, doğrulama adımlarını atlayan iş mantığı ve denetim kaydı tutulmadan ayrıcalıklı işlemler gerçekleştiren işlevler. Bunlar, mevcut olanı değil, eksik olanı raporlayan statik analiz olan eksik kalıplar olarak tespit edilebilir.
Bazı SAST araçları, kurumsal güvenlik tasarım gereksinimlerini kodlayabilen özel kuralları destekler: her denetleyici yöntemi bir yetkilendirme fonksiyonunu çağırmalıdır, her veritabanı yazma işleminden önce girdi doğrulaması yapılmalıdır, her harici API çağrısı bir zaman aşımı kullanmalıdır. Bu özel kurallar, tasarım gereksinimlerini uygulanabilir kod kısıtlamalarına dönüştürür.
A05, Güvenlik Yapılandırma Hatası
Kodda güvenlik yapılandırma hataları şunları içerir: devre dışı bırakılmış güvenlik özellikleri, izin verici CORS başlıkları, eksik güvenlik yanıt başlıkları, üretim ortamında etkinleştirilmiş hata ayıklama modu ve yığın izlerini gösteren ayrıntılı hata mesajları.
piton
# Vulnerable: Flask debug mode enables interactive debugger in production
app = Flask(__name__)
app.run(debug=True) # exposes console access if error occurs
# Vulnerable: overly permissive CORS
from flask_cors import CORS
CORS(app, origins="*") # allows any origin
# Secure: environment-controlled debug, restricted CORS
import os
debug_mode = os.environ.get("FLASK_DEBUG", "false").lower() == "true"
CORS(app, origins=os.environ.get("ALLOWED_ORIGINS", "").split(","))
app.run(debug=debug_mode)
Statik analiz kuralları bayrağı: hata ayıklama modu şu şekilde ayarlandı: True Kaynak kodda joker karakterli CORS kaynakları, HTTP yanıt yapılandırmalarında eksik güvenlik başlıkları, devre dışı bırakılmış SSL sertifika doğrulaması ve yapılandırma dosyalarında varsayılan kimlik bilgileri.
A06, Güvenlik Açığı Olan ve Eskimiş Bileşenler
Bu kategori, geleneksel SAST'tan ziyade öncelikle Yazılım Bileşimi Analizi (SCA) ile ele alınmaktadır. SCA taramaları package.json, pom.xml, requirements.txtve benzer şekilde güvenlik açığı veritabanlarına (Ulusal Güvenlik Açığı Veritabanı, GitHub Danışma Veritabanı) karşı da bildirimler gönderiliyor.
SAST, kullanım dışı bırakılmış API kullanımlarını, güvenlik açıkları nedeniyle geçersiz kılınmış kütüphane fonksiyonlarına yapılan çağrıları veya güncel kütüphanelerin bile artık önermediği savunmasız kalıpların doğrudan kullanımını belirleyerek katkıda bulunur.
A06 için özel olarak tasarlanmış araçlar: npm audit, pip-audit, snyk test, OWASP Dependency-CheckGitHub, Dependabot ve Mend (eski adıyla WhiteSource).
A07, Kimlik Doğrulama ve Kimlik Tespiti Hataları
Statik analiz, kod düzeyindeki kimlik doğrulama anti-kalıplarını ortaya çıkarır: sabit kodlanmış parolalar, zayıf parola doğrulaması, kriptografik olmayan rastgelelikle oluşturulan oturum belirteçleri, oturum kapatmada oturum geçersiz kılma eksikliği ve JWT uygulamalarının kabul ettiği none algoritması.
javascript
// Vulnerable: JWT accepting 'none' algorithm -- allows signature bypass
const decoded = jwt.verify(token, secret, { algorithms: ['HS256', 'none'] });
// Vulnerable: hardcoded admin credentials
if (username === 'admin' && password === 'admin123') {
grantAccess();
}
// Secure: algorithm whitelist, no hardcoded credentials
const decoded = jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256'] // explicit allowlist only
});
csharp
// Vulnerable: weak random for session token generation in C#
var sessionToken = new Random().Next().ToString();
// Secure: cryptographically secure random
using var rng = RandomNumberGenerator.Create();
var bytes = new byte[32];
rng.GetBytes(bytes);
var sessionToken = Convert.ToBase64String(bytes);
A08, Yazılım ve Veri Bütünlüğü Arızaları
Bu kategori, güvenli olmayan seri hale getirme ve doğrulanmamış yazılım güncellemelerini kapsar. Statik analiz şunları tespit eder: Java ObjectInputStream Güvenilmeyen kaynaklardan veri seri durumdan çıkarma, Python pickle.loads() harici veriler üzerinde, PHP unserialize() Kullanıcı kontrollü girdi ve güvenli olmayan yükleyiciler kullanan YAML ayrıştırıcıları ile.
piton
# Vulnerable: pickle deserialization of untrusted data
import pickle
data = pickle.loads(request.data) # arbitrary code execution risk
# Vulnerable: unsafe YAML loader
import yaml
config = yaml.load(user_input) # yaml.load without Loader is unsafe
# Secure: safe alternatives
import json
data = json.loads(request.data) # JSON cannot execute code
import yaml
config = yaml.safe_load(user_input) # safe_load disables arbitrary object creation
A09, Güvenlik Günlüğü ve İzleme Hataları
Günlük kaydı hataları, statik analiz yoluyla eksik kalıplar olarak tespit edilebilir: hassas işlemler, kimlik doğrulama olayları, erişim kontrolü kararları, veri değişiklikleri gibi, eşlik eden günlük kaydı ifadeleri olmadan gerçekleşen işlemler. Statik analiz kuralları, belirli işlev çağrılarının her zaman denetim günlüğü çağrılarıyla birlikte gerçekleşmesini gerektirebilir.
Statik analizde işaretlenenler şunlardır: parolaların veya token'ların kaydedilmesi (hassas verilerin kaydedilmesi de bir güvenlik açığıdır), hataları kaydetmeden sessizce yutan istisna işleyicileri ve ham istisna mesajını kaydeden (hassas veriler içerebilen) yakalama blokları.
Java
// Vulnerable: swallowed exception, no logging
try {
authenticateUser(username, password);
} catch (Exception e) {
// silent failure -- no log, no audit trail
}
// Vulnerable: logging sensitive data
log.info("User logged in with password: " + password);
// Secure: log the event, not the credential
try {
authenticateUser(username, password);
auditLog.info("Authentication success for user: {}", username);
} catch (AuthenticationException e) {
auditLog.warn("Authentication failure for user: {}", username);
throw e; // do not swallow
}
A10, Sunucu Tarafı İstek Sahteciliği (SSRF)
SSRF, prosedürler arası kirlilik analizi için güçlü bir örnektir. Bu güvenlik açığı, kullanıcı tarafından kontrol edilen girdinin bir HTTP isteğine kadar izlenmesini gerektirir ve bu genellikle birden fazla fonksiyon çağrısı yoluyla gerçekleşir. Yalnızca tek tek fonksiyonları analiz eden bir araç, URL oluşturma ve HTTP çağrısı farklı fonksiyonlarda olduğunda SSRF'yi tespit edemez.
piton
# Vulnerable: user-controlled URL in HTTP request (SSRF)
import requests
def fetch_resource(url):
return requests.get(url).content # no validation
def api_endpoint(request):
target = request.json().get("url") # attacker controls this
return fetch_resource(target) # SSRF across function boundary
# Secure: allowlist validation before making the request
from urllib.parse import urlparse
ALLOWED_HOSTS = {"api.internal.example.com", "cdn.example.com"}
def fetch_resource(url: str) -> bytes:
parsed = urlparse(url)
if parsed.hostname not in ALLOWED_HOSTS:
raise ValueError(f"URL host not allowed: {parsed.hostname}")
return requests.get(url, timeout=5).content
OWASP Güvenliği için Statik Kod Analizi Araçları
Aşağıdaki tablo, başlıca SAST araçlarını, en etkili şekilde ele aldıkları OWASP kategorileriyle eşleştirmektedir:
| araç | Birincil Diller | OWASP Güçlü Yönleri | Yaklaşım |
|---|---|---|---|
| KodQL | Java, JS/TS, Python, C/C++, Go, Ruby | A03 Enjeksiyon, A10 SSRF (derin kirlenme) | İşlemler arası anlamsal analiz |
| Segrep | 30+ dil | A03, A02, A07 (desen tabanlı + kirlilik modu) | Desen eşleştirme + hafif leke |
| Snyk Kodu | Java, JS/TS, Python, C# | A03, A07, A08 | ML tabanlı kirlilik analizi |
| SonarQube | 30+ dil | A02, A03, A05, A07, A09 | Kural tabanlı + veri akışı |
| kontrol işareti | 30+ dil | OWASP'ın tam kapsamı | İşlemler arası kirlenme |
| veracode | Java, .NET, JS, PHP | OWASP'ın tam kapsamı | Bayt kodu + kirlilik analizi |
| OWASP ZAP'ı | Dilden bağımsız | A01, A05, A07 (çalışma zamanı) | DAST, dinamik test |
| SMART TS XL | COBOL, JCL, Java, Python, RPG, SQL | Diller arası bulaşma, bağımlılık riski | Diller arası yapısal + kirlilik |
Ne kadar SMART TS XL Kurumsal Kod Tabanlarındaki Güvenliği Ele Alır
Kurumsal güvenlik programları, tek dilli SAST araçlarının çözemediği bir zorlukla karşı karşıyadır: saldırı yüzeyi diller arasıdır. Bir web uygulaması, kullanıcı girdisini JavaScript'te alabilir, Java'da işleyebilir, bir mesaj kuyruğu aracılığıyla DB2 veritabanına karşı SQL çalıştıran bir COBOL programına iletebilir. Enjeksiyon güvenlik açığı dört dil sınırında mevcuttur. Hiçbir tek dil tarayıcısı, saldırının tüm yolunu göremez.
SMART TS XL'S statik kod analizi Bu, zincirdeki her dili aynı anda kapsar. Güvenilmeyen girdi, bir JavaScript API işleyicisinden bir Java servisi aracılığıyla dinamik bir SQL sorgusu oluşturan bir COBOL programına aktığında, SMART TS XL CodeQL'in Java içinde uyguladığı prosedürler arası kirlilik izleme yönteminin aynısını Java, COBOL ve SQL'e birlikte uygulayarak, bu yolu tüm diller arası çağrı grafiği boyunca izler.
Uygulama bağımlılık eşleme özelliği, sistemdeki hangi bileşenlerin harici girdilerle etkileşime girdiğini, hangilerinin ayrıcalıklı işlemlere eriştiğini ve sistemin tam saldırı yüzeyinin aslında neye benzediğini gösteren güvenlik açısından önemli bir bakış açısı sağlar. Bu mimari güvenlik görünümü, tehdit modellemesinin temelidir; yapısını anlamadığınız bir sisteme karşı tehditleri modelleyemezsiniz.
Etki analizi özelliği, güvenlik iyileştirme programlarına hizmet eder: bir bileşende bir güvenlik açığı bulunduğunda, etki analizi, savunmasız olan bileşene bağımlı olan diğer tüm bileşenleri belirler ve herhangi bir kod değişikliği yapılmadan önce iyileştirme çabasının kapsamını doğru bir şekilde belirler. Güvenlik açığı olan bir COBOL programının yüzlerce başka program tarafından dahil edildiği büyük eski kod tabanlarında, başlamadan önce tüm iyileştirme kapsamını bilmek, yönetilen bir düzeltme ile zincirleme bir olay arasındaki farkı yaratır.
Yöneten kuruluşlar için miras modernizasyonu Programlar söz konusu olduğunda, eski kod tabanının güvenlik analizi bir ön koşuldur, sonradan düşünülecek bir şey değildir. Güvenlik açığı bulunan COBOL programlarını Java'ya taşımak, güvenlik açığı bulunan Java programları üretir. SMART TS XLGüvenlik analizi, güvenlik açıklarının modernizasyon sürecinin bir parçası olarak belirlenmesini ve giderilmesini sağlar; bu açıkların taşınan sistemde keşfedilmesini değil.
SAST'ı Geliştirme Yaşam Döngüsüne Entegre Etme
Statik güvenlik analizi, kod yazılıp incelendiği, yani karar verme aşamasında yapıldığında en büyük değeri sunar; kod dağıtıldıktan sonra değil.
IDE'de: SonarLint, Snyk'in IDE uzantıları ve CodeQL'in VS Code uzantısı, geliştiriciler kod yazarken bulguları satır içi olarak gösterir. Geliştiricinin savunmasız kalıbı yazdığı anda ortaya çıkan bir SQL enjeksiyonu bayrağının düzeltilmesi saniyeler sürer.
Çekme isteklerinde: GitHub Actions, GitLab CI veya Jenkins'e entegre edilmiş SAST, her çekme isteğinde çalışır ve bulgularını satır içi kod inceleme yorumları olarak yayınlar. Geliştirici, bulguyu, ona neden olan kodla birlikte bağlam içinde görür.
Bir kalite kontrol noktası olarak: SonarQube'un kalite kontrol modeli, yeni kritik güvenlik açıkları ortaya çıktığında birleştirmeleri engeller. Bu, güvenliği isteğe bağlı bir inceleme adımı olmaktan çıkarıp birleştirme sürecinin yapısal bir gerekliliği haline getirir.
Planlı bir şekilde: Derinlemesine prosedürler arası analiz, CodeQL, Checkmarx, tam Semgrep kural setleri, genellikle her commit için yürütülmeye çok yavaş kalır ancak ana dalda gece veya haftalık olarak çalıştırılarak, tespit edilmesi için tam çağrı grafiği analizi gerektiren güvenlik açıklarını bulur.
Katmanlı yaklaşım, IDE'de ve commit'lerde hızlı kalıp tabanlı kurallar, çekme isteklerinde ve gece yapılan derinlemesine kirlilik analizi, hem geliştiricilerin ihtiyaç duyduğu anlık yanıtı hem de güvenlik programlarının gerektirdiği kapsamlılığı sağlar.