不安全的angular度链接

在AngularJS中,在下面的情况下,Firefox将unsafe:在以下面的方式生成的URL之前。 然后显示一个错误页面,说“地址不明白”。 这是我的本地PC上的文件请求。

链接:

 <li ng-repeat="fruit in fruits"> <a href="{{ fruit.link }}">{{ fruit.title }}</a> </li> 

阵:

 $scope.fruits = [ { "title" : "Orange", "link" : "fruits_orange.html" } ]; 

你会看到这个提交的副作用: https : //github.com/angular/angular.js/commit/9532234bf1c408af9a6fd2c4743fdb585b920531 ,旨在解决一些安全隐患。

这个提交引入了一个非向后兼容的变化,以URL开始file:// (后来在https://github.com/angular/angular.js/commit/7b236b29aa3a6f6dfe722815e0a2667d9b7f0899

我假设你正在使用1.0.5或1.1.3 AngularJS版本之一。 如果是这样,你可以通过configuration$compileProvider来重新启用对file:// URL的支持:

 angular.module('myModule', [], function ($compileProvider) { $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/); }); 

或者在angular1.2.8和以上:

 angular.module('myModule', [], function ($compileProvider) { $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/); }); 

添加一个白名单到你的控制器。

对于Angular.js 1.2:

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

对于Angular 1.1.x和1.0.x,请使用urlSanitizationWhitelist 。 参见参考 。

  angular.module('somemodule').config(['$compileProvider' , function ($compileProvider) { $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto):/); }]); 

我正在使用angular 1.4.0和以下格式的工作:

 ng-href="http://{{baseURLHref}}{{baseURLPort}}/routingPathName" 

ng-href的开头添加http://帮助摆脱了由ng-Sanitize附加的unsafe

  • 如果你使用的是https ,那么硬编码一切都不成问题。
  • 但是如果你的系统必须在两种环境下工作,你可能需要使用来自location.protocol的协议检测

我在$rootScope设置variables(它们帮助处理从我的站点使用css的代理服务器的问题)

 angular.module('myApp').run(function ($route, $rootScope, $location) { $rootScope.baseURLHref = ''; $rootScope.baseURLPort = ''; if($location.host() != 'localhost'){ $rootScope.baseURLHref = $location.host(); $rootScope.baseURLPort = ':' + $location.port(); } ...