$ sanitize自定义白名单

时间:2013-06-06 18:15:29

标签: javascript angularjs angularjs-directive sanitization

$sanitize服务tells me that

  

然后将所有安全令牌(来自白名单)序列化回来   正确转义html字符串。

我想只显示更小的HTML子集(即empastrong)。有没有办法轻松修改$service白名单而无需修改核心JavaScript?

2 个答案:

答案 0 :(得分:5)

您可以修饰$ sanitize服务以避免更改源文件。这是一个只记录$ sanitize内发生的事情的例子。您可以执行过滤不需要的元素所需的操作。

var app = angular.module("app", ["ngSanitize"]);

app.config(function($provide){
    $provide.decorator("$sanitize", function($delegate, $log){
        return function(text, target){

            var result = $delegate(text, target);
            $log.info("$sanitize input: " + text);
            $log.info("$sanitize output: " + result);

            return result;
        };
    });
});

请注意,在装饰器内部,$ delegate引用$ santize。在调用$ delegate(text,target)之前,您将从输入中过滤出您想要的内容,然后返回结果。

答案 1 :(得分:4)

您可以使用$ delegate(如jdforsy所述)其他一些库。我个人在我的项目中使用sanitizeHtml,因为它允许我选择允许哪些标记。设置:

angular
    .module('myApp', [])
    .config(['$provide', ($provide) => {
        $provide.decorator('$sanitize', ['$delegate', ($delegate) => {
            return function(text, target) {
                const preSanitizedText = sanitizeHtml(text, {
                    allowedTags: ['b', 'i', 'em', 'strong', 'a']
                });
                return $delegate(preSanitizedText, target);
            };
    }]);