Vue-确认消息中的样式用户输入(允许特定的html标签)

All*_*ine 8 xss vue.js vuejs2

使用Vue,我想显示一个确认模式,内容为“您确定要删除'{{itemName}}'吗?”。

通过将Javascript字符串绑定到模板中嵌入的变量,这很容易。

但是,如果我想itemName用斜体字强调它,我唯一能找到的方法就是使用v-html,这当然会使它适用于XSS。

有什么方法可以对字符串的一部分进行样式设置?

RWA*_*WAM 5

您可以尝试使用sanitize-html 之类的包。这是我将如何做到的:

安装:

npm install sanitize-html
Run Code Online (Sandbox Code Playgroud)

主要.js:

import sanitizeHTML from 'sanitize-html';
Vue.prototype.$sanitize = sanitizeHTML;
Run Code Online (Sandbox Code Playgroud)

你的组件.vue:

<div v-html="$sanitize(itemName)" />
Run Code Online (Sandbox Code Playgroud)

查看自述文件以获取有关允许的标签和属性的默认选项的更多信息。

编辑分别。备择方案:

sanitize-html有一个 327 KB 重量的缺点。但是有更小的包可用:


编辑2:

我们现在在我们的项目中使用了一个包vue-dompuritfy-html。安装后你可以简单地使用

npm install sanitize-html
Run Code Online (Sandbox Code Playgroud)

奖励:通过使用这个包,你涵盖了推荐的 eslint 规则vue/no-v-html