25

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"  }
];
4

5 に答える 5

46

このコミットの副作用が見られます: https://github.com/angular/angular.js/commit/9532234bf1c408af9a6fd2c4743fdb585b920531は、いくつかのセキュリティ上の危険に対処することを目的としています。

このコミットにより、で始まる URL に後方互換性のない変更が導入されました(その後、 https://github.com/angular/angular.js/commit/7b236b29aa3a6f6dfe722815e0a2667d9b7f0899file://で緩和されました) 。

1.0.5 または 1.1.3 AngularJS バージョンのいずれかを使用していると仮定します。その場合は、次のようにfile://構成することで、URLのサポートを再度有効にすることができます。$compileProvider

angular.module('myModule', [], function ($compileProvider) {

  $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/);

});

または Angular 1.2.8 以降では:

angular.module('myModule', [], function ($compileProvider) {

  $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file):/);

});
于 2013-03-26T12:56:23.103 に答える
5

コントローラーにホワイト リストを追加します。

Angular.js 1.2 の場合:

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

Angular 1.1.x および 1.0.x の場合は、 を使用しますurlSanitizationWhitelistリファレンスを参照してください。

于 2015-12-08T00:03:59.667 に答える
1

私が使用angular 1.4.0していて、次の形式が機能しました:

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

http://の先頭に追加すると、追加されたng-hrefを取り除くのに役立ちましたunsafeng-Sanitize

  • を使用している場合はhttps、すべてをハードコーディングしても問題ありません。
  • ただし、両方の環境で動作する必要があるシステムがある場合は、次のプロトコル検出を使用することをお勧めします。location.protocol

変数を設定しています$rootScope(サイトの 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();
    }
    ...
于 2016-05-31T22:24:19.473 に答える