2013-03-26 10 views
21

In AngularJS, nel seguente scenario, Firefox pone unsafe: davanti agli URL generati nel modo seguente. Quindi visualizza una pagina di errore che dice "L'indirizzo non è stato capito". Questa è una richiesta di file sul mio PC locale.collegamento non sicuro in angolare

Link:

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

Array:

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

provare a utilizzare 'docs ng-href'..see – charlietfl

risposta

45

Stai visualizzando effetto collaterale di questo impegno: https://github.com/angular/angular.js/commit/9532234bf1c408af9a6fd2c4743fdb585b920531 che mira ad affrontare alcuni rischi di sicurezza.

Questo commit ha introdotto un cambiamento non compatibile con le versioni precedenti per gli URL che iniziano con file:// (è stato successivamente rilassato in https://github.com/angular/angular.js/commit/7b236b29aa3a6f6dfe722815e0a2667d9b7f0899

Presumo che si sta utilizzando uno dei 1.0.5 o 1.1.3 versioni AngularJS. Se è così si può riabilitare il supporto per le file:// URL configurando $compileProvider modo:

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

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

}); 

O in angolare 1.2.8 e superiore:

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

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

}); 
+1

Grazie, ma dove ho bisogno di inserire questo codice? Se lo metto nel mio controller (e aggiungo $ compileProvider alla lista degli argomenti), dice 'Errore: provider sconosciuto: $ compileProviderProvider'. Sto usando 1.0.5 (l'ultimo da sviluppatori google). – Ben

+0

Btw, una soluzione rapida è solo usando 1.0.4. – Ben

+1

@Ben è necessario inserire questo codice nel blocco di configurazione del modulo come indicato nella mia risposta (e nel codice sorgente che lo accompagna). Puoi leggere i moduli qui: http: //docs.angularjs.org/guida/modulo Ovviamente, tornare alla versione 1.0.4 farà scomparire il problema poiché sono interessati solo 1.0.5 e 1.1.3. –

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

Per Angular 1.2+ ho usato un soluzione simile da questa discussione: http://stackoverflow.com/questions/15606751/angular-changes-urls-to-unsafe-in-extension-page –

4

Aggiungi una lista bianca al controller.

Per Angular.js 1.2:

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

Per 1.1.x angolare e 1.0.x, utilizzare urlSanitizationWhitelist. Vedere reference.

1

sto usando angular 1.4.0 e il seguente formato lavorato:

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

Aggiunta http:// all'inizio del ng-href aiutato a sbarazzarsi del unsafe apposta da ng-Sanitize

  • Se siete su https, quindi non dovrebbe essere un problema scrivere tutto il codice.
  • Ma se avete un sistema che deve lavorare su entrambi gli ambienti, si potrebbe desiderare di utilizzare una rilevazione protocollo da location.protocol

sto impostando le variabili in $rootScope (Aiutano con problemi con i server proxy che consumano css dal mio sito)

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