it-swarm-eu.dev

Prevenzione di XSS per REST API

Ho un'API REST di primavera e un progetto client. La pagina HTML dei progetti client utilizza le chiamate ajax jquery per recuperare i dati dall'API REST utilizzando il formato json o xml. La mia domanda è quella di evitare attacchi XSS su una pagina Web, dove devo eseguire la codifica dei dati di input dell'utente (ovvero dati non attendibili)? Attualmente sto codificando i dati nel mio controller REST prima di restituire la risposta. Sto seguendo l'articolo cheat di OWASP XSS Prevention. Ma dato che nel mio scenario, tutto è ajax chiamate e recupero dati da json e inserimento in html usando jquery, non sono sicuro di dove dovrebbe essere codificatore utente per codificare i dati non attendibili. Inserire la codifica in REST Il controller è una buona opzione?

Grazie in anticipo.

15
MShah

Se l'API REST restituisce puramente JSON (e mai HTML), esegui l'escape HTML sul lato client, in JavaScript.

Se la pagina HTML del client utilizza il modello JQuery o crea HTML con chiamate a funzioni come .html() nessuna di queste per impostazione predefinita dispone della protezione XSS. Un approccio prevede che il codice client chiami esplicitamente una funzione di escape su tutti gli input non attendibili. Tuttavia, un approccio che preferisco è utilizzare un plug-in JQuery che esegue l'escaping automatico. Ecco due approcci per questo:

Le persone possono criticare questo approccio, dicendo "non si può fare affidamento sul controllo lato client per la sicurezza". Tale critica si basa su incomprensioni; in questo caso particolare puoi fare affidamento su di esso.

È da notare che AngularJS include l'escaping automatico per impostazione predefinita. Se oggi hanno scritto JQuery da zero, mi aspetto che anche JQuery lo includa.

Uno dei motivi per non eseguire l'escaping HTML nell'API REST API è che potresti avere un client non HTML che utilizza l'API. In tal caso, sicuramente non vuoi applicare l'escaping HTML .

È importante restituire JSON utilizzando l'intestazione Content-Type corretta (application/json) per evitare attacchi di uso improprio dell'API.

27
paj28