Deponuzdaki (repo) güvenlik açıklarını ücretsiz tespit etmek için üç katmanlı bir yapı kurun: bir bağımlılık tarayıcısı (npm audit, pip-audit veya OSV-Scanner), bir gizli bilgi/anahtar tarayıcısı (Gitleaks) ve bir statik kod tarayıcısı (Semgrep Community Edition). Bunları her pull request sırasında çalıştırın. Bu araçların hiçbiri eksik yetkilendirme kontrollerini yakalayamaz; bu nedenle söz konusu açıklar için mutlaka bir çalışma zamanı (runtime) testi ekleyin.
npm audit --audit-level=high
pip-audit -r requirements.txt
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off --error
Vercel Security Review neleri değiştiriyor?
Vercel Security Review, 2 Kasım 2026'dan bu yana genel beta sürümünde sunulan bir Vercel Agent özelliğidir. Bağlı bir GitHub deposuna yapılan her push işlemini tarar, diff'i ve çevresindeki kodları inceler, yapılan değişikliğe dışarıdan nasıl ulaşılabileceğini analiz eder ve bulguları raporlamadan önce her birini yeniden doğrular.
Vercel'in paylaştığı örnek, bu yazının hazırlanış sebebini oluşturuyor. Bir fatura uç noktasında (endpoint) yapılan değişiklik, organizasyon kontrolü yapmadan faturaları yalnızca ID'ye göre sorguluyordu; bu da oturum açmış herhangi bir kullanıcının başka bir organizasyonun faturasını indirebilmesine yol açıyordu. Bu durum tipik bir mantık hatasıdır (logic flaw) ve kalıp tabanlı tarayıcılar (pattern scanners) mantık hatalarını yakalamakta yetersiz kalır.
Özellikten kimlerin yararlanabileceğine dair detaylar:
| Soru | Yanıt |
|---|---|
| Planlar | Yalnızca Pro ve Enterprise ekipleri |
| Ücret | 10 Kasım 2026'ya kadar ücretsiz; ardından sağlayıcı token ücretleri artı milyon token başına 0,25 dolar |
| Depolar | Bağlı GitHub depoları; henüz Vercel'e dağıtılmayan (deploy edilmeyen) depolar şu an desteklenmemektedir |
| Kapsam | Temel dala (base) kıyasla diff veya ilk incelemede kaynak kodun tamamı |
| Bulgular | Güvenlik açıkları paneli, bir GitHub check adımı ve özel ile dahili repolarda PR yorumları |
Vercel'in dokümantasyonunda bu özelliğin sınırları da açıkça belirtiliyor: Çalışan uygulamanızı değil, yalnızca kodu analiz eder ve bir sızma testi (penetration test) niteliği taşımaz. Bu şartları karşılamıyorsanız veya bu yazıyı ücretsiz kullanım süresi sona erdikten sonra okuyorsanız endişelenmeyin; bu rehberin geri kalanı tamamen ücretsizdir.
Bir depo güvenlik taraması neleri kapsamalıdır?
Kapsamlı bir depo güvenlik taraması dört temel unsuru kontrol eder: bağımlılıklarınızdaki bilinen açıklar, Git geçmişine sızan kimlik bilgileri ve anahtarlar (secrets), enjeksiyon gibi güvenli olmayan kod kalıpları ve yetkilendirme mantığı. İlk üçü için olgun ve ücretsiz tarayıcılar mevcuttur. Dördüncüsü ise kodunuzun iş mantığına dayandığından, çalışan bir API'ye karşı yürütülecek bir test gerektirir.

