Kodun için ikinci bir göz.

Kod incelemesi yapacak kimsen yoksa, Project Doctor proje klasörünü senin tarayıcında okur. Sorunlu satırların altını çizer, kenarına ne yapman gerektiğini yazar. Kararı sen verirsin; kodun hiçbir yere gitmez.

Hesap yok. Yapay zekâ yok: aynı klasör, aynı sonuç.

app/api/login/route.ts48 satır // DEFECT: MD5 is a fast hash. Commodity hardware tests billions of // candidates per second, so a leaked table is cracked within hours. // Use argon2id or bcrypt. const hash = crypto.createHash('md5').update(password).digest('hex'); const user = await db.user.findFirst({ where: { email, password: hash } }); if (!user) return Response.json({ message: 'Invalid credentials' }, { status: 401 });
lib/server.ts20 satır // DEFECT: origin '*' together with credentials: true means any website your // users visit can make authenticated requests to this API using their // session cookies, and read the responses. app.use(cors({ origin: '*', credentials: true })); app.get('/export', (req: any, res: any) => { // DEFECT: command injection. `req.query.file` is interpolated into a shell
Dockerfile10 satır# DEFECT: unpinned base image — every rebuild can pull a different Node version.FROM node:latest WORKDIR /appCOPY . .

Örnek projede 43 kâğıt çıktı.

Bir örnek projeyi taradık. Her kâğıtta bir dosya, altı çizili satır ve kenar notu var.

app/api/login/route.tssatır 21 // candidates per second, so a leaked table is cracked within hours. // Use argon2id or bcrypt. const hash = crypto.createHash('md5').update(password).digest('hex'); const user = await db.user.findFirst({ where: { email, password: hash } }); Kritik Parolalar zayıf bir özetleme ile saklanıyor Ne yapmalı: Parola özetlemeyi Argon2id ya da bcrypt'e geçir ve bir sonraki girişte yeniden özetle. Aracın metni (İngilizce) Passwords hashed with MD5

Örnek raporun tamamında 43 kâğıt, terminal çıktısı ve fiş var. Örnek raporu aç

Her taramanın sonunda bir fiş.

Ne tarandı, kaç kural çalıştı, neler atlandı ve dışarıya kaç istek gitti. Hepsi açıkça yazılır. Tarama sırasında dışarı giden istek sıfırdır: tarama sayfası dışarıya bağlanmayı kendi kendine yasaklar.

Kendin bak: Ctrl+Shift+I ile Ağ sekmesini aç ve tara. Ya da önce interneti kapat. Nasıl doğrulanır

Örnek fiş

vibe-coded-app/örnek tarama
Taranan dosya16
Çalışan kural89
Atlanan kural4 (.git yok)
Atlanan dosya0
Bulgu43
Yapay zekâyok
Dışarı giden istek0

Bu bir örnek. Gerçek fiş her taramadan sonra bu sekmede üretilir.

Hangi dilleri inceler?

Kodun ne kadarını okuduğu dile göre değişir. Okumadığı kodu okumuş gibi göstermez.

  • JavaScript, TypeScriptTam inceleme: .js .jsx .ts .tsx .mjs .cjs .mts .cts
  • PythonKısmi inceleme: karmaşıklık, gizli değerler, kritik dosya tespiti ve desenle okuyan 7 güvenlik kuralı
  • Bağımlılıklarnpm ve PyPI
  • Go, Rust, PHP, Ruby, Java/Kotlin, C#, Swift ve diğerleriYalnız gizli değer ve yapılandırma taraması; kodun kendisi incelenmez

Ne yapmaz

Her şeyi bulduğunu söyleyen araçlara inanmıyorsan haklısın. Biz neyi kaçırdığımızı ölçtük.

  • Başkasının kaydına erişim (IDOR)Yakalamaz: ölçümde 11 örnekten 0
  • Python projeleriKısmen: 7 güvenlik kuralı, desenle
  • tRPC rotalarıTanımaz
  • Sözdizimi hatalı dosyalarGüvenlik kurallarına girmez; tarama hangilerini atladığını söyler
  • Kaynağın dışındaki her şeyGörmez: yedekler, barındırma ve sunucu ayarları, üretim veritabanı
  • .git klasörü yoksa çalışmayan kural4 kural
  • Kaç kullanıcıya dayanırSorusunu cevaplamaz
  • Hiç bulgu çıkmamasıAçık olmadığı anlamına gelmez

Kâğıtları sen masaya koy.