İstekleri günlüğe yazma
Güvenlik · Zorluk 4/5 · TypeScript · 48 satırKöken: Kurgu
Görev
Yapay zekâdan istenen
Entegrasyon API'miz için hata ayıklamaya yarayan bir istek günlüğü yaz. Günlükçü işleyiciden önce çalışır ve aynı istek nesnesini alır. Her istek için tek satır JSON yaz: zaman, yöntem, yol, sorgu ve gövde. Adında password, token, secret ya da apikey geçen her alan (büyük-küçük harf, _ ve - yok sayılır) hangi derinlikte olursa olsun "[redacted]" ile değiştirilmeli. Gövdeler entegrasyon ayarlarıdır, kişisel veri taşımaz; yollarda gizli bilgi yoktur.
Teslim notu
Yapay zekâ kodu teslim ederken şunu yazdı:
“Gizli alanlar her derinlikte maskeleniyor; apiKey, api_key ve API-KEY gibi yazımlar da yakalanıyor. Sorgu ve gövde aynı fonksiyondan geçiyor, saat parametreyle geliyor.”
Yapay zekânın yazdığı kod
TypeScript48 satırHatalı bulduğun satırları işaretle; her işarete önem seç ve nedenini bir cümleyle yaz.
Satıra tıkla ya da dokun. Klavyede satıra gidip Enter'a bas.
Önem nasıl seçilir
- KritikVeri kaybı, güvenlik açığı ya da para kaybı
- ÖnemliGörevin istediği bir durumda kullanıcı yanlış sonuç alır
- KüçükGörevin dışında kalan nadir bir uç durum ya da okunurluk
Test konusunda önem, testin yakalamadığı hatalı uygulamanın etkisine göre belirlenir.
Gerekçe puanlanmaz; sonuçta örnek cevapla karşılaştırırsın.
export type Json = null | boolean | number | string | Json[] | { [key: string]: Json };export interface IncomingRequest { method: string; path: string; query: Record<string, string>; body: Json;}const SECRET_PARTS = ["password", "token", "secret", "apikey"];const MASK = "[redacted]";function isSecretKey(key: string): boolean { const normalized = key.toLowerCase().replace(/[-_]/g, ""); return SECRET_PARTS.some((part) => normalized.includes(part));}export function redact(value: Json): Json { if (value === null || typeof value !== "object" || Array.isArray(value)) { return value; } for (const key of Object.keys(value)) { if (isSecretKey(key)) { value[key] = MASK; } else { value[key] = redact(value[key] ?? null); } } return value;}export function logRequest( request: IncomingRequest, write: (line: string) => void, now: Date,): void { const { method, path, query, body } = request; write( JSON.stringify({ at: now.toISOString(), method, path, query: redact(query), body: redact(body), }), );}Kanıtlayan test
Doğru seçenek, bu kodda başarısız olan, yani hatayı ortaya çıkaran testtir.
Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler