From 064d6dfa2aef16c59d1b28f621e650376d7476c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Sat, 20 Jun 2026 14:12:13 +0200 Subject: [PATCH] =?UTF-8?q?Bezbednost:=20ntechToast=20koristi=20textConten?= =?UTF-8?q?t=20za=20tekst=20poruke=20(XSS=20za=C5=A1tita)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CodeQL js/xss-through-dom — flash poruku server HTML-escape-uje, ali textContent je dekodira, pa bi innerHTML ponovo interpretirao sadržaj kao HTML. Sada tekst ide kroz textContent, a samo statički SVG kroz innerHTML. --- web/templates/teme/podrazumevana/base.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/templates/teme/podrazumevana/base.html b/web/templates/teme/podrazumevana/base.html index 763b678..b93cb9c 100644 --- a/web/templates/teme/podrazumevana/base.html +++ b/web/templates/teme/podrazumevana/base.html @@ -289,7 +289,12 @@ var svg = tip === 'greska' ? '' : ''; - t.innerHTML = svg + '' + tekst + ''; + // SVG je statički literal (bezbedan za innerHTML); korisnički tekst ide + // preko textContent da se ne reinterpretira kao HTML (XSS zaštita) + t.innerHTML = svg; + var tekstSpan = document.createElement('span'); + tekstSpan.textContent = tekst; + t.appendChild(tekstSpan); // prilagođavamo poziciju za mobilne uređaje t.style.bottom = '24px'; t.style.right = '16px';