跨站脚本攻击通常是通过非法注入HTML代码或JavaScript代码来操控用户浏览器的。
跨站脚本攻击主要分三种
我们讨论一下上面三种类型的XSS攻击场景。
DOM型是纯粹的前端漏洞,一定不能将用户输入的内容直接通过v-html
、outnerHTML
或innerHTML
渲染,否则很容易受到DOM型XSS攻击。
请看下面这种代码:
<body><h1 id="h1"></h1><input id="input" type="text" /></body><script>const input=document.querySelector("#input");
const h1=document.querySelector("#h1");
input.addEventListener("keydown", (e)=> {
if (e.code==="Enter") {
console.log(e.target); h1.innerHTML=e.target.value;
}
});
</script>
入侵者可以很容易通过输入框入侵,通过<script>
注入恶意代码。
处理这类攻击一般可以从这几个方面入手:
v-html
、innerHTML
和outerHTML
,特别是要避免将用户的输入直接渲染,最好是使用vue的模板语法或v-text,如果要使用v-html,必须要确保内容的来源是可信。<
、>
等。我们采用转义的方法看一下效果
// lt和gt为了避免被转义加上了\\,实际代码不用加\\h1.innerHTML = e.target.value .replace(/\\</g, "\\&\\l\\t") .replace(/\\>/g, "\\&\\g\\t");
能够成功防御DOM型XSS攻击。