清理一些翻译值但不清理其他值

Sanitize some translate values but not others

我有一个 angular-translate 指令,它接受混合的参数。有些是用户生成的,有些是必须编译的 HTML(使用 translate-compile)。

请参阅 this plunker 以获取有效的、大大简化的示例。

translate-sanitize-strategy 设置为 "null" 时,不会清理任何内容:

 <p translate
 translate-value-amount="<currency data-amount='balance'></currency>"
 translate-value-beneficiary="{{ beneficiary }}"
 translate-sanitize-strategy="null"
 translate-compile="true">PAY_TO</p>

这呈现 您必须支付 13.37 欧元给 john-doe

但是当用户将昵称设置为 john-<span onmouseover="this.textContent=\'h@ck3d\'">doe</span> 时,它会 运行 并在鼠标悬停后呈现 您必须向 john-h@ck3d 支付 13.37 欧元。明显是 XSS 的例子。

当我将策略设置为 sanitizeParameters 时,这也是我们的全局设置,受益人会得到适当的消毒。但 amount 也是如此,我信任它(在这一点上)并且需要编译它!

<p translate
 translate-value-amount="<currency data-amount='balance'></currency>"
 translate-value-beneficiary="{{ beneficiary }}"
 translate-sanitize-strategy="'sanitizeParameters'"
 translate-compile="true">PAY_TO</p>

这呈现 你必须付钱给 john-doe。因此 beneficiary 值已正确清理,但价值金额也是如此,我需要保持未清理状态以便 angular 对其进行编译。

我搜索了一个解决方案,我使用过滤器手动清理受益人值:

{{ beneficiary | sanitize }}

但这似乎需要我编写一个使用ngSanitize服务的过滤器;没那么难,但仍然需要一些工作、测试、代码来实现我 期望 在本地可用的东西。某处。

我通读了 angular-translate 代码以查找是否有(隐藏的)标志或命名约定等允许按值设置清理,但找不到。像 translate-sanitize-attributes="['foo', 'bar']" or even atranslate-value-amount-astrusted=` 之类的东西。但是找不到任何暗示能够设置清理策略或省略的内容,每个值。

这通常是如何在 angularjs 和 angular-translate 中实现的?

怎么样:

<p translate
 translate-value-amount="<currency data-amount='balance'></currency>"
 translate-value-beneficiary="<span ng-bind='beneficiary'></span>"
 translate-sanitize-strategy="null"
 translate-compile="true">PAY_TO</p>