T09 · Insecure Skill Coding Practices
- Location
references/visualization-template.html:601- Finding
DOM-Based Script Injection in the Generated Visualization Page
- Content
View full analysis
{ const card = document.createElement('div'); card.className = 'char-card'; card.onclick = () => showCharModal(c); card.innerHTML = `${c.name[0]}${c.name}${c.role || ''}${c.desc || ''}`; grid.appendChild(card); }); } function renderTimeline() { const tl = document.getElementById('timeline'); tl.innerHTML = ''; DATA.events.forEach(e => { const item = document.createElement('div'); item.className = 'tl-item'; item.innerHTML = `${e.time || ''}${e.title || ''}${e.desc || ''}`; tl.appendChild(item); }); } function renderClueCards(filter) { const grid = document.getElementById('clue-grid'); grid.innerHTML = ''; const clues = filter === 'all' ? DATA.clues : DATA.clues.filter(c => c.type === filter); const typeNames = { C: '物证', M: '口供', T: '电子证据', W: '其他' }; clues.forEach(c => { const card = document.createElement('div'); card.className = 'clue-card'; card.innerHTML = `${typeNames[c.type] || c.type} · ${c.id || ''}${c.name || ''}${c.desc || ''}关联:${(c.relatedChars || []).join('、')}`; grid.appendChild(card); }); } ``` Additional unsafe sin ...[truncated 3257 chars]- Remediation
View remediation
``` 8. Add automated tests using payloads in every generated field to verify that they are rendered only as text and never become active DOM elements or executable attributes. ]]>
