使用angularjs过滤器来解析url是安全的

use an angularjs filter to parse an url is safe?

本文关键字:url 安全 angularjs 过滤器 使用      更新时间:2023-09-26

在web应用程序中,我的客户端(基于angularjs)从web服务接收json数据。Json可以包含一个带有某些url的文本字段;例如:

blah blah ... http://www.example.com blah blah blah ...

我需要将这个链接呈现为html,所以我需要用html标记替换url。为了弄清楚,在一篇要旨帖子之后,我试着做了如下过滤器:

botino.filter('parseUrl', function($sce) {
    replacePattern1 = /('b(https?|ftp):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/gim;
    return function(text, target, otherProp) {
        angular.forEach(text.match(replacePattern1), function(url) {
            text = text.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
        });
        text = $sce.trustAsHtml(text);  
    return text;
    };
});

这样,在html页面上我使用:

<span ng-bind-html="tweet.text | parseUrl"></span>

工作也是如此。

我的问题是这种实施的安全性如何?有人可以恶意使用这个吗?也许有人能给我一个更好的方法来解决这个问题?

如果解析发生在后端,我应该更加关心。如果这种情况发生在javascript方面,我应该信任那些共享url的人。