Pasif İstemci Tarafı Maruziyet Analizi
Frontend görünürlüğünü etik sınırlar içinde okunabilir güvenlik istihbaratına dönüştürür.
TokenTrace, bir hedef web sayfasının istemci tarafında görünür HTML kaynağını ve yalnızca o sayfanın doğrudan referans verdiği JavaScript dosyalarını pasif olarak inceleyen etik bir maruziyet analiz platformudur.
Amaç, istemci tarafında istemeden görünür hale gelmiş güvenlik sinyallerini savunmacı ekipler için daha okunabilir, daha açıklanabilir ve daha yönetilebilir hale getirmektir.
TokenTrace bir saldırı aracı değildir.
Yapmaz:
- aktif sömürü testi
- brute force
- yetki atlatma
- recursive crawl
- gizli yol fuzzing
- payload enjeksiyonu
- saldırı zinciri kurma
Buna karşılık şu problemi çözer:
- frontend derlemelerine yanlışlıkla gömülmüş secret göstergeleri
- token veya auth kalıntıları
- riskli client-side storage kullanımı
- staging, dev veya internal ortam referansları
- istemciye sızmış cloud yapılandırmaları
- hassas endpoint referansları
- test artefact ve geliştirici hataları
TokenTrace, “tek dosyalık güvenlik scripti” gibi değil, gerçek bir güvenlik ürünü gibi hissedilmek üzere tasarlanmıştır.
Hedefler:
- pasif ve etik kapsam
- profesyonel ve modern dashboard deneyimi
- Türkçe raporlama dili
- bağlamsal ve dengeli severity yaklaşımı
- false positive farkındalığı
- üretim tarzı kod organizasyonu
- kolay genişletilebilir servis mimarisi
- FastAPI tabanlı Python backend
- modern koyu temalı güvenlik dashboard arayüzü
- sıkı scope ve budget kontrolleri
- HTML + doğrudan bağlı JS analizi
- secret, token, auth misuse, cloud config, endpoint ve environment leak tespiti
- opsiyonel yüksek entropy modülü
- severity + confidence score üretimi
- Türkçe açıklama, aksiyon ve false positive notları
- JSON export
- filtrelenebilir bulgu tablosu
- detay modalı, canlı telemetri ve risk özeti paneli
Arayüz, tek sayfalık bir dashboard içinde birden fazla işlevsel widget mantığıyla tasarlanmıştır. Böylece kullanıcı aynı ekran içinde hem komut verebilir hem ilerlemeyi izleyebilir hem de sonuçları inceleyebilir.
-
Hero WidgetÜrünün konumlandırmasını, etik çerçevesini ve giriş aksiyonunu sunar. -
Scope Guard WidgetPasif analiz karakterini, kapsam sınırlarını ve çekirdek ürün kimliğini gösterir. -
Analysis Command WidgetKullanıcının hedef URL, timeout, dosya limiti, scope modu ve analiz seçeneklerini belirlediği kontrol yüzeyidir. -
Preset WidgetVarsayılan analiz davranışını ve false positive azaltma yaklaşımını hızlıca açıklar. -
Live Telemetry WidgetAnaliz ilerleme durumu, sayaçlar, log akışı ve işlem adımlarını gösterir. -
Progress WidgetAdım bazlı ilerleme yüzdesini ve operasyon aşamasını sunar. -
Summary WidgetBulgu yoğunluğunu seviye bazında özetler. -
Insight WidgetEn baskın risk tonunu kısa bir özet olarak verir. -
Findings Table WidgetSonuçların filtrelenebilir, sıralanabilir ve detay açılabilir biçimde incelenmesini sağlar. -
Findings Posture WidgetGenel bulgu yoğunluğunu “acil müdahale”, “düşük yoğunluklu sinyal” gibi anlaşılır dile çevirir. -
Export WidgetJSON, metin özet ve kopyalanabilir rapor çıktıları üretir. -
About / Ethics WidgetÜrünün sınırlarını, kullanım amacını ve etik çerçevesini açıklar.
-
Budget Heatmap WidgetTimeout, JS sayısı ve dosya boyutu bütçelerinin doluluk oranını görselleştirebilir. -
Category Distribution WidgetKategori bazlı bulgu dağılımı için mini chart gösterebilir. -
Source Footprint WidgetHangi JS dosyalarının en çok bulgu ürettiğini sıralayabilir. -
Diff WidgetEski ve yeni analiz sonuçlarını karşılaştırabilir. -
Team Notes WidgetGüvenlik ve frontend ekiplerinin yorum bırakmasını sağlayabilir.
TokenTrace’in en önemli prensiplerinden biri sınırlı çalışma bütçesidir. Buradaki budget, hem performans hem etik sınır anlamına gelir.
-
timeoutTek bir isteğin ne kadar süreceğini sınırlar. -
max_js_filesAnaliz edilecek doğrudan JS dosyası sayısını sınırlar. -
max_js_size_kbHer JS dosyasının maksimum boyutunu sınırlar. -
scope_modeYalnızca aynı-origin veya güvenli referans kümesinde çalışmayı zorunlu kılar. -
direct_js_onlySadece HTML içinde doğrudan referans verilen script’leri işler. -
enable_entropyDaha pahalı ve daha gürültülü olabilecek entropy taramasını açıp kapatır. -
export_jsonSonucun dosyaya alınması davranışını kontrol eder.
- etik sınırların dışına çıkmamak için
- performansı öngörülebilir tutmak için
- kullanıcıya kontrollü analiz davranışı sunmak için
- istemeden genişleyen tarama yüzeyini önlemek için
- kaynak tüketimini açıklanabilir tutmak için
- URL dışı alan genişlemesi yok
- recursive crawl yok
- brute force yok
- saldırı zinciri yok
- yalnızca hedef HTML + doğrudan JS
| Budget Alanı | Varsayılan | Üst Sınır | Güvenlik Etkisi | Performans Etkisi | Not |
|---|---|---|---|---|---|
timeout |
12 sn | 30 sn | Aşırı bekleme ve kontrolsüz akışı önler | Yavaş hedeflerde analiz süresini belirler | Düşük timeout bazı hedeflerde eksik veri üretebilir |
max_js_files |
10 | 25 | Kapsam büyümesini sınırlar | Daha çok dosya = daha fazla işlem süresi | Yalnızca doğrudan referanslı script’ler sayılır |
max_js_size_kb |
512 KB | 2048 KB | Dev bundle’ların kontrolsüz etkisini sınırlar | Büyük bundle’lar CPU ve parse maliyeti oluşturur | Minified dosyalarda false positive artabilir |
scope_mode |
same-origin |
safe-reference |
Etik sınırı belirler | Daha gevşek mod daha fazla network erişimi doğurur | Güvenli referans modu yalnızca belirli host kalıplarını kapsar |
direct_js_only |
true |
true |
Zincirleme keşfi tamamen kapatır | Analizi hafif tutar | Bu bir güvenlik freni olarak düşünülmelidir |
enable_entropy |
true |
true/false |
Şüpheli rastgele dizeleri bulur | Ek hesaplama maliyeti getirir | Gürültü üretme riski en yüksek alanlardan biridir |
export_json |
false |
true/false |
Sonucu arşivlenebilir hale getirir | I/O etkisi düşüktür | CI ve rapor akışları için yararlıdır |
timeout: 12max_js_files: 10max_js_size_kb: 512scope_mode:same-originenable_entropy:true
Kullanım: çoğu genel frontend gözden geçirmesi
timeout: 8max_js_files: 6max_js_size_kb: 256scope_mode:same-originenable_entropy:false
Kullanım: hızlı, düşük gürültülü pre-check
timeout: 20max_js_files: 20max_js_size_kb: 1024scope_mode:safe-referenceenable_entropy:true
Kullanım: kurumsal frontend dağıtımı veya ağır SPA gözden geçirmesi
tokentrace/
├── app/
│ ├── core/
│ │ ├── config.py
│ │ ├── logging_config.py
│ │ ├── patterns.py
│ │ └── safety.py
│ ├── models/
│ │ ├── analysis_request.py
│ │ ├── analysis_result.py
│ │ ├── finding.py
│ │ └── scan_log.py
│ ├── routes/
│ │ ├── api.py
│ │ └── web.py
│ ├── services/
│ │ ├── analysis_service.py
│ │ ├── export_service.py
│ │ ├── extract_service.py
│ │ ├── fetch_service.py
│ │ ├── report_service.py
│ │ └── scoring_service.py
│ ├── static/
│ │ ├── css/
│ │ └── js/
│ ├── templates/
│ └── utils/
├── reports/
├── requirements.txt
├── README.md
└── run.py
- URL doğrulanır
- HTML pasif olarak çekilir
- Script etiketleri ayrıştırılır
- JS URL’leri normalize edilir
- Scope kuralları uygulanır
- Dosya sayısı ve boyut budget’ı uygulanır
- HTML analiz edilir
- Her JS dosyası ayrı analiz edilir
- Bulgular deduplicate edilir
- Severity ve confidence hesaplanır
- Türkçe açıklamalar oluşturulur
- Sonuç arayüz ve export katmanına döndürülür
Mavi-> arayüz ve kullanıcı akışıTurkuaz-> servisler ve analiz motoruTuruncu-> scope / budget karar noktalarıKırmızı-> warning / skip / risk alanlarıYeşil-> başarılı çıktı ve rapor üretimiMor-> açıklama, export ve yardımcı katmanlar
flowchart LR
U[Kullanıcı] --> W[Web Arayüzü]
W --> A[POST /api/analyze]
A --> S[Analysis Service]
S --> F[Fetch Service]
S --> E[Extract Service]
S --> C[Scoring Service]
S --> R[Report Service]
S --> X[Export Service]
F --> T[Hedef HTML]
F --> J[Doğrudan JS Dosyaları]
S --> O[Analysis Result]
O --> W
W --> U
classDef ui fill:#0f2747,stroke:#62d8ff,color:#ffffff,stroke-width:1.5px;
classDef service fill:#0b3b3f,stroke:#2dd4bf,color:#ffffff,stroke-width:1.5px;
classDef source fill:#3a2a0f,stroke:#f59e0b,color:#ffffff,stroke-width:1.5px;
classDef output fill:#16331f,stroke:#22c55e,color:#ffffff,stroke-width:1.5px;
classDef helper fill:#31204d,stroke:#a78bfa,color:#ffffff,stroke-width:1.5px;
class U,W,A ui;
class S,F,E,C service;
class T,J source;
class O output;
class R,X helper;
flowchart TD
A[Target URL] --> B[HTML Fetch]
B --> C[Script Extraction]
C --> D{Same-Origin veya Safe Reference?}
D -- Hayır --> E[Atla / Warning]
D -- Evet --> F{Dosya Sayısı Limiti Aşıldı mı?}
F -- Evet --> E
F -- Hayır --> G{Dosya Boyutu Limiti Aşıldı mı?}
G -- Evet --> E
G -- Hayır --> H[JS Fetch + Analyze]
classDef input fill:#0f2747,stroke:#60a5fa,color:#ffffff,stroke-width:1.5px;
classDef process fill:#0b3b3f,stroke:#2dd4bf,color:#ffffff,stroke-width:1.5px;
classDef decision fill:#4a2e0f,stroke:#f59e0b,color:#ffffff,stroke-width:1.5px;
classDef reject fill:#4b1d24,stroke:#ef4444,color:#ffffff,stroke-width:1.5px;
class A input;
class B,C,H process;
class D,F,G decision;
class E reject;
flowchart LR
I[Ham İçerik] --> P[Pattern Matching]
P --> Q[Context Filtering]
Q --> D[Deduplication]
D --> S[Severity Scoring]
S --> T[Turkish Explanation Builder]
T --> O[Final Findings]
classDef source fill:#13263c,stroke:#60a5fa,color:#ffffff,stroke-width:1.5px;
classDef analysis fill:#103636,stroke:#14b8a6,color:#ffffff,stroke-width:1.5px;
classDef score fill:#4a2e0f,stroke:#f59e0b,color:#ffffff,stroke-width:1.5px;
classDef result fill:#16331f,stroke:#22c55e,color:#ffffff,stroke-width:1.5px;
classDef explain fill:#31204d,stroke:#a78bfa,color:#ffffff,stroke-width:1.5px;
class I source;
class P,Q,D analysis;
class S score;
class T explain;
class O result;
flowchart TB
A[Analysis Form Widget] --> B[Telemetry Widget]
B --> C[Summary Widget]
B --> D[Insight Widget]
C --> E[Findings Table Widget]
E --> F[Finding Detail Modal Widget]
C --> G[Export Widget]
D --> G
classDef form fill:#0f2747,stroke:#60a5fa,color:#ffffff,stroke-width:1.5px;
classDef live fill:#0b3b3f,stroke:#2dd4bf,color:#ffffff,stroke-width:1.5px;
classDef summary fill:#4a2e0f,stroke:#f59e0b,color:#ffffff,stroke-width:1.5px;
classDef detail fill:#4b1d24,stroke:#fb7185,color:#ffffff,stroke-width:1.5px;
classDef export fill:#16331f,stroke:#22c55e,color:#ffffff,stroke-width:1.5px;
class A form;
class B live;
class C,D summary;
class E,F detail;
class G export;
[BLUE]kullanıcı ve arayüz yüzeyi[CYAN]analiz ve telemetri[AMBER]scope, karar ve özet[GREEN]export ve başarılı çıktı[RED]detay, risk ve bulgu inceleme
┌──────────────────────────────────────────────────────────────────────────────┐
│ [BLUE] TokenTrace Ana Sayfa / Analiz / Bulgular │
├──────────────────────────────────────────────────────────────────────────────┤
│ [BLUE] Hero Widget │ [CYAN] Scope Guard / Mini Stat Cards │
│ Pasif Maruziyet Analizi │ │
│ CTA + Etik Not │ │
├──────────────────────────────────────────────────────────────────────────────┤
│ [AMBER] Analysis Command │ [CYAN] Live Telemetry │
│ URL / Timeout / Scope / Limit │ Durum / Progress / Log / Sayaçlar │
├──────────────────────────────────────────────────────────────────────────────┤
│ [AMBER] Summary Widget │ [GREEN] Export Widget │
│ Kritik / Yüksek / Orta / Düşük │ JSON / Copy / Summary │
├──────────────────────────────────────────────────────────────────────────────┤
│ [RED] Findings Table Widget │
│ Search / Filter / Sort / Detail Modal │
├──────────────────────────────────────────────────────────────────────────────┤
│ [BLUE] About / Ethics / Limitations Widget │
└──────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ [RED] Bulgu Adı [Kritik] │
├──────────────────────────────────────────────┤
│ [AMBER] Tür Secret Exposure │
│ [BLUE] Kaynak /static/app.js │
│ [BLUE] Satır 182 │
│ [GREEN] Güven 95/100 │
├──────────────────────────────────────────────┤
│ [RED] Eşleşen İfade │
│ [AMBER] Eşleşen Bağlam │
│ [AMBER] Neden Önemli │
│ [CYAN] Teknik Açıklama │
│ [BLUE] False Positive Notu │
│ [GREEN] Önerilen Aksiyon │
│ [BLUE] Geliştirici Notu │
│ [RED] Risk Özeti │
└──────────────────────────────────────────────┘
┌──────────────────────┐
│ [BLUE] Target URL │
└─────────┬────────────┘
│
v
┌──────────────────────┐
│ [CYAN] HTML Fetch │
└─────────┬────────────┘
│
v
┌──────────────────────┐
│ [CYAN] JS Extraction │
└─────────┬────────────┘
│
v
┌────────────────────────────────┐
│ [AMBER] Scope + Budget Check │
│ same-origin? │
│ file count ok? │
│ file size ok? │
└─────────┬──────────────────────┘
│
v
┌──────────────────────┐
│ [CYAN] JS Analyze │
└─────────┬────────────┘
│
v
┌──────────────────────┐
│ [GREEN] Report Build │
└──────────────────────┘
- Python 3.11+
- modern bir tarayıcı
- ağ erişimi olan yerel çalışma ortamı
- Sanal ortam oluşturun:
python -m venv .venv- Sanal ortamı etkinleştirin:
Windows PowerShell:
.venv\Scripts\Activate.ps1- Bağımlılıkları yükleyin:
pip install -r requirements.txt- Uygulamayı başlatın:
python run.py- Tarayıcıda açın:
http://127.0.0.1:8000
- Hedef URL girin
- Timeout belirleyin
- Maksimum JS sayısını girin
- Maksimum JS boyutunu belirleyin
- Scope modunu seçin
- İsterseniz entropy modunu açın
- İsterseniz JSON export seçeneğini açın
Analizi Başlatdüğmesine basın- Sonuç kartlarını, canlı logları ve bulgu detaylarını inceleyin
https://example.com- yetkili olduğunuz staging uygulamaları
- kendi frontend build çıktılarınız
- kurum içi izinli güvenlik doğrulama hedefleri
-
GET /Ana dashboard -
GET /aboutHakkında sayfası -
GET /api/healthSağlık kontrolü -
POST /api/analyzeAnaliz başlatır -
POST /api/export/jsonSonuç nesnesini indirilebilir JSON cevabı olarak döndürür
{
"url": "https://example.com",
"timeout": 12,
"max_js_files": 10,
"max_js_size_kb": 512,
"scope_mode": "same-origin",
"direct_js_only": true,
"enable_entropy": true,
"export_json": false
}Tam örnek sonuç için:
-
KritikMuhtemel özel credential, secret key veya yüksek etkili sabit gizli değer -
YüksekGüçlü auth misuse, test credential, muhtemel bearer token veya servis seviyesi risk -
OrtaAnlamlı ama bağlama bağlı güvenlik sinyali -
DüşükYapılandırma görünürlüğü, referans, public key veya zayıf kanıt
Confidence skoru 0-100 aralığındadır ve şu değişkenlerden etkilenir:
- desenin kuvveti
- bağlamın kalitesi
- anahtar tipinin niteliği
- placeholder olasılığı
- public veya publishable config olasılığı
Secret ExposureToken PatternAuth MisuseSensitive Endpoint ReferenceCloud Config ExposureClient Storage RiskTest ArtifactEnvironment LeakHigh Entropy Suspicion
TokenTrace yalnızca pasif ve savunmacı analiz için tasarlanmıştır.
Bu araç yalnızca yetkili olduğunuz sistemlerde kullanılmalıdır.
- sonuçlar regex ve bağlamsal sezgilerle üretilir
- minified dosyalarda satır doğruluğu düşebilir
- bazı public config değerleri zararsız olabilir
- her JWT benzeri yapı gerçek token değildir
- entropy bulguları hash, nonce veya build çıktısı olabilir
- yalnızca doğrudan referans verilen JS dosyaları incelenir
Her bulgu için Türkçe false positive açıklaması döndürülür. Özellikle şu senaryolarda manuel doğrulama şarttır:
pk_live,pk_testgibi publishable key’ler- Firebase istemci yapılandırmaları
- dokümantasyon veya demo amaçlı gömülü örnekler
- placeholder secret görünümleri
- minified bundle içindeki anlamsız entropy eşleşmeleri
python -m compileall app
python run.pySonra:
http://127.0.0.1:8000
http://127.0.0.1:8000/about
http://127.0.0.1:8000/api/health
https://example.com
Beklenen davranış:
- HTML çekilir
- JS referansı yoksa sıfır JS ile güvenli şekilde sonuç döner
- log alanı dolu gelir
- sonuç özeti düzgün üretilir
- kalıcı analiz geçmişi
- PDF rapor çıktısı
- AST tabanlı JS bağlam analizi
- özel detection profile desteği
- allowlist ve ignore rule yönetimi
- CI ve webhook entegrasyonu
- budget heatmap widget
- kategori bazlı mini chart widget
- source footprint ve diff widget
- çoklu çalışma alanı
- rol tabanlı rapor paylaşımı
- analiz diff ve sürüm karşılaştırma
- takım içi yorumlama akışı
- ileri düzey görsel trend paneli
TokenTrace, görünen her şeyi “kritik” ilan eden gürültülü bir tarayıcı olmamayı hedefler. İdeal kullanım biçimi, pasif görünürlüğü okunabilir hale getirmek ve geliştirici ile güvenlik ekipleri arasında ortak bir inceleme yüzeyi oluşturmaktır.