Ana içeriğe geç

Yardımcı Fonksiyonlar (Utils)

src/shared/utils.ts — Paylaşılan güvenlik ve yardımcı fonksiyonlar.

Önemli Kural

Bu fonksiyonlar asla yerel olarak yeniden tanımlanmaz. Tüm kullanım shared/utils.ts'ten import edilmelidir.

escapeHtml()

HTML metin içeriğini güvenli hale getirir. XSS saldırılarını önler.

export function escapeHtml(text: string): string

Parametreler:

  • text — Escape edilecek metin

Dönüş: Güvenli HTML metin

Yöntem: DOM API kullanır — document.createTextNode() ile güvenli metin oluşturur.

Koruduğu Karakterler:

GirdiÇıktı
<&lt;
>&gt;
&&amp;
"&quot;
'&#039;

Kullanım:

import { escapeHtml } from "../shared/utils";

// ✅ Güvenli DOM ekleme
element.innerHTML = `<span>${escapeHtml(userValue)}</span>`;

// ❌ Tehlikeli
element.innerHTML = `<span>${userValue}</span>`;

escapeAttr()

HTML attribute değerlerini güvenli hale getirir.

export function escapeAttr(text: string): string

Parametreler:

  • text — Escape edilecek attribute değeri

Dönüş: Güvenli attribute string

Koruduğu Karakterler:

KarakterDönüşüm
&&amp;
"&quot;
'&#039;
<&lt;
>&gt;

Kullanım:

import { escapeAttr } from "../shared/utils";

// ✅ Güvenli attribute
html = `<div data-value="${escapeAttr(fieldValue)}">...</div>`;

// ❌ Tehlikeli
html = `<div data-value="${fieldValue}">...</div>`;

copyToClipboard()

Metni panoya kopyalar. Modern ve fallback yöntemlerini destekler.

export function copyToClipboard(text: string): Promise<void>

Parametreler:

  • text — Panoya kopyalanacak metin

Yöntemler:

  1. Modern (tercih edilir): navigator.clipboard.writeText()

    • HTTPS gerektirir
    • Kullanıcı izni gerekebilir
  2. Fallback (HTTP ortamlar için): document.execCommand('copy')

    • Geçici textarea oluşturur
    • execCommand() ile kopyalar
    • Textarea'yı temizler

Kullanım:

import { copyToClipboard } from "../shared/utils";

try {
await copyToClipboard(jsonText);
showNotification("Kopyalandı!", "success");
} catch (error) {
showNotification("Kopyalama başarısız", "error");
}

Güvenlik Notu

Bu fonksiyonlar, Graytool'un XSS (Cross-Site Scripting) saldırılarına karşı birincil savunma hattıdır:

Log verisi (güvenilmeyen) → escapeHtml/escapeAttr → DOM'a güvenli ekleme

Log verileri Graylog kullanıcıları tarafından üretilir ve potansiyel olarak zararlı içerik barındırabilir. Bu nedenle tüm log verileri DOM'a eklenmeden önce escape edilmelidir.