我有一个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中实现?
答案 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>