如何解决我什么时候可以信任我在 Vue 中翻译的内容?
我想验证我对使用 Vue I18n 时 v-html
和 XSS 问题的理解。
我们有几类内容:
#1 完全不可信
#2 可能值得信赖,但需要审查(我们将生成翻译文件,这些文件将被添加到 PR 以进行正常的代码审查和 QA 流程)
#3 只是值得信赖吗?工程师在模板中添加 html 与翻译文件之间有区别吗?或者仅仅是翻译文件中的 html 就让我们容易受到某种攻击?
Vue I18n documentation 上有一个部分说,
...如果您在区域设置消息中配置标签,则有一个 由于本地化而导致 XSS 漏洞的可能性 v-html="$t('term')"。
在客户端翻译文件中使用“可信内容”时是否存在固有的 XSS 风险?
编辑:考虑到这一点后,它很快就变得很危险。如果我们允许在翻译部分使用 v-html
,因为我们知道说超链接没问题,但我们还显示其他内容,例如 company_name
,那里可能存在不良内容。
我做了一些检查,看起来 Rails 处理这个的方式不同。即使翻译被标记为 _html
,所提供的 values 仍然会被转义,只是内容本身允许有 html。
示例:
与name = "<b>Name</b>"
导轨 -> foo_html: "hi {name} <u>underlined text</u>"
结果是带下划线的文本,但名称不是粗体,并且显示的内容周围仍然有 <b>
(它忽略提供的参数中的 html)
Vue I18n -> 带有 v-html -> foo: "hi {name} <u>underlined text</u>"
文字加下划线,名称加粗,不安全
解决方法
你问了几个问题
只要 #2 中的内容被审核为恶意内容,用作原始 html 是否安全?
是和否。理论上,如果你检查每条消息,并且知道每条消息的上下文,并且没有时间限制,所以人们在每次发布之前检查每条消息,你就可以了。在实践中,人们偷工减料,或者不知道特定消息将作为 html 插入,或者不明白某些字符串如何可能是格式错误的 html,但被浏览器转换为实际上是邪恶的有效 html。有人可能会访问您的 CMS 并更改您不希望更改的翻译字符串。如果配置不正确,有人可能会在您的 cms 中伪造表单提交,诱使员工访问网址。
或者仅仅是翻译文件中的 html 就让我们容易受到某种攻击?
v-html
就是这样。它将未过滤的 html 放入您的文档中。
这种可能性是什么,它是如何工作的?
带有翻译字符串的v-html
会产生不必要的风险和额外的开销,因为它需要具有丰富技术知识的撰稿人检查每条翻译消息,而您可以让没有任何技术知识的撰稿人这样做。您唯一需要做的就是使用文档中概述的模式,它允许任何人更改可翻译位(将被转义),同时将 html 保留在您的源代码管理中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。