Koddan sildiğiniz bir anahtar Git geçmişinde kalmaya devam eder; bu yüzden mutlaka geçmişi de taramalı ve sızan gerçek anahtarları derhal yenilemelisiniz (rotate). API trafiğindeki ve test koleksiyonlarındaki anahtarlar için API anahtarı sızıntı kontrolü rehberimize göz atabilirsiniz.
Ücretsiz güvenlik açığı tarayıcılarının karşılaştırması
Fiyatlar ve lisanslar 5 Kasım 2026 itibarıyla kontrol edilmiştir. Bu rehberde yer alan komutlar için listelenen komut satırı araçlarının hiçbiri hesap veya kredi kartı gerektirmez.
| Araç | Tespit ettikleri | Ücret ve lisans | Dikkat edilmesi gerekenler |
|---|---|---|---|
npm audit |
npm bağımlılık açıkları | Ücretsiz, npm ile birlikte gelir | Bir lockfile dosyası gerektirir |
| pip-audit | Python bağımlılık açıkları | Ücretsiz, Apache-2.0 | Yalnızca Python |
| OSV-Scanner | Farklı ekosistemlerdeki bağımlılık açıkları | Ücretsiz, Apache-2.0 | Daha fazla bildirim yapar, ayıklama ve önceliklendirme (triage) gerektirir |
| Trivy | Bağımlılıklar, gizli anahtarlar, yapılandırma hataları | Ücretsiz, Apache-2.0 | Sürümleri sabitleyin (aşağıya bakın) |
| Gitleaks | Git geçmişindeki gizli bilgiler ve anahtarlar | Ücretsiz, MIT | GitHub Action adımı organizasyonlar için ücretsiz lisans anahtarı ister |
| Semgrep Community Edition | Kod kalıpları, bazı gizli anahtarlar | Ücretsiz, LGPL-2.1 motoru | Tek bir fonksiyonun veya dosyanın ötesindeki veri akışını takip edemez |
| Dependabot uyarıları | Bağımlılık açıkları | Herkese açık ve özel depolarda ücretsiz | Yalnızca GitHub |
| GitHub secret scanning | Gizli anahtarlar ve kimlik bilgileri | Herkese açık depolarda ücretsiz; özel depolarda aktif committer başına aylık 19 dolar | Özel depolarda Secret Protection özelliği gereklidir |
| CodeQL | Kod kalıpları | Herkese açık depolarda ücretsiz; özel depolarda aktif committer başına aylık 30 dolar | Özel depolarda Code Security özelliği gereklidir |
Lisans konusunda iki önemli nokta: Semgrep'in topluluk kuralları, şirket içi ticari kullanıma izin veren ancak bunların yeniden dağıtılmasını veya bir hizmet olarak sunulmasını yasaklayan Semgrep Rules License altındadır. Trivy'yi tercih edecekseniz CVE-2026-33634 açığına dikkat edin: Saldırganlar Mart 2026'da Trivy ekosisteminin belirli kısımlarını kısa süreliğine ele geçirmişti. Her zaman güncel bir sürüm kullanın ve ilgili tüm GitHub Action adımlarını bir commit SHA değerine sabitleyin.
Bir depoyu birkaç komutla taramak: Neler bulduk?
Küçük bir Express fatura API'si geliştirip yerel bir repoya kaydettik. Bu depoda eski sürümlerde dört npm bağımlılığı ve üç Python bağımlılığı, iki sahte gizli anahtar (biri Stripe, diğeri AWS biçiminde), bir SQL injection, bir command injection ve oturum açmış herhangi bir kullanıcıya dilediği organizasyonun faturasını döndüren bir rota (route) yer alıyordu.
Ardından 5 Kasım 2026'da macOS üzerinde araçların her birini çalıştırdık:
npm audit
pip-audit -r requirements.txt --no-deps --disable-pip
osv-scanner scan source -r .
trivy fs --scanners vuln,secret .
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off
semgrep scan --config p/nodejsscan --metrics=off
| Araç (sürüm) | Yakalananlar | Gözden kaçanlar |
|---|---|---|
npm audit (npm 11.12.1) |
Güvenlik açığı bulunan 9 paket: 6 yüksek, 3 düşük | npm paketi olmayan her şey |
| pip-audit 2.10.1 | Sabitlenmiş 3 pakette toplam 16 güvenlik uyarısı | Dolaylı (transitive) paketler (çünkü --no-deps parametresini kullandık) |
| OSV-Scanner 2.7.0 | Dolaylı Python paketleri de dahil olmak üzere 15 pakette 66 benzersiz güvenlik uyarısı | Gizli anahtarlar ve kod hataları |
| Trivy 0.76.1 | 33 bağımlılık bulgusu ve Stripe biçimindeki anahtar | AWS biçimindeki anahtar |
| Gitleaks 8.30.1 | Stripe biçimindeki anahtar | AWS biçimindeki anahtar |
Semgrep 1.183.0, p/default |
Stripe biçimindeki anahtar, command injection, eksik CSRF ara yazılımı notu | SQL injection, AWS biçimindeki anahtar |
Semgrep 1.183.0, p/nodejsscan |
SQL injection, command injection, AWS biçimindeki anahtar | Stripe biçimindeki anahtar |
Öne çıkan üç nokta şunlar:
- Sayılar doğrudan kıyaslanamaz. Bir paket, bir güvenlik uyarısı ve bir bulgu farklı birimlerdir; ayrıca her araç farklı verileri inceler. Toplam sayılara değil, nelerin yakalandığına odaklanın.
- Tek bir gizli bilgi (secret) tarayıcısı yeterli değildir. Hem Gitleaks hem de Trivy, AWS biçimindeki anahtarı gözden kaçırdı.
- Kural kümeleri belirleyicidir. Varsayılan Semgrep paketi, dize birleştirme ile oluşturulmuş yalın bir SQL sorgusunu yakalayamadı.
p/javascript,p/nodejs,p/owasp-top-tenvep/sql-injectionbu repoda hiçbir sonuç vermezken,p/nodejsscansorunu başarıyla yakaladı.
Hiçbir araç fatura rotasındaki açığı işaretlemedi. Bu tek ve küçük bir repo olduğundan, sonuçları kesin bir kıyaslama (benchmark) olarak değil, pratik bir gösterim olarak ele alın. Bu denemede CodeQL çalıştırmadık.
GitHub deponuzu her pull request'te tarayın
GitHub tarafından barındırılan standart runner'lar herkese açık depolarda ücretsizdir. Özel depolarda ise GitHub Free planı aylık 12 dolarlık bir kullanım hakkı sunar; bu da liste fiyatıyla 2 çekirdekli bir Linux runner'da yaklaşık 2.000 dakikaya denk gelir. Bu iş akışı yalın komutlar kullandığından, organizasyonların Gitleaks Action lisans anahtarı temin etmesine gerek kalmaz:
name: repo-scan
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7 # pin to a commit SHA
with:
fetch-depth: 0
- name: Dependencies (npm)
run: npm audit --audit-level=high
- name: Dependencies (Python)
run: pipx run pip-audit -r requirements.txt
- name: Secrets
run: |
curl -sSL https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz | tar xz gitleaks
./gitleaks git . --no-banner
- name: Code patterns
run: pipx run semgrep scan --config p/default --config p/nodejsscan --metrics=off --error
Dört tarayıcının tümü test repomuzda 1 çıkış koduyla sonlandı; GitHub Actions işini başarısız saydıran da bu sıfır dışı çıkış kodudur. Teknoloji yığınınızda gereksinim duymadığınız adımları çıkarabilirsiniz. Aynı ardışık düzende (pipeline) API testleri koşturmak için GitHub Actions ile Apidog CLI rehberini inceleyin.
Dependabot uyarılarını da mutlaka açın. Tüm planlarda ücretsizdirler ve çalışmak için bir pull request açılmasını beklemezler.
Kritik boşluk: Tarayıcıların gözden kaçırdığı yetkilendirme açıkları
Yetkilendirme açıkları kalıp tarayıcıları açısından tespit edilmesi en güç hatalardır; çünkü kod yüzeysel olarak tamamen doğru görünür: geçerli bir sorgu, geçerli bir parametre ve önünde çalışan bir auth ara yazılımı (middleware). Buradaki açık, sorguda yer almayan bir koşuldur ve bu koşulun var olması gerektiğini yalnızca veri modeliniz bilebilir.
// Every scanner passed this
db.query("SELECT * FROM invoices WHERE id = $1", [req.params.id]);
// The fix: scope the lookup to the caller's organization
db.query("SELECT * FROM invoices WHERE id = $1 AND org_id = $2",
[req.params.id, req.user.orgId]);
Bu açık, OWASP API Güvenliği Top 10 2023 listesinde ilk sırada yer alan Nesne Düzeyinde Bozuk Yetkilendirme (Broken Object Level Authorization - BOLA) açığıdır. OWASP, istemci tarafından sağlanan bir ID'nin kullanıldığı her istekte erişim yetkisinin doğrulanmasını ve canlıya alım öncesinde yetkilendirme açıklarını yakalayacak testlerin yazılmasını önerir.
Bir kodlama yapay zekasından (coding agent) yardım almak fayda sağlayabilir. Test reposundaki yorum satırlarını temizledik ve organizasyonlara dair bir ipucu vererek ve vermeyerek Claude Code'dan kodu incelemesini istedik. Her iki denemede de fatura rotasındaki açığı tespit etti. Ancak bu kendi başına maliyetsiz bir yol değildir; zira aracınızın token kullanım kotasını harcar ve sonuçlar çalıştırmadan çalıştırmaya tutarsızlık gösterebilir.
Otomatik bir test ise her pull request'te size kesin bir "geçti" ya da "kaldı" sonucu verir. API tarafındaki güvenlik kapsamı için otomatik API güvenlik açığı tespiti, API güvenlik tarama araçları incelemesi ve API güvenlik testi kontrol listesi başlıklı yazılarımıza göz atabilirsiniz.
Apidog CLI ile yetkilendirme testlerini kodlama aracınıza yaptırın
Bu testleri her rota için tek tek elle yazmakla vakit kaybetmeyin. İşi Apidog CLI ile kodlama aracınıza devredin: Rotalarınızı okur, korunan her kaynak için ayrı bir test oluşturur ve CI sürecinizde sürekli koşacak hazır bir test paketi bırakır. Apidog Free planı 4 kullanıcıya kadar ücretsizdir.
npm install -g apidog-cli@latest
apidog auth login --with-token <YOUR_TOKEN>
apidog skill install
Önceden oluşturulmuş iki test organizasyonu ve her birinde birer kullanıcı bulunan bir test ortamı hazırlayın. Ardından aracınıza şu prompt'u verin:
Read the routes in src/. For each route that returns data owned by an
organization, create an Apidog test scenario in project <id>: log in as
the Org A test user, request an Org B resource by ID, and assert the
status is 403 or 404. Add an Org A request for its own resource and
assert 200, so a broken login can't pass. Group the scenarios in a test
suite, run it against the staging environment, and summarize failures.
Araç yük (payload) yapısını doğrular, senaryoları oluşturur ve test paketini koşturur:
apidog cli-schema get test-scenario-create
apidog cli-schema validate test-scenario-create --file scenario.json
apidog test-scenario create --project <id> --file scenario.json
apidog test-scenario import-steps <scenarioId> --project <id> --source endpoint --ids <endpointIds>
apidog test-suite create --project <id> --file suite.json
apidog run --test-suite <suiteId> --project <id> -e <envId> -r cli,junit

Pozitif doğrulama adımı kritik öneme sahiptir. Bu adım olmadan, hatalı bir temel URL (base URL) de 404 döndürür ve test yanlış bir gerekçeyle başarılı sayılır.
Aynı apidog run komutunu yukarıdaki iş akışına ekleyin; bunu kesinlikle canlı ortamda değil, önceden tanımlanmış test organizasyonlarının yer aldığı bir önizleme (preview) veya staging ortamında çalıştırın. Diğer parametreler için apidog run komut referansına, aracın kurulum detayları içinse Claude Code'da Apidog CLI rehberine bakabilirsiniz.
SSS
Bir depodaki güvenlik açıklarını tespit etmenin en iyi ücretsiz yolu nedir? Bir bağımlılık tarayıcısı, Gitleaks ve Semgrep Community Edition'ı birlikte kullanın; ardından yetkilendirme mantığı için bir çalışma zamanı (runtime) testi ekleyin. Test repomuzda hiçbir araç tek başına tüm açıkları kapsayamadı.
Vercel Security Review ücretsiz mi? Yalnızca 10 Kasım 2026'ya kadar ve yalnızca Pro ile Enterprise ekipleri için ücretsizdir. Sonrasında sağlayıcı token tarifesine ek olarak milyon token başına 0,25 dolar ücretlendirilir. Vercel üzerinde dağıtılmayan depolar henüz desteklenmemektedir.
GitHub gizli bilgi taraması (secret scanning) özel depolarda ücretsiz mi? Hayır. Gizli bilgi taraması ve CodeQL herkese açık depolarda ücretsizdir; fakat özel depolarda aktif committer başına aylık GitHub Secret Protection (19 dolar) veya GitHub Code Security (30 dolar) lisansı gerektirir. Dependabot uyarıları ise hem açık hem özel depolarda ücretsizdir.
Semgrep yetkilendirme açıklarını bulabilir mi? Kullandığımız kural kümeleriyle fatura rotamızdaki açığı işaretleyemedi. Kod tabanınıza özel kurallar yazabilseniz de Community Edition sürümü tek bir fonksiyon veya dosyanın ötesindeki veri akışını izleyemez.
Tarayıcılar bir sızma testinin (penetration test) yerini tutar mı? Hayır. Tarayıcılar ve testler yalnızca bilinen kalıpları ve açıkça tanımladığınız senaryoları denetler. Bir sızma testi ise aklınıza gelmeyen açıkları hedefler; nitekim Vercel'in kendi belgelerinde de sundukları incelemenin bir sızma testi olmadığı açıkça belirtilmektedir.
