消除一些翻译价值而不是其他翻译价值

时间:2017-11-23 09:40:27

标签: angularjs angular-translate angular-sanitizer

我有一个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>

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

但是当用户将昵称设置为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服务的过滤器;不是那么难,但仍然有一些工作,测试,代码,我希望原生可用。某处。

我已经阅读了角度转换代码,以查找是否存在(隐藏)标记或命名约定左右,它允许按值设置清理,但无法找到。像translate-sanitize-attributes="['foo', 'bar']" or even a translate-value-amount-astrusted =`或类似的东西。但是,没有任何迹象表明能够设定消毒策略或遗漏,每个价值。

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

1 个答案:

答案 0 :(得分:2)

怎么样:

<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>
相关问题