İçeriğe geç

İ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ır

Hatalı 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.

0/5 işaret
Ö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 };
3
export interface IncomingRequest {
  method: string;
  path: string;
  query: Record<string, string>;
  body: Json;
}
10
const SECRET_PARTS = ["password", "token", "secret", "apikey"];
const MASK = "[redacted]";
13
function isSecretKey(key: string): boolean {
  const normalized = key.toLowerCase().replace(/[-_]/g, "");
  return SECRET_PARTS.some((part) => normalized.includes(part));
}
18
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;
}
32
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.

Test seçenekleri
Göndermek için en az bir satır işaretle.

Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler