Vue 和 Angular 安全性对比

405 阅读1分钟

先说结论

Vue HTML 模板没有进行安全过滤,一旦疏忽就会不安全。如果想要编写安全的程序,需要引入第三方库,写更多代码才能安全。

Angular HTML 模板默认已经安全过滤,随心所欲写都是安全的。如果想要编写不安全的程序(有些场景需要执行传入的可信任 Javascript),需要写更多代码。

Vue HTML 模板默认不安全

cn.vuejs.org/guide/best-…

不安全举例:

<div v-html="userProvidedHtml"></div>
<a :href="userProvidedUrl">click me</a>
<iframe :src="userProvidedUrl">
<div :style="userProvidedStyles"></div>

确实在某些场景需要绑定用户提供的字符串。但用户提供的字符串,默认是不安全的,可能含有 Javasccript 字符串。

Vue 的 HTML 模板是没有进行安全过滤的,如果需要编写更安全的 HTML 模板,需要引入 sanitize-html, sanitize-url 等三方库,写更多代码做安全过滤。

如果是经验不足的开发者,很容易忽视,写出不安全的代码。

Angular HTML 模板默认安全

angular.cn/guide/secur…

安全举例:

<p [innerHTML]="userProvidedHtml"></p>
<a [href]="userProvidedUrl">Click me</a>
<iframe [src]="userProvidedUrl">
<div [style.backgroud]="userProvidedStyles"></div>

Angular 的 HTML 模板已进行安全过滤的,即便是经验不足的开发者,随心所欲编写都是安全的。

如果需要执行字符串中可信任的 JavaScript,那么 Angular 也提供了方案,需要开发者多写一点代码,达到上面 Vue 不做安全过滤的效果。

一起事件

www.infoq.cn/article/yba…

个人观点:

Vue 确实没有安全漏洞,但 Vue 是懒政,并没有帮助开发者写出更安全的 Web 应用。不重视安全的小公司和经验不足的 Vue 开发者,随意书写,确实更容易产生不安全的 Web 应用。