清理一些翻译值但不清理其他值
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 a
translate-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>
我有一个 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 a
translate-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>