Corrigir 5 vulnerabilidades XSS no frontend
Sanitizar valores dinâmicos com escapeHtml em pontos que estavam sem proteção: tags no modal de agente, campo model no card, mensagens de toast, prompt do modal e expressão cron nos agendamentos.
This commit is contained in:
@@ -119,7 +119,7 @@ const AgentsUI = {
|
|||||||
<div class="agent-meta">
|
<div class="agent-meta">
|
||||||
<span class="agent-meta-item">
|
<span class="agent-meta-item">
|
||||||
<i data-lucide="cpu"></i>
|
<i data-lucide="cpu"></i>
|
||||||
${model}
|
${Utils.escapeHtml(model)}
|
||||||
</span>
|
</span>
|
||||||
<span class="agent-meta-item">
|
<span class="agent-meta-item">
|
||||||
<i data-lucide="clock"></i>
|
<i data-lucide="clock"></i>
|
||||||
@@ -241,7 +241,7 @@ const AgentsUI = {
|
|||||||
const tagsChips = document.getElementById('agent-tags-chips');
|
const tagsChips = document.getElementById('agent-tags-chips');
|
||||||
if (tagsChips) {
|
if (tagsChips) {
|
||||||
tagsChips.innerHTML = tags.map((t) =>
|
tagsChips.innerHTML = tags.map((t) =>
|
||||||
`<span class="tag-chip">${t}<button type="button" data-tag="${t}" class="tag-remove" aria-label="Remover tag ${t}">×</button></span>`
|
`<span class="tag-chip">${Utils.escapeHtml(t)}<button type="button" data-tag="${Utils.escapeHtml(t)}" class="tag-remove" aria-label="Remover tag ${Utils.escapeHtml(t)}">×</button></span>`
|
||||||
).join('');
|
).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const Modal = {
|
|||||||
const inputEl = document.getElementById('prompt-modal-input');
|
const inputEl = document.getElementById('prompt-modal-input');
|
||||||
|
|
||||||
if (titleEl) titleEl.textContent = title;
|
if (titleEl) titleEl.textContent = title;
|
||||||
if (messageEl) messageEl.innerHTML = message;
|
if (messageEl) messageEl.textContent = message;
|
||||||
if (inputEl) inputEl.value = defaultValue;
|
if (inputEl) inputEl.value = defaultValue;
|
||||||
|
|
||||||
Modal.open('prompt-modal-overlay');
|
Modal.open('prompt-modal-overlay');
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ const SchedulesUI = {
|
|||||||
<td>${Utils.escapeHtml(schedule.agentName || '—')}</td>
|
<td>${Utils.escapeHtml(schedule.agentName || '—')}</td>
|
||||||
<td class="schedule-task-cell" title="${Utils.escapeHtml(schedule.taskDescription || '')}">${Utils.escapeHtml(schedule.taskDescription || '—')}</td>
|
<td class="schedule-task-cell" title="${Utils.escapeHtml(schedule.taskDescription || '')}">${Utils.escapeHtml(schedule.taskDescription || '—')}</td>
|
||||||
<td>
|
<td>
|
||||||
<code class="font-mono">${cronExpr}</code>
|
<code class="font-mono">${Utils.escapeHtml(cronExpr)}</code>
|
||||||
</td>
|
</td>
|
||||||
<td>${nextRun}</td>
|
<td>${nextRun}</td>
|
||||||
<td><span class="badge ${statusClass}">${statusLabel}</span></td>
|
<td><span class="badge ${statusClass}">${statusLabel}</span></td>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const Toast = {
|
|||||||
|
|
||||||
toast.innerHTML = `
|
toast.innerHTML = `
|
||||||
<span class="toast-icon" data-lucide="${iconName}"></span>
|
<span class="toast-icon" data-lucide="${iconName}"></span>
|
||||||
<span class="toast-message">${message}</span>
|
<span class="toast-message">${Utils.escapeHtml(message)}</span>
|
||||||
<button class="toast-close" aria-label="Fechar notificação">
|
<button class="toast-close" aria-label="Fechar notificação">
|
||||||
<i data-lucide="x"></i>
|
<i data-lucide="x"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user