2014-11-14 21 views
5

Cosa può accadere di male se disattivo completamente il servizio $ sce?

angular.module('app').config(function ($sceProvider) { 
    $sceProvider.enabled(false); 
}); 

risposta

3

È necessario disabilitare SCE solo se si è sicuri al 100% che tutte le associazioni di applicazioni (HTML, URL ...) siano sicure. Ad esempio, se l'applicazione sanifica sempre gli input dell'utente sul server o sul client prima del rendering, la cerimonia aggiuntiva imposta da SCE potrebbe non essere necessaria.

Tuttavia, è molto raro che si possa essere sicuri al 100% che tutti i valori siano sicuri, soprattutto quando l'applicazione diventa più grande e viene codificata da molti sviluppatori. L'abilitazione di SCE impone che solo i valori contrassegnati in modo esplicito come attendibili utilizzando uno dei metodi $sce.trustAsXXX possano essere utilizzati dall'applicazione.

Ad esempio, se si utilizza il codice ngBindHtml per il rendering di HTML, AngularJS genererà un errore a meno che la variabile di ambito assegnata a ngBindHtml non sia coperta da $sce.trustAsHtml. Un'applicazione simile si verifica quando si imposta templateUrl di una rotta o di una direttiva. Ciò rende l'applicazione più sicura in caso di errori rapidi, offrendoti la possibilità di controllare ogni luogo in cui si verifica l'errore e decidere se fidarti o correggerlo.

Una nota finale, se si include ngSanitize o implementare un servizio $sanitize, allora non c'è bisogno di disattivare SCE di utilizzare i valori HTML non attendibili come AngularJS sarà solo disinfettare gli ingressi non attendibili che utilizzano il servizio $sanitize. Allo stesso modo, se un URL modello condivide l'origine come applicazione, non è necessario includerlo esplicitamente.

+1

Grande! Questo tipo di risposta mi aspettavo, grazie! – artuska

+0

Potrebbe chiarire cosa intendi nell'ultimo paragrafo? – naXa

+0

"Raro" potrebbe essere soggettivo, si riferisce al tipo di progetto in corso. Ad esempio, ho un progetto con 0 input utente. –

0

Posso disabilitare SCE completamente?

Sì, è possibile. Tuttavia, questo è fortemente scoraggiato. SCE offre molti vantaggi in termini di sicurezza per un piccolo overhead di codifica. Sarà molto più difficile prendere un'applicazione disabilitata SCE e proteggerla da sola o abilitare SCE in una fase successiva. Potrebbe avere senso disabilitare SCE per i casi in cui è presente un sacco di codice esistente che è stato scritto prima dell'introduzione di SCE e si sta eseguendo la migrazione di un modulo alla volta.

(da documentation)