在任何 web 应用中,允许未过滤的用户提供的内容成为 HTML、CSS 或 JavaScript 都有潜在的危险。
(1)注入HTML
Vue 会自动转义 HTML 内容,以避免向应用意外注入可执行的 HTML。
(2)注入URL
如果没有对该 URL 进行“过滤”以防止通过 javascript:
来执行 JavaScript,则会有潜在的安全问题。
在前端进行 URL 过滤,那么就已经有安全问题了。用户提供的 URL 永远需要通过后端在入库之前进行过滤。然后这个问题就会在每个客户端连接该 API 时被阻止,包括原生移动应用。
(3)注入样式
恶意用户仍可以提供 CSS 来进行“点击诈骗”,例如将链接的样式设置为一个透明的方框覆盖在“登录”按钮之上。允许用户为一个 <style>
元素提供内容,将产生甚至更严重的安全漏洞,以使得用户完全控制整个页面的样式。要在模板内避免渲染 style 标签。
推荐只允许在一个 iframe 沙盒内进行 CSS 的完全控制。或让用户通过一个样式绑定来控制,推荐使用其对象语法且只允许用户提供特定的可以安全控制的 property 的值。
(4)注入JavaScript
每个 HTML 元素都有接受 JavaScript 字符串作为其值的 attribute,将用户提供的 JavaScript 绑定到它们任意当中都是一个潜在的安全风险。
永远不要向 Vue 挂载可能包含服务端渲染或用户提供的内容。
在表单提交时提交 CSRF token,永远是件好事。