【发布时间】:2015-01-19 14:17:43
【问题描述】:
我已经阅读了关于 angular 转义 默认情况下所有内容 和 $sce 的方式,因此我通过过滤器将带有 $sce.trustAsHtml() 的数据列入白名单(因为 $sce 未在服务中工作),像这样:
<sup class="ng-binding" ng-bind-html="row|logEntry"></sup>
但问题是,我不信任 HTML 的某些部分。
深入了解细节 - 我有 translations,其中包含 HTML,但其中包含可替换的标记/变量。所以translations support HTML,但我不希望提供的令牌包含 HTML。
我的过滤器logEntry 内部如下所示:
var translated = $translate('Log.' + msg.context.entity_type) + '.' + msg.context.action, {
'object_name': msg.context.object_name,
'user': msg.context.user_name
});
return $sce.trustAsHtml(translated);
例如,我可以翻译有关 userX 更改文章的内容,但如果用户名包含 <script>alert('evilname')</script>
$translate 本身不相关,它可以是任何 HTML 字符串,我希望将某些部分替换为常规 JS .replace(),内容保持“作为文本”。
所以我的问题是 - 如何转义部分 HTML?我是否必须在视图内将其切成部分?还是我必须求助于自定义转义( Fastest method to escape HTML tags as HTML entities?)?是否有此类事情的首选做法?
【问题讨论】:
标签: javascript angularjs security angular-translate