AngularJS在扩展页面中将URL更改为"unsafe:"

ebi*_*ebi 183 javascript security google-chrome-extension angularjs

我正在尝试将Angular与应用列表一起使用,每个应用都是一个链接,可以更详细地查看应用(apps/app.id):

<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>
Run Code Online (Sandbox Code Playgroud)

每次我点击其中一个链接时,Chrome都会将网址显示为

unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id
Run Code Online (Sandbox Code Playgroud)

unsafe:来自哪里?

Phi*_*ley 357

您需要使用正则表达式向Angular的白名单中明确添加URL协议.只有http,https,ftpmailto默认启用.unsafe:当使用诸如协议之类的协议时,Angular将为非白名单URL添加前缀chrome-extension:.

chrome-extension:协议列入白名单的好地方是在模块的配置块中:

var app = angular.module( 'myApp', [] )
.config( [
    '$compileProvider',
    function( $compileProvider )
    {   
        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|chrome-extension):/);
        // Angular before v1.2 uses $compileProvider.urlSanitizationWhitelist(...)
    }
]);
Run Code Online (Sandbox Code Playgroud)

当您需要使用诸如file:和之类的协议时,同样的过程也适用tel:.

有关详细信息,请参阅AngularJS $ compileProvider API文档.

  • 请注意,在Angular 1.2中,实际上有两种方法 - 一种用于链接(aHrefSanitizationWhitelist),另一种用于图像(imgSrcSanitizationWhitelist).这让我陷入了一段时间. (29认同)
  • 在Angular 1.2中,方法名称变为`$ compileProvider.aHrefSanitizationWhitelist` (11认同)
  • 默认imgSrcSanitizationWhitelist Angular 1.2-rc2是`/ ^\s*(https?| ftp | file):| data:image\//`,用于访问chrome打包应用程序的本地文件系统`| filesystem:chrome-extension:`应该添加到正则表达式的末尾. (6认同)

R. *_*ury 55

万一有人对图像有这个问题,以及:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);
Run Code Online (Sandbox Code Playgroud)


小智 6

如果你只需要邮件,电话和短信使用这个:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|sms|tel):/);
}]);
Run Code Online (Sandbox Code Playgroud)