tl; dr:
La codifica dovrebbe essere eseguita nel momento in cui i dati vengono utilizzati nel contesto - quando il codice sta componendo HTML, javascript, ecc. Da dati non attendibili - questo è vero sia che tu stia scrivendo sul server o sul client. A quel punto sai quali parti sono i dati e qual è il contesto di codifica. È necessario sfruttare il binding (ng-bind) in Angular per la codifica specifica del contesto. La funzione AngularJS Sanitize è utile quando è necessario "disinfettare" un hunk di HTML non attendibile.
Dettagli:
È bene fare attenzione quando viene usato il termine "sanitizza", perché le diverse librerie lo usano in modo diverso - può significare validazione, canonicalizzazione, codifica semplice, analisi e codifica.
La funzione AngularJS Sanitize "sanifica" gli input analizzando l'HTML in token. Tutti i token sicuri (da una whitelist) vengono quindi serializzati su valori codificati correttamente. In questo modo si comporta in modo simile a
il OWASP HTML Sanitizer Project e il precedente progetto OWASP Antisamy.
Vedere
link per ulteriori informazioni sull'utilizzo della libreria.
Questo è un ottimo modo per codificare input non attendibili se non si ha il lusso di comporre HTML, javascript o URL dalle sue parti. Tuttavia:
- L'analisi e la rimozione dei tag è più incline ad essere aggirata - Non conosco alcun problema corrente
- Modifica l'HTML per rimuovere i tag non riconosciuti, che a volte possono essere fragili
- Deve fare ipotesi sul fatto che il contenuto sottostante sia codificato
- Il supporto per i tag sarà limitato alla lista bianca - tuttavia, puoi decorare il servizio $ sanitize per modificare l'elenco
Quindi dove puoi:
- Codifica nel momento in cui i dati vengono utilizzati nel contesto, ad esempio utilizzando l'associazione.
- Utilizza la funzione Sanitize se non la componi
- Prova a sfruttare il CSP (Content Security Policy) come difesa in profondità