Come impedire l'iniezione di JSONP

1

Recentemente, mi sono imbattuto in molte applicazioni Web che utilizzano parametri di callback per recuperare i dati formattati JSON. Ciò rende l'applicazione Web vulnerabile all'attacco di JSONP Injection. Quindi qual è il modo efficace per prevenire l'iniezione JSONP.

Il parametro di callback può essere convalidato sul lato server? La richiesta di callback deve essere convalidata anche da CORS?

    
posta PenGeek 20.09.2017 - 05:49
fonte

1 risposta

1

Non utilizzare affatto JSONP - usa CORS.

JSONP è obsoleto ed è sempre stato più un hack di riempimento che una tecnologia ponderata per la condivisione delle risorse. L'alternativa moderna e ampiamente supportata è CORS (Cross-Origin Resource Sharing). Sarai sicuramente in grado di sostituire tutti i tuoi casi d'uso JSONP con esso.

Con CORS, non è più necessario avvolgere il tuo JSON in una funzione di callback (ad esempio cb({"foo": "bar"}) ), ma conservalo così com'è. Invece, si invia un'intestazione Access-Control-Allow-Origin per indicare al browser le origini a cui si desidera fornire l'accesso. Poiché ogni browser abilitato a CORS invia un'intestazione Origin nelle loro richieste di origine incrociata, è possibile produrre dinamicamente l'intestazione ACAO, a seconda della provenienza della richiesta. Una volta consentito, il client sarà in grado di leggere il contenuto della risposta, indipendentemente dal tipo di contenuto. Quindi puoi semplicemente usare il normale JSON.

Esempio di richiesta di origine incrociata da supplicant.example a un'API JSON in server.example :

GET /foo.json HTTP/1.1
Host: server.example
...
Origin: https://supplicant.example
...

Risposta campione:

HTTP/1.1 200 OK
....
Access-Control-Allow-Origin: https://supplicant.example
Content-Type: application/json
...

{"foo": "bar"}

CORS non solo fornisce una maggiore sicurezza su JSONP, ma ti dà la possibilità di lavorare con metodi HTTP arbitrari ( PUT , DELETE , ecc.), puoi dare accesso a intestazioni particolari e molto altro ancora. Mozilla ha una eccellente introduzione a ciò che CORS può fare.

    
risposta data 20.09.2017 - 06:49
fonte

Leggi altre domande sui tag