在进行document.referrer XSS攻击防御时,首先要检查代码中是否存在document.write、eval、window等可能引发安全风险的危险调用点。随后,通过梳理变量传递链路和函数调用流程,判断用户是否能够控制输入内容。如果用户输入可控,就需要进一步分析这些数据是否会被回显到页面或进入危险执行位置。若存在可执行或可注入的场景,则通常说明可能存在DOM XSS漏洞,此时应及时对输入数据进行编码、过滤或安全处理。
代码审计时常见的审计特征点有:
var elements = location.hash;elements.indexOfvar oBtn=document.getElementById("Btn");oBtn.innerHTMLoBtn.outerHTMLdocument.createElementoBtn.setAttributeoBtn.appendChilddocument.writedocument.writelneval("var x = '" + location.hash + "'");setTimeout("alert('xss')", 1000)window.setTimeoutdocument.setTimeoutwindow.setIntervaldocument.execCommand('ForeColor',false,'#BBDDCC'); document.createElementdocument.createElementNSdocument.createEventdocument.createXxx注:如果业务场景必须将用户输入的数据插入HTML中,应尽量采用更安全的方式,例如innerText()、testContent()等方法,避免直接使用可能触发DOM XSS风险的HTML写入方式。
