V-html只用于文本,安全吗?

2024-01-31

我现在在关于原始 HTML 的 Vue 文档 https://v2.vuejs.org/v2/guide/syntax.html#Raw-HTML说明我们可以使用v-html渲染一些内部 html。我承认这是合法且最简单的技巧,但由于我很担心,我无法停止思考是否可以在网络项目中安全地使用它。假设我用这个v-html仅用于渲染一些 html 标签,例如br, span, etc.

但在文档中他们明确指出如下:

在您的网站上动态呈现任意 HTML 可能会非常困难 危险,因为它很容易导致XSS 漏洞。仅使用 对受信任的内容进行 HTML 插值,而不是对用户提供的内容进行插值 内容。

如果我使用v-html仅适用于 vue 组件中的文本渲染,例如此代码,而不适用input标签,安全吗XSS Vulnerabilities攻击或Cross-site Scripting:

<template>
 <div>
  <h2 v-html="header" />
  <h2 class="bold" v-html="bHeader" />
  <h2 class="italic" v-html="iHeader" />
  <h2 class="text-muted" v-html="mHeader" />
 </div>
</template>

有人能帮我吗 ?我对此很困惑,事实上我只使用这个v-html仅适用于文本标签,例如h1, h2, h3, etc.


我认为您需要问自己的第一个问题是为什么您首先要像这样绑定 HTML。请记住,Vue 中模板的全部目的是状态的反应式绑定。与使用普通 Javascript 或 Jquery 不同,您不想主动更改 DOM - Vue 在属性更新时为您处理所有这些。

如果您绝对需要主动绑定 HTML(例如,因为无论出于何种原因您从服务器收到整个 HTML 字符串),您可以使用该指令。正如其他用户在评论中指出的那样 - 好好想想who正在创建您盲目绑定为 HTML 的内容。此字符串中存在恶意代码的风险与有权修改此内容的人员一样低/高。

在我们的生产应用程序中,我们会尽可能避免它,即使我们非常确定内容可能是安全的(例如,只有管理员或员工才能访问它)。在我们绝对需要它的少数情况下,我们仍然尽力在前端和后端安全地解析字符串和转义字符,例如通过诸如https://www.npmjs.com/package/vue-sanitize https://www.npmjs.com/package/vue-sanitize or https://www.npmjs.com/package/sanitize-html https://www.npmjs.com/package/sanitize-html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

V-html只用于文本,安全吗? 的相关文章

随机推荐