不安全的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(); } ...