T09 · Insecure Skill Coding Practices
- Location
assets/hierarchy-visualizer.html:1747- Finding
Stored DOM-Based Cross-Site Scripting Through Unescaped Hierarchy Data
- Content
View full analysis
{ // Initialize d3.hierarchy rootNodeGlobal = d3.hierarchy(treeData); ``` Hierarchy fields are inserted into a tooltip through D3's `.html()` method: ```javascript d3.select("#tooltip").style("opacity", 1) .html(`${truncate(data.title, 60)}
${data.description || ''}
${(data.type || '').replace(/_/g, ' ')} ${cc ? ` · ${cc} sub-branches` : ' · leaf'} ${hasHidden ? '
Click to expand' : ''}`) .style("left", (event.offsetX + 15) + "px") .style("top", (event.offsetY - 15) + "px"); ``` Additional hierarchy fields are interpolated into `innerHTML`, including an unvalidated URL: ```javascript const goals = (data.goals || []).map(g => `- ${g}
`).join(''); details.innerHTML = `${data.title}
Type:${(data.type || '').replace(/_/g, ' ')}${data.domain ? `Domain:${data.domain}` : ''} ${data.status ? `Status:${data.status}` : ''} ${data.stage ? `Stage:${data.stage}- Remediation
View remediation
