前端 Vue 开发信息安全准则
一、首要规则:不要使用无法信赖的模板
使用 Vue 时最基本的安全规则就是不要将无法信赖的内容作为你的组件
模板。例:
Vue.createApp({
template: `<div>` + userProvidedString + `</div>` // 永远不要这样做!
}).mount('#app')
二、注入 HTML
我们现在已经知道 Vue 会自动转义 HTML 内容,防止你意外地将可执行
的 HTML 注入到你的应用中。然而,在你知道 HTML 安全的情况下,你还
是可以显式地渲染 HTML 内容。
①使用模板:
<div v-html="userProvidedHtml"></div>
②使用渲染函数:
h('div', { innerHTML: this.userProvidedHtml })
③以 JSX 形式使用渲染函数:
<div innerHTML={this.userProvidedHtml}></div>
以上三种类型的写法都不推荐使用
三、URL 注入
在这样一个使用 URL 的场景中:
<a :href="userProvidedUrl"> click me </a>
如果这个 URL 允许通过 javascript: 执行 JavaScript,即没有进行无害化处