È incluso lo schema di dati nel tuo Content Security Policy sicuro?

16

Ho un'app Cordova che trasforma alcune immagini in base64. Ciò viola il CSP con questo messaggio:

Refused to load the image 'data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encod…E%3C%2Fg%...%3C%2Fsvg%3E' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

In base a questa risposta , posso semplicemente aggiungere data: al mio meta Content-Security-Policy, ma mi piacerebbe molto sapere, se questo è sicuro? data: non specifica l'origine e quindi temo che non sia sicuro.

    
posta Martin Verner 26.07.2015 - 19:58
fonte

2 risposte

9

Questa è una grande domanda e ti raccomando di dedicare del tempo a pensarci da un punto di vista della sicurezza, invece di implementare la soluzione dal link che hai inviato.

Sì, come temuto, l'uso di data: in una direttiva CSP non è sicuro, poiché consente di aprire le vulnerabilità XSS come dati: può gestire qualsiasi URI. Questo è spiegato in Documentazione CSP di Mozilla.

È possibile ridurre la superficie di un potenziale attacco XSS modificando i dati: direttiva in:

img-src 'self' data:image/svg+xml

Tuttavia, come best practice mi adopererò per affrontare il problema di root relativo alle immagini fornite come base64 e vedere se ciò può essere fatto in un altro modo in modo da non richiedere la modifica della direttiva CSP.

    
risposta data 27.07.2015 - 01:19
fonte
14
  1. La nota sulla whitelisting del protocollo dati a cui viene fatto riferimento dice

    data: Allows data: URIs to be used as a content source. This is insecure; an attacker can also inject arbitrary data: URIs. Use this sparingly and definitely not for scripts.

    Questo non è in una parte specifica dei rischi di uris di dati in immagini , e non ho visto alcuna prova sostanziale che l'uris di dati nelle immagini possa eseguire codice in un browser moderno in alcun modo, non importa XSS una pagina.

    In alcuni contesti, un'immagine SVG può eseguire codice Javascript, ma questi sono contesti secondari come <iframe> , <object> o <embed> elementi, o una parte diretta dell'host DOM ovvero <svg> elementi.

    MDN richiama esplicitamente che <img> di SVG incorporati non può eseguire Javascript, insieme ad alcune altre restrizioni di sicurezza, dicendo

    • JavaScript is disabled.
    • External resources (e.g. images, stylesheets) cannot be loaded, though they can be used if inlined through data: URIs.
    • :visited-link styles aren't rendered.
    • Platform-native widget styling (based on OS theme) is disabled.
  2. Non sembra possibile specificare un MIME come parte dell'istruzione whitelisting del protocollo data: come suggerito come possibile mitigazione. L'unica direttiva sui criteri di sicurezza del contenuto che ho visto in grado di limitare il tipo MIME è plugin-types , che limita solo <object> e <embed> (vedi documenti CSP generici ).

Sarò d'accordo con la risposta accettata nel rispetto del fatto che se non devi usare data-uris , e puoi farlo con poco dolore, è più semplice mantenere il tuo CSP e non usarlo. Tuttavia, se lavori con le immagini, di solito è un grande dolore.

    
risposta data 10.08.2017 - 23:58
fonte

Leggi altre domande sui tag