用户输入渲染到HTML时如何防止XSS攻击?我的表单代码可能有漏洞
我在做一个表单,用户输入的内容会直接显示在页面上,但测试时发现可以注入脚本。比如用户输入alert(1)就会执行。现在用handleInput处理输入,但不知道该怎么安全转义:
<div>
用户留言:
<p id="userInput"></p>
</div>
<script>
function handleInput(text) {
document.getElementById('userInput').innerHTML = text;
}
</script>
试过用htmlspecialchars转义,但不确定在JavaScript里该用什么方法处理才安全。直接用textContent会不会更安全?或者需要做其他编码?
innerHTML,这玩意就是XSS的罪魁祸首。换成textContent就能解决大部分问题,因为textContent不会解析HTML,只会当成纯文本处理。改一下你的代码,拿去用:如果你非得用
innerHTML(比如需要支持富文本),那就得手动转义特殊字符。写个简单的转义函数,像这样:第一种方法最简单也最安全,第二种适合复杂需求。不过记得,能不用
innerHTML就别用,省得给自己找麻烦。textContent代替innerHTML,浏览器会自动转义HTML特殊字符。改完的代码长这样: