Kod Deponuzdaki Güvenlik Açıklarını Ücretsiz Olarak Nasıl Tespit Edebilirsiniz?

Ücretsiz tarayıcılar güvenlik açığı barındıran bağımlılıkları, sızdırılan gizli bilgileri ve injection açıklarını tespit edebiliyor. Bir test reposunda bu araçlardan altısını çalıştırdık; ardından hiçbirinin yakalayamadığı yetkilendirme açığının nasıl test edileceğini gösteriyoruz.

Ashley Innocent

Ashley Innocent

5 November 2026

Kod Deponuzdaki Güvenlik Açıklarını Ücretsiz Olarak Nasıl Tespit Edebilirsiniz?

Kurumsal İçin Apidog

Şirket İçi (On-Premises) Dağıtım

SSO ve RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfedin

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.

Bir depo taramasının üst üste binen dört katmanı: bağımlılıklar, gizli anahtarlar ve kod kalıplarının her biri için ücretsiz tarayıcılar bulunurken yetkilendirme mantığı bir çalışma zamanı testi 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:

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
Sıralama şeması: Org A'daki bir test kullanıcısı giriş yapar, belirteç alır, Org B faturası talep eder; test 403 veya 404 durum kodunda başarılı olur, 200 durum kodunda ise başarısız olur

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.

button

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.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin