Geri

DevSecOps Laboratuvarları — Çözüm

Çalışan Uygulamayı Taramak (DAST)

50 dkGereksinim: docker

labs/dast/uygulama/guvenlik-basliklari.conf dosyasındaki CSP satırını bulun:

add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" always;

default-src'ye düşmeyen yönergeleri ekleyin:

add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'; form-action 'self'; frame-src 'none'; object-src 'none'; base-uri 'self'" always;

Eklenenlerin her biri ayrı bir deliği kapatıyor:

YönergeNeyi engelliyor
form-action 'self'Formun başka bir siteye gönderilmesini. Saldırgan sayfaya form enjekte etse bile veri dışarı çıkamıyor.
frame-src 'none'Sayfanın başka bir siteyi çerçeve içine gömmesini.
object-src 'none'<object> ve <embed> ile eklenti içeriği yüklenmesini. Eski ama hâlâ işleyen bir saldırı yüzeyi.
base-uri 'self'<base> etiketiyle bütün göreli bağlantıların başka bir sunucuya yönlendirilmesini.

Container'ı yeniden oluşturup tarayın:

docker compose -f labs/dast/docker-compose.yml up -d --force-recreate
docker run --rm --network dast-net ghcr.io/zaproxy/zaproxy:2.17.0 zap-baseline.py -t http://uygulama
WARN-NEW: Non-Storable Content [10049] x 6
WARN-NEW: Session Management Response Identified [10112] x 1
FAIL-NEW: 0   FAIL-INPROG: 0   WARN-NEW: 2   WARN-INPROG: 0   INFO: 0   IGNORE: 0   PASS: 66

10055 gitti. Geçen kontrol 65'ten 66'ya çıktı.

İkinci adım: istisnayı kaldırmak

labs/dast/kurallar.conf dosyasında 10055 satırını bulun:

10055	IGNORE	(CSP)	CSP'yi kademeli siklastiriyoruz; form-action/frame-src bir sonraki surumde. Sahibi: portal ekibi, son tarih 2026-12-31.

IGNORE yerine WARN yazın ve gerekçeyi silin — artık bir gerekçeye gerek yok, sorun düzeldi:

10055	WARN	(CSP)

Kapıyı çalıştırın:

docker run --rm --network dast-net -v ./labs/dast:/zap/wrk:rw ghcr.io/zaproxy/zaproxy:2.17.0 zap-baseline.py -t http://uygulama -c kurallar.conf
FAIL-NEW: 0   FAIL-INPROG: 0   WARN-NEW: 0   WARN-INPROG: 0   INFO: 0   IGNORE: 2   PASS: 66

Çıkış kodu 0. Kapı geçiyor ve artık 10055 için bir istisna taşımıyor.

Buradaki asıl ders

İstisna satırı ikisinden biri olabilir:

  • Bir karar. "Bunu şimdilik kabul ediyoruz, sebebi şu, sahibi şu, şu tarihte tekrar bakacağız."
  • Bir unutma. "Bu bulgu can sıkıyordu, sustur gitsin."

İkisi dosyada birebir aynı görünüyor. Aralarındaki farkı yaratan tek şey, yanına yazılan gerekçe ve birinin o tarihte dönüp bakması.

Bu labda sorunu düzelttik ve istisnayı kaldırdık. Kaldırmasaydık ne olurdu? CSP ileride yanlışlıkla gevşetildiğinde 10055 yine çıkacaktı — ama kural dosyası onu hâlâ IGNORE ettiği için hiç görünmeyecekti. Kapı yerinde duruyor gibi görünürken aslında o konuda kör olacaktı.

Düzelttiğiniz her bulgu için istisnasını da kaldırın. İstisna listesi, temizlenmediği sürece zamanla tarayıcının kör noktalarının listesine dönüşüyor.


Alıştırmalara dönün.

Kaynağı GitHub'da gör