前端安全审计时如何防止XSS攻击?

巧云酱~ 阅读 38

最近在做项目的安全审计,发现有个地方可能有XSS漏洞。用户输入的内容直接插到页面里了,虽然用了innerText,但不确定是不是真的安全。

比如下面这段代码,把URL参数里的值直接显示出来,这样写会不会被注入脚本?该怎么改才安全?

<div id="user-content"></div>
<script>
  const urlParams = new URLSearchParams(window.location.search);
  const msg = urlParams.get('msg') || '默认消息';
  document.getElementById('user-content').innerText = msg;
</script>
我来解答 赞 9 收藏
二维码
手机扫码查看
1 条解答
慕容静依
innerText确实是安全的,这货会把内容当作纯文本处理,不会解析任何HTML标签。你代码里这样写,攻击者就是往msg里塞 或者 这样的payload,浏览器也只会把它显示成字符串,不会执行。

官方文档里说innerText会自动对内容进行HTML转义,跟textContent的区别在于innerText会处理CSS样式和隐藏元素,但安全效果是一样的。

不过别高兴太早,你这个写法在当前场景是安全的,但安全审计不能只看一处。URL参数这玩意儿来源不可控,虽然显示层面用了innerText,但得注意几点:

第一,如果其他地方用到这个msg,比如拼接到innerHTML里、放到eval里执行、或者写入到HTML属性值(比如 里的href),那分分钟跪给你看。

第二,URL参数本身也可以用来做钓鱼,比如参数值里带 javascript:alert(1) 之类的,要是你把它直接塞到a标签的href里,点击就完蛋。

第三,最好还是做个参数校验,不管来源哪里,先过滤一遍再使用。

总结一下:你这段代码单独看是防XSS的,但审计时要覆盖所有用到用户输入的地方,确保每个出口都做了合适的转义或白名单处理。
点赞
2026-03-17 20:11