Дезинфицировать некоторые значения перевода, но не другие

У меня есть директива углового перевода, которая принимает аргументы, которые смешаны. Некоторые из них генерируются пользователем, другие HTML, которые должны быть скомпилированы (с translate-compile).

Посмотрите на этот поршень для рабочего, сильно упрощенного примера.

Когда translate-sanitize-strategy установлен на "ноль", ничего не очищается:

 <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-<span onmouseover="this.textContent=\'h@ck3d\'">doe</span>, он запустит это и отобразит после наведения мыши. Вы должны заплатить 13,37 евро на john-h @ ck3d. Наглядный пример 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>

Это делает, Вы должны заплатить Джону Доу. Итак beneficiary значение должным образом очищено, но так же как и значение-значение, которое мне нужно оставить неанифицированным, чтобы угловая его скомпилировала.

Я искал решение, где я вручную очищаю значение бенефициара с помощью фильтра:

{{ beneficiary | sanitize }}

Но это, кажется, требует от меня написать фильтр, который использует ngSanitize Обслуживание; не так сложно, но все еще некоторая работа, тесты, код для чего-то, что я ожидаю, чтобы быть изначально доступным. Где-то.

Я прочитал код angular-translate, чтобы найти, есть ли (скрытый) флаг или соглашение об именах или около того, которое разрешает настройку очистки для каждого значения, но не смог найти это. Что-то вроде translate-sanitize-attributes="['foo', 'bar']" or even atranslate-value-amount-astrusted=`или somesuch. Но не смог найти ничего, что намекало бы на способность устанавливать стратегии дезинфекции или их пропуск, на ценность.

Как это обычно достигается в angularjs и angular-translate?

1 ответ

Решение

Как насчет:

<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>
Другие вопросы по тегам