Content-Type
è solo un suggerimento dei dati forniti al destinatario (consumatore). Ciò significa che il ricevitore può o meno agire in base a tale intestazione.
Un tipico browser leggerà l'intestazione del tipo di contenuto per rendere il contenuto nel miglior modo possibile (JSON come albero, flusso audio come un giocatore, ecc.). Prova a inviare una stringa JSON a un browser con Content-Type: application/json
e senza. Stesso carico utile ricevuto, presentazione diversa.
Un'applicazione generica farà tutto ciò che vuole con il contenuto. In particolare può decidere di visualizzarlo (o parti di) come HTML grezzo. In tal caso, se il tuo payload include JavaScript formattato correttamente, verrà eseguito.
Questo non è diverso dal classico hardening delle applicazioni. La regola d'oro è non fidarti mai di ciò che ricevi . Ciò include non solo il corpo della tua query HTTP ma anche le intestazioni.
Come nota a margine, il contenuto dannoso può arrivare ai tuoi dati non solo attraverso ciò che ricevi e processa. Qualcuno può anche modificare, ad esempio, i dati che sono memorizzati nel DB direttamente nel DB. Quindi l'assoluta necessità di sfuggire a ciò che viene inviato al destinatario, che è in definitiva il modo in cui vengono eseguiti gli attacchi XSS (e simili).