消毒一些翻译价值,但不能消毒



我有一个Angular-translate 指令,该采用了混合的参数。有些是用户生成的,另一些是必须编译的HTML(使用translate-compile)。

请参阅此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服务的过滤器;并不是那么困难,但仍然有些工作,测试,代码,我期望本地可用。在某个地方。

我已经阅读了Angular-Translate代码,以查找是否存在(隐藏的)标志或命名约定,允许允许每一个卫生设置设置,但找不到。诸如translate-sanitize-attributes="['foo', 'bar']" or even a Translate-value-amount-astrusted =`或somesuch之类的东西。但是,没有什么可以暗示能够设置消毒 - 格言或其遗漏的人。

通常如何在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>

相关内容