使用v-html是否存在XSS漏洞?请验证我的实现安全性
你的v-html实现仍存在XSS漏洞
当前的实现并没有完全规避XSS风险,核心问题在于没有对用户输入的内容做HTML转义处理。
举个例子,如果用户输入:
/b/<img src=x onerror=alert('XSS')>/b/
你的代码会把这段内容处理成:
<strong><img src=x onerror=alert('XSS')></strong>
通过v-html渲染后,浏览器会执行onerror里的脚本,触发XSS攻击。类似的,用户还可以输入javascript:伪协议链接、<iframe>恶意嵌入等内容,都会被直接解析执行。
修复方案
必须对用户输入的所有文本片段做HTML转义,再进行标签包裹。可以先实现一个HTML转义函数,把特殊字符转换为HTML实体:
const escapeHtml = (text) => { return text .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, '''); }
然后修改parseWords函数,确保所有用户输入的内容都先被转义,再处理粗体逻辑:
const parseWords = (text) => { return text .split("/b/") .map((part, i) => { const escapedPart = escapeHtml(part); return i % 2 ? `<strong>${escapedPart}</strong>` : escapedPart; }) .join(""); }
这样处理后,用户输入的任何HTML标签或脚本都会被转义成实体字符,不会被浏览器解析执行,彻底规避XSS风险。
内容的提问来源于stack exchange,提问作者jdost_26
相关产品推荐
相关产品推荐

