Cosa può accadere di male se disattivo completamente il servizio $ sce?
angular.module('app').config(function ($sceProvider) {
$sceProvider.enabled(false);
});
Cosa può accadere di male se disattivo completamente il servizio $ sce?
angular.module('app').config(function ($sceProvider) {
$sceProvider.enabled(false);
});
È 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.
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)
Grande! Questo tipo di risposta mi aspettavo, grazie! – artuska
Potrebbe chiarire cosa intendi nell'ultimo paragrafo? – naXa
"Raro" potrebbe essere soggettivo, si riferisce al tipo di progetto in corso. Ad esempio, ho un progetto con 0 input utente. –