AngularJS 将扩展页面中的 URL 更改为“不安全:”

IT技术 javascript angularjs security google-chrome-extension
2021-01-25 07:39:39

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

<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>

每次我点击这些链接之一时,Chrome 都会将 URL 显示为

unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id

在什么地方unsafe:来的呢?

6个回答

您需要使用正则表达式将 URL 协议显式添加到 Angular 的白名单。只有httphttpsftpmailto默认启用。角将前缀与非列入白名单的URLunsafe:使用的协议,例如当chrome-extension:

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

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

当您需要使用file:等协议时,同样的过程也适用tel:

有关更多信息,请参阅 AngularJS $compileProvider API 文档

请注意,在 Angular 1.2 中,实际上有两种方法——一种用于链接(aHrefSanitizationWhitelist),另一种用于图像(imgSrcSanitizationWhitelist)。这让我卡住了一段时间。
2021-03-12 07:39:39
默认 imgSrcSanitizationWhitelist Angular 1.2-rc2 是/^\s*(https?|ftp|file):|data:image\//,要访问 chrome 打包应用程序的本地文件系统,|filesystem:chrome-extension:应将其添加到正则表达式的末尾。
2021-03-22 07:39:39
请注意文件协议与 blob 协议不同: $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|blob|ftp|mailto|chrome-extension):/);
2021-03-22 07:39:39
在 Angular 1.2 中,方法名变成了 $compileProvider.aHrefSanitizationWhitelist
2021-03-25 07:39:39
对于 Chrome Packaged App,您需要添加|blob:chrome-extension:到最后。
2021-04-06 07:39:39

如果有人对图像有此问题,也:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);
我尝试使用正则表达式将我使用 html2canvas 捕获的图像屏幕截图列入白名单,现在没有错误显示不安全:数据;但图像没有被捕获。知道我将使用什么正则表达式吗?我正在捕获图像/png 作为 base64 url​​。现在 html 看起来像: <img ng-src="data:," class="img-responsive" src="data:,"> 而不是实际的 base64 url
2021-03-24 07:39:39

如果您只需要邮件、电话和短信,请使用:

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

谷歌浏览器要求其扩展程序与Content Security Policy (CSP).

您需要修改扩展名以满足CSP.

https://developer.chrome.com/extensions/contentSecurityPolicy.html

https://developer.mozilla.org/en-US/docs/Security/CSP

此外,angularJS 有ngCsp您需要使用的指令。

http://docs.angularjs.org/api/ng.directive:ngCsp

我已经有了该页面的 ngCsp 指令“<html ng-app="myApp" ng-csp>”。这是我的清单中的 CSP:"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'", 我是否需要更改清单中的 csp?
2021-04-11 07:39:39
<a href="{{applicant.resume}}" download> download resume</a>


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

    app.config(['$compileProvider', function($compileProvider) {
         $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
        $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);

        }]